求解方程組
%用雅可比迭代法求解方程組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 這...