julian 发表于 2011-9-26 21:27

matlab怎样处理比较病态的矩阵的逆?

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

ChaChing 发表于 2011-9-26 23:38

看看这些有否帮助
Ref: Matrix is close to singular or badly scaled
http://www.mathworks.com/matlabcentral/newsreader/view_thread/170919
http://groups.google.com/group/comp.soft-sys.matlab/browse_thread/thread/f640ae64aa62fbe6
http://dmpeli.mcmaster.ca/Matlab/Math1J03/LectureNotes/Lecture2_4.htm
请问如何改善病态矩阵条件数(Xb=A)? http://forum.vibunion.com/thread-89047-1-1.html
请问如何判断矩阵是否为病态? http://forum.vibunion.com/thread-33268-1-1.html

julian 发表于 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);
=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]
查看完整版本: matlab怎样处理比较病态的矩阵的逆?