如何解决Scilab中的Gauss Seidel收敛
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之前放上收敛准则以使while循环在容差误差0.0001处停止
解决方法
最常用的标准衡量连续迭代之间差异的范数,因此,您可以只将先前的x保存在while循环的开头,并在计算出新的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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。