A=[4 1;4 6 ]
b=[6:-8]
x=zeros(2,1]
MaxIter=100
Iter=0
P=0
while (P==0)
for i=1:1m
s=0
for j=1:1:m
if i~=j then
s=s+A(i,j)*x(j);
end
end
x(i)=(b(i)-s)/A(i,i));
end
Iter=Iter+1
printf("\n\n\t%d",Iter")
printf("\t %f",x)
end
mprintf ("\n\nThe approximate solutions are: %.3f",x)
如果我将最新的近似值减去先前的近似值,我应该在 Iter+Iter+1 之前添加什么收敛标准,以在容差误差 0.0001 处停止 while 循环
最常用的标准衡量连续迭代之间差异的范数,因此,您可以在 while 循环开始时保存先前的 x 并在计算新的 x 后更新它:
A=[4 1;4 6]
b=[6;-8]
m=2;
x=zeros(m,1)
MaxIter=100
for Iter = 0:MaxIter
prev_x = x;
for i=1:m
s=0;
for j=1:m
if i~=j then
s=s+A(i,j)*x(j);
end
end
x(i)=(b(i)-s)/A(i,i);
end
mprintf("\n\n\t%d",Iter)
mprintf("\t %f",x)
if norm(x-prev_x) < 0.0001
break
end
prev_x = x;
end
mprintf ("\n\nThe approximate solutions are:");
mprintf("\t %f",x)
0 1.500000 -2.333333 1 2.083333 -2.722222 2 2.180556 -2.787037 3 2.196759 -2.797840 4 2.199460 -2.799640 5 2.199910 -2.799940 6 2.199985 -2.799990 近似解为:2.199985 -2.799990