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