[已解决] 我的SOR迭代法为何计算结果都是NaN?能指教一下哪里出了问题?

[复制链接]
dccf1234 发表于 2021-1-6 17:21:24
矩阵和右端向量
A=[31,-13,0,0,0,-10,0,0,0;
-13 ,35,-9,0,-11 ,0,0,0,0;
0,-9,31,-10,0,0,0,0,0;
0,0,-10,79,-30,0,0,0,-9;
0,0,0,-30,57,-7,0,-5,0;
0,0,0,0,-7,47,-30,0,0;
0,0,0,0,0,-30,41 ,0,0;
0,0,0,0,5,0,0,27,-2;
0,0,0,-9,0,0,0,-2,29];
b=[-15,27,-23,0,-20,12,-7,7,10]';
x=masor(A,b,1.5)

function x=masor (A,b,omega,x0,ep,N)
n= length(b) ;
if nargin<6 ,N=500;end
if nargin<5 ,ep=1e-6; end
if nargin<4 ,x0=zeros (n,1) ;end
if nargin<3 , omega=1.5;end
x=zeros(n,1); k=0;
while k<N
    for i=1:n
        if i==1
            x1(1)=(b(1)-A(1,2:n)*x0(2:n))/A(1,1);
        else if i==n
                x1(n)=(b(n)-A(n,1:n-1)*x(1:n-1))/A(n,n);
            else
                x1(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,1);
            end
        end
        x(i)=(1-omega)*x0(i)+omega*x1(i);
    end
    if norm(x0-x,inf)<ep, break; end
    k=k+1; x0=x;
end
if k==N ;end
disp(['k=' ,num2str(k)])

最佳答案


TouAkira 发表于 2021-1-7 14:39:26
x1(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,1);
这句不对,应该改成
x1(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);
结果的精度自己设置一下 format long 或者用 fprintf 函数自己定义显示精度

2 条回复


dccf1234 发表于 2021-1-6 17:22:38
还有为甚我算的精度只有小数点后4位,别人都是6位

TouAkira 发表于 2021-1-7 14:39:26
x1(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,1);
这句不对,应该改成
x1(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);
结果的精度自己设置一下 format long 或者用 fprintf 函数自己定义显示精度
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表