找回密码
 注册
Simdroid-非首页
查看: 116|回复: 10

[编程进阶] 矩阵求逆出错。。。。

[复制链接]
发表于 2008-10-24 14:44:16 | 显示全部楼层 |阅读模式 来自 湖北武汉
我在用Mathematical求逆矩阵,其中会出现这样的问题:

Inverse::luc: Result for Inverse of badly conditioned matrix \
{{-1.44748*10^8-1.19123*10^7*i,<<9>>,<<56>>},{0.29414+0.0060485 *i,<<9>>,<<56>>},<<7>>,{<<1>>},<<56>>} may contain \
significant numerical errors. >>



请问该怎么解决这个问题,或者避免这样的情况出现,请高手帮忙....谢谢了..
发表于 2008-10-24 19:14:24 | 显示全部楼层 来自 江苏无锡
Simdroid开发平台
If you don't know how to ask good question, you will not get good answer.
回复 不支持

使用道具 举报

 楼主| 发表于 2008-10-24 21:53:48 | 显示全部楼层 来自 湖北武汉
不好意思,是我说的太不清楚了。现在我在用Mathematical计算矩阵,有时候纬数比较大,矩阵里面也会出现
比较大的数据,比如我举的例子就出现了10的7次方,所以在对矩阵求逆过程中:Inverse[A ],就会出现Inverse::luc: Result for Inverse  of badly conditioned matrix 这样的语句,但还是可以计算出结果来的,不过我听别人说这样求的逆矩阵是不精确的,我
怕这样会影响数据的准确性,所以想向大家请教一下,出现这样的问题会对计算结果有很大影响吗,如果我想解决这个问
题,应该怎么样操作,当然,矩阵是固定的。请高手帮忙,谢谢了。。
回复 不支持

使用道具 举报

发表于 2008-10-24 23:02:24 | 显示全部楼层 来自 吉林长春
建议楼主看看数值方法类的书
回复 不支持

使用道具 举报

 楼主| 发表于 2008-10-26 11:04:15 | 显示全部楼层 来自 湖北武汉
多谢楼上的提示,我看一下书,好像是这个矩阵里面有些数据超出了机器精度数,不知道这个样子是否还有解决的办法。。。。
回复 不支持

使用道具 举报

发表于 2008-10-27 18:37:28 | 显示全部楼层 来自 吉林长春
当然有,
用符号代替
回复 不支持

使用道具 举报

 楼主| 发表于 2008-10-27 20:48:37 | 显示全部楼层 来自 湖北武汉
比如有一个矩阵A,我要求它的逆矩阵B,即 B=Inverse[A],如果此时出现了Inverse::luc: Result for Inverse of badly conditioned matrix
这样的消息,就说明矩阵A里面有些矩阵元超出了机器精度数,或者求出的矩阵B里面有的矩阵元超出了机器精度数,那楼上说的用符号代替是分别代替A,B两个矩阵,还是仅仅代替两个矩阵里面超出精度数的矩阵元呢,
您能说的更清楚一些吗。。。谢谢。。
回复 不支持

使用道具 举报

发表于 2008-10-27 22:59:21 | 显示全部楼层 来自 吉林长春
把每个矩阵元都用符号代替进行运算,
最后再代入数值,只要精度够高就可以,
如果数值无法达到高精度,
可试试将方程转化为一条件数较小的等价方程进行处理
回复 不支持

使用道具 举报

发表于 2008-10-28 21:35:02 | 显示全部楼层 来自 山西太原
IMHO,矩阵是病态的,意思是说由于某些元素数值过小,导致矩阵看起来是不满秩的,这样求逆求过来就会导致某些数值非常大。由于受到精度限制,使得这些非常大的数值可能会很不准确。这样的问题是出自矩阵本身。如果具体到每一步计算,导致这个问题就是因为那个很小的数值成了分母,所以得到了很大的数字。这是矩阵的数值决定的,即使是用字母代换也无法解决。

Mathematica可以生成任意精度的整数,但是实数似乎有一个精度限制。好象是叫$MachinePrecise吧。你的矩阵比较大,并且这样小的数值太多了,所以乘出来会远超过这个范围。
回复 不支持

使用道具 举报

 楼主| 发表于 2008-10-29 08:54:54 | 显示全部楼层 来自 湖北武汉
恩,情况确实如楼上所说,有很多矩阵元的数值太大了,有的矩阵我就像 楼上feiyuzhen所说的,把将方程转化为一条件数较小的等价方程进行处理,比如C=Inverse[A.B],转化为C=Inverse[A].Inverse[B],这样可以避免一些矩阵出现这样的问题,但有些矩阵却不能这样做。 所以我还是想从根本上解决这个问题,不知道楼上有没有好的办法。。。
回复 不支持

使用道具 举报

发表于 2008-10-29 12:53:01 | 显示全部楼层 来自 山西太原
似乎没什么好办法……那是矩阵本身所决定的。再参考一下数值方法的书把,我对这个不专业
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-5 09:34 , Processed in 0.049154 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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