找了段程式碼,稍加改造,供參考:
function [x,n]=jacobi(A,b,eps,x0)
% Jacobi迭代法求解線性方程組,其中
% A --- 方程組的係數矩陣
% b --- 方程組的右端項
% eps --- 精度要求,預設為1e-6
% x0 --- 解的初值,可省略
% x --- 方程組的解
% n --- 迭代次數
if nargin < 2, error("輸入引數數量不足"); end
if nargin < 4, x0 = zeros(length(b), 1); end
if nargin < 3, eps= 1.0e-6; end
M = 200; % 最大迭代次數
D=diag(diag(A)); % 求A的對角矩陣
L=-tril(A,-1); % 求A的下三角陣
U=-triu(A,1); % 求A的上三角陣
B=D\(L+U);
f=D\b;
x=B*x0+f;
n=1; %迭代次數
while norm(x-x0)>=eps
x0=x;
n=n+1;
if(n>=M)
disp("Warning: 迭代次數太多,可能不收斂!");
return;
end
呼叫示例:
A = [
9 -1 3
-1 10 -2
-2 1 10
];
b=[10; 7; 6];
jacobi(A,b,1e-6)
得到結果:
ans =
0.98126975286522
0.93860544813362
0.70239327635714
找了段程式碼,稍加改造,供參考:
function [x,n]=jacobi(A,b,eps,x0)
% Jacobi迭代法求解線性方程組,其中
% A --- 方程組的係數矩陣
% b --- 方程組的右端項
% eps --- 精度要求,預設為1e-6
% x0 --- 解的初值,可省略
% x --- 方程組的解
% n --- 迭代次數
if nargin < 2, error("輸入引數數量不足"); end
if nargin < 4, x0 = zeros(length(b), 1); end
if nargin < 3, eps= 1.0e-6; end
M = 200; % 最大迭代次數
D=diag(diag(A)); % 求A的對角矩陣
L=-tril(A,-1); % 求A的下三角陣
U=-triu(A,1); % 求A的上三角陣
B=D\(L+U);
f=D\b;
x=B*x0+f;
n=1; %迭代次數
while norm(x-x0)>=eps
x0=x;
x=B*x0+f;
n=n+1;
if(n>=M)
disp("Warning: 迭代次數太多,可能不收斂!");
return;
end
end
呼叫示例:
A = [
9 -1 3
-1 10 -2
-2 1 10
];
b=[10; 7; 6];
jacobi(A,b,1e-6)
得到結果:
ans =
0.98126975286522
0.93860544813362
0.70239327635714