怎么避免在matlab中矩阵运算出现NaN呀? 我是在用雅可比迭代法计算一个Ax=b的方程组(A是一个20*20的矩阵

结果运算出来x全是NaN,(这是我设b=(1 1 1 ..... 1)'的结果)(如果将b=(0 0 0 ..... 0)就会算出来x=(0 0 0 ....0))
function [x,iter]=mjacobi(A,b,x,ep,N)
if nargin<5, N=500; end
if nargin<4, ep=1e-6; end
if nargin<3, x=zeros(size(b)); end
D=diag(diag(A));
for iter=1:N
x=D\((D-A)*x+b);
err=norm(b-A*x)/norm(b);
if err<ep, break; end
end (这个算法我是按照书上吵的)
矩阵A=
[4 -1/3 -1/5 -1/3 4 ....... ;
-1/3 4 -1/3 -1/5 -1/3 ........ ;
-1/5 -1/3 -4 -1/3 -1/5 ........ ;
......... ];(20*20)

b取zeros(20,1)的时候,
由x=zeros(size(b)),即x初值为0和
x=D\((D-A)*x+b),即x每次迭代后仍为0可知,x始终为0,没有问题。

b去ones(20,1)的时候,x出现NaN只可能由于这一句x=D\((D-A)*x+b)的分母为0,
即某次迭代的时候出现判断 (diag(diag(A))-A)*x==-b,返回值为1。但是按理来说这样迭代是不会出现这种情况的,所以请尝试将循环部分代码改为:
c=0;
for iter=1:N
x=D\((D-A)*x+b);
if (D-A)*x==-b
c=c+1;
end
err=norm(b-A*x)/norm(b);
if err<ep, break; end
end
运行看看c的值。
温馨提示:答案为网友推荐,仅供参考
相似回答