冷凌川 发表于 2011-3-31 13:55

matlab运行后没结果怎么办?

A=;
b=;
x0=ones(size(b));
D=diag(diag(A));
U=triu(A,1);
L=tril(A,-1);
G=-(D+L)\U;
d1=(D+L)\b;
x=G*x0+d1;
n=1;
while norm(x-x0)>=1e-4
x0=x;
x=G*x0+d1;
n=n+1;
end
x
n

x =

-Inf
   NaN
-Inf


n =

   315

ChaChing 发表于 2011-4-1 00:54

回复 1 # 冷凌川 的帖子

检查下算法是否正确? 发散!?

meiyongyuandeze 发表于 2011-4-1 09:00

我看了你的程序,应该是用Gauss-Seidel 迭代方法求线性方程组的解的问题。程序编写有个错的地方:G=-(D+L)\U,应该是G=(D+L)\U。
但即使修改了还是出现发散的结果,原因在于该线性方程组的迭代矩阵G并不满足迭代收敛的充分必要条件即谱半径小于1. 你的这个问题的谱半径为9.5958>1,因此得不到收敛解。
你可以事先根据下面的两个条件来判断使用迭代法是不是收敛:
1.看系数矩阵是不是严格对角占优
2. 若系数矩阵为正定的对称阵则可采用Gauss-Seidel 迭代方法。
你可以看下,你的系数矩阵A不是正定的。
希望对你有帮助!


页: [1]
查看完整版本: matlab运行后没结果怎么办?