雅可比迭代法 高斯 賽德爾迭代法

2021-09-12 14:57:27 字數 2015 閱讀 6409

求解方程組

%用雅可比迭代法求解方程組ax=b

%輸入:a為方程組的係數矩陣,b為方程組右端的列向量,

%輸入:x0為迭代初值構成的列向量,nm為最大迭代次數,eps為誤差精度

%輸出:x為求得的方程組的解構成的列向量,k為迭代次數

d =diag

(diag

(a))

; l=

-tril

(a,-1)

; u=

-triu

(a,1);

b=d\(l+u)

; d=d\b;

k=1;

disp

('雅可比迭代法');

while k<=nm

x=b*x0+d;

%雅可比迭代式

ifnorm

(x-x0)

disp

('迭代次數為');k

disp

('方程組的解為');x

return

; end

x0=x;

k=k+1;

end%下面:如果達到最大迭代次數仍不收斂,輸出警告語句及迭代的最終結果(並不是方程組的解)

disp

('在最大迭代次數內不收斂!');

disp

('最大迭代次數後的結果為');x

function [x,k]

=fgseid

(a,b,x0,nm,eps)

%用高斯-塞德爾迭代法法求解方程組ax=b

%輸入:a為方程組的係數矩陣,b為方程組右端的列向量,x為迭代初值構成的列向量,nm為最大迭代次數,eps為誤差精度

%輸出: x為求得的方程組的解構成的列向量,k為迭代次數

d =diag

(diag

(a))

; l =

-tril

(a,-1)

; u =

-triu

(a,1);

g =(d-l)\u;

d =(d-l)\b;

k =1;

disp

('高斯-塞德爾迭代法');

while k<=nm

x = g * x0 + d;

%計算迭代矩陣

ifnorm

(x-x0)

disp

('迭代次數為');k

disp

('方程組的解為');x

return

;%上面:達到精度要求就結束程式,輸出迭代次數和方程組的解

endx0 = x;

k = k +1;

end%下面:如果達到最大迭代次數仍不收斂,輸出警告語句及迭代的最終結果(並不是方程組的解)

disp

('在最大迭代次數內不收斂!');

disp

('最大迭代次數後的結果為'

);x

a = [5 -1 -1 -1; -1 10 -1 -1; -1 -1 5 -1; -1 -1 -1 10];

b = [ 4 13 8 34]';

x0 = [0 0 0 0]';

nm = 100;

eps = 0.0001;

[x,k] = fjacobi(a,b,x0,nm,eps);

[x,k] = fgseid(a,b,x0,nm,eps);

結果:

高斯 賽德爾迭代法python實現

import scipy import scipy.linalg import numpy.matlib import numpy as np import time import warnings warnings.filterwarnings ignore def gaussseidel inv...

雅克比迭代法與高斯塞德爾迭代法求解方程組(C語言)

分別用雅可比 迭代法與高斯塞德爾迭代法解下列方程組 雅可比迭代法 include include define eps 1e 6 define max 100 雅可比迭代法 void jacobi float a,int n,float x y i a i n 1 n s a i n 1 i eps...

牛頓迭代法

創新工廠的筆試題 不用庫函式sqrt 求乙個整型數n的開方,要求精度達到0.001即可。在這裡首先介紹一下牛頓迭代法 假設乙個方程為 f x 0 那麼假設其解為x0,則用泰勒級數展開之後可得 f x f x0 f x0 x x0 0 其中x為其近似解。根據上式推導出 x x0 f x0 f x0 這...