声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1689|回复: 2

[编程技巧] matlab运行后没结果怎么办?

[复制链接]
发表于 2011-3-31 13:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
A=[1,5,-3;5,-2,1;2,1,-5];
b=[2;4;-11];
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
回复
分享到:

使用道具 举报

发表于 2011-4-1 00:54 | 显示全部楼层
回复 1 # 冷凌川 的帖子

检查下算法是否正确? 发散!?
发表于 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

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-27 13:54 , Processed in 0.109918 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表