matlab-雅克比迭代法

时间:2023-01-06 04:23:03

%算法 p188
%例题 p209
clc;
clear;
A=[1 0.4 0.4
0.4 1 0.8
0.4 0.8 1];
b=[ 1
2
3];
%迭代四次
height=size(A,1);
D=diag(diag(A));
L=tril(A,-1);%得到L
U=triu(A,1);%得到U
% x=[1 ;1 ;1]%初始向量x
x=ones(height,1);
k=0;
for i=1:1:length(A)
for j=1:1:length(A)
sum=0;
if j~=i
sum=sum+A(i,j)*x(j);
end
x(i)=(b(i)-sum)/A(i,i);
k=k+1;

end
% %迭代4次
% %迭代矩阵B
% B=inv(D)*(L+U)
% f=inv(D)*b
% x(1)=B*x(1)+f
% x(2)=B*x(2)+f
% x(3)=B*x(3)+f
end
x1=A\b
x


%上面的三行代码等于下面注释掉的多行代码
% d=diag(A)
% D=zeros(height,height);
% for i=1:1:height
% D(i,i)=d(i)
% end
% L=zeros(height,height);
% U=zeros(height,height);
% for i=1:1:height
% for j=1:1:height
% if i<j
% L(i,j)=A(i,j)
% else if i>j
% U(i,j)=A(i,j)
% end
% end
% end
% end
%A=D+L+U
%k表示迭代次数