ganzhouzqh 发表于 2010-10-18 09:05:04

矩阵求逆

一个76阶的矩阵,对角线上都有元素,非对角线很少一部分元素,请问这样的矩阵求逆会不会有问题?因为基于此矩阵求解的最终结果远远大于正常值。求教各位高人是什么原因···

qibbxxt 发表于 2010-10-18 10:51:05

你的这个问题更像是一个数值分析的问题,似乎和matlab关系不大,建议你看看数值分析相关的书籍

woniu188 发表于 2010-10-18 11:13:40

可能和算法选择有关,选择合适的算法应该可以解决

chenzhian 发表于 2010-10-18 11:23:31

2# qibbxxt
这个问题还是没有到数值分析上吧(没求方程组的值)?就是一个矩阵求逆。
楼主用det(a)看你的矩阵的行列式det(a)是否等于零。
不等于零那结果就没问题的。
等于零那这个矩阵就没有逆阵的。

bainhome 发表于 2010-10-18 13:44:23

本帖最后由 bainhome 于 2010-10-18 17:10 编辑

楼主问了个空灵飘逸,充满禅意的好问题!如羚羊挂角,无迹可寻!使人赞叹不已。
什么叫拥抱自然?这就是!这才是真正的原生态问题!
回楼上:一般主对角占优矩阵只要不线性相关,不可逆情况很少出现,76阶可能性更小,依我长期在论坛搅和新人的经验,八成是在command windows中求了个逆,结果本来该是零的地方出现了a×10^-n这样的截断误差,MATLAB偏偏不识趣——把这个项提取并放在矩阵最前面作为系数乘,而楼主又选择性忽视,只看里面的数据,自然“远远大于”那个“正确结果”,潇洒飘逸地一问,娱乐一下而已。

Walker0728 发表于 2010-10-18 16:28:19

你用增广矩阵试试

ganzhouzqh 发表于 2010-10-18 17:15:24

敢问增广矩阵怎么试···?

ganzhouzqh 发表于 2010-10-18 17:17:18

:'( det(a)=2.458218086792935e-272,应该是零了,那该怎么修改矩阵呢?这个矩阵形式不能变
4# chenzhian

ganzhouzqh 发表于 2010-10-18 18:05:20

呃···那该怎么办呢?结果是它的行列式几乎是零,有解决办法吗?
5# bainhome

lin2009 发表于 2010-10-18 18:20:50

也来一个“空灵飘逸,充满禅意”的回答,
1、教学目的和要求1掌握矩阵可逆的定义和可逆的充要条件;
2、与增广矩阵没关系,矩阵可逆首先要求是方阵,若不是方阵,才用到增广矩阵;

bainhome 发表于 2010-10-18 18:29:15

本帖最后由 bainhome 于 2010-10-18 18:34 编辑

这个行列式结果说明该矩阵线性相关,基本可以肯定要不就是你输入值错了,要不就是该矩阵错了,如果矩阵本身有问题,可以用pinv来求伪逆,但我想你用不上这个结果。
两个建议:
1.假如是在MATLAB中得到的,请没事不要用符号矩阵去算76阶的逆;
2.像我暗示的那样,你不把矩阵数据拿出来,别人无法给出任何建议——至少我没这个本事。瞎猜我也不愿意干。
最好能先检查一下你的矩阵来源,恐怕问题不会是在求逆上,inv用了二十来年了,没理由为一个70阶的矩阵就破例算错。

bainhome 发表于 2010-10-18 18:33:11

本帖最后由 bainhome 于 2010-10-18 18:42 编辑

另外可用rref化成行最简看看最后有几行零,确定其线性相关性

chenzhian 发表于 2010-10-18 20:34:26

bainhome老师说的有道理,你最好把矩阵贴上来看下。
我们也试下啊。
“基于此矩阵求解的最终结果远远大于正常值”
不知道是否楼主在求方程组的解。
如果是,那可能就是病态线性方程组了。

ganzhouzqh 发表于 2010-10-19 09:19:50

恩,不好意思,没有把矩阵贴出来,矩阵比较大,麻烦大家把文本文件导入matlab后运行下面这段程序,Lg就是我要的矩阵···辛苦大家啦~~
Lgg=load('D:\gaoya_gaotiao.txt');%读取电感参数
k=0;
for i=1:elenum+elenum_t
    for j=1:elenum+elenum_t
      k=k+1;
      Lg(i,j)=Lgg(k);
    end
end
for i=1:elenum+elenum_t
    for j=1:i
      if(i>j)
            Lg(i,j)=Lg(j,i);
      end
    end
end

11# bainhome

lxx244lxx 发表于 2010-10-19 09:51:34

elenum+elenum_t
是多少啊

chenzhian 发表于 2010-10-19 11:06:13

本帖最后由 chenzhian 于 2010-10-19 11:11 编辑

14# ganzhouzqh
代码中的elenum+elenum_t应该是等于76吧 。
我求了他的逆,然后用A=inv(Lg)*Lg。在format long的显示格式下看到的是个单位矩阵。
我认为这个结果没有问题。

ganzhouzqh 发表于 2010-10-19 11:07:54

76,不好意思~~
15# lxx244lxx

ganzhouzqh 发表于 2010-10-19 11:19:17

就像2#所说,求得的det(Lg)基本上是零,是不是根本就不能求逆?
16# chenzhian

lin2009 发表于 2010-10-19 21:33:30

8# 和18# 只看到del(Lg) = 2.4582e-272 很接近于0这个事实,就认为“结果是它的行列式几乎是零”,而有“是不是根本就不能求逆?”的疑问?
而没有看到Lg矩阵中的元素特点:所有的元素都是很小的小数,大都在小数点后第4位才有值!,就算是小数点后第3位有值,如0.009,根据行列式的计算方法,76项这样的小数相乘当然是一个很小的数呢!
不信的话,将对角线的元素抽出来组成对角阵试试,其行列式为1.8138e-274 不等于0,逆矩阵一定存在,但行列式几乎等于0。
经过验证 inv(Lg)*Lg 为单位阵,因此计算结果没有问题。(16#也得出同样结论)

bainhome 发表于 2010-10-19 23:05:59

本帖最后由 bainhome 于 2010-10-19 23:07 编辑

没有运行程序,仅从表面判断看的确要不得。
运行程序后发现结果矩阵是一个前面一部分仅存在对角线元素、后面行数据分布较为平均,用rank验证该矩阵为满秩阵,必然可逆。我前一页的推测基本准确,而这一页我没运行程序直接发言,证明是个nonsense,我已经删掉自己的错误发言,楼上两位比我细致严谨得多。
页: [1] 2
查看完整版本: 矩阵求逆