声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3056|回复: 2

[综合讨论] matlab怎样处理比较病态的矩阵的逆?

[复制链接]
发表于 2011-9-26 21:27 | 显示全部楼层 |阅读模式

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

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

x
rt,用什么方法或方式可以得到本就很病态矩阵的逆呢?
提高matlab计算精度?matlab这个貌似这个已经是双精度的了。
还有什么变换或方法啊?请指教。
回复
分享到:

使用道具 举报

发表于 2011-9-26 23:38 | 显示全部楼层
看看这些有否帮助
Ref: Matrix is close to singular or badly scaled
  http://www.mathworks.com/matlabc ... /view_thread/170919
  http://groups.google.com/group/c ... ad/f640ae64aa62fbe6
  http://dmpeli.mcmaster.ca/Matlab ... otes/Lecture2_4.htm
  请问如何改善病态矩阵条件数(Xb=A)? http://forum.vibunion.com/thread-89047-1-1.html
  请问如何判断矩阵是否为病态? http://forum.vibunion.com/thread-33268-1-1.html
 楼主| 发表于 2011-10-16 21:17 | 显示全部楼层
经过几天的总结,总算把自己的问题解决了,谢谢各位的帮助。
至于当A病态的时求解AX=B,可以采用SVD方法。
楼上列出的那个帖子 “请问如何改善病态矩阵条件数(Xb=A)?http://forum.vibunion.com/thread-89047-1-1.html”中所述的改变病态矩阵条件数,对条件数很大,如在10e24严重病态的时候,方程两边乘以每行最大数形成的对角矩阵Di后也可能是病态的。我计算后也未能得到正确答案。

为了让以后遇到同样问题的XDJM方便,我列出一个用SVD(奇异值分解)求解病态线性方程组的matlab程序:
%A为系数矩阵,b为方程右边向量
n=length(A);
epsilon=1e-15;%自定
x=zeros(n,1);
[U,S,V]=svd(A);
sdiag=diag(S);
for i=1:n
    if sdiag(i)>epsilon
        x=x+U(:,i)'*b/sdiag(i)*V(:,i);
    end
end

为了验证,我在数值分析书本上找一个具有答案的方程组,人为将条件数增大到10e17的样子,可以得到标准答案,所以可以使用。

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-9-21 08:56 , Processed in 0.054436 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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