function X=gsdd(A,b,X0,detx,maxN)
%A,b为方程组Ax=b中的矩阵A和矢量b
%X0为x的初始值
%detx为迭代终止条件,若两次迭代X的距离(2范数)小于detx,则停止迭代
%maxN为最大迭代次数,若经过maxN次迭代仍不收敛,则停止迭代
[~, m]=size(A);
X=X0;
for k=1:maxN
for j=1:m
if j==1
X(1)=(b(1)-sum(A(1,2:m).* X(2:m)'))/ A(1,1);
elseif j==m
X(m)=(b(m)-sum(A(m,1:m-1).* X(1:m-1)'))/A(m,m);
else
X(j)=(b(j)-sum(A(j,1:j-1).*X(1:j-1)')-sum(A(j,j+1:m).*X(j+1:m)'))/ A(j,j);
end
end
djwcX=norm(X'-X0);
xdwcX=djwcX/(norm(X')+eps);
X0=X';
if (djwcX <detx)&&(xdwcX <detx)
times = j;
disp(times);
return
end
end
if (djwcX>detx)&&(xdwcX>detx)
disp('雅可比迭代次数已经超过最迭代次数maxN')
end
举例应用:
A=[27 6 -1;6 15 2;1 1 54];
>> b=[85;5;110];
>> X0=[0;0;0];
>> detx=0.00001;
>> maxN=20;
>> X=gsdd(A,b,X0,detx,maxN)