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

不满秩的矩阵行列式不为零?

[复制链接]
发表于 2011-7-27 11:13:22 | 显示全部楼层 |阅读模式 来自 江苏南京
计算一个十阶矩阵的秩得到的结果是9,但是球矩阵的行列式值不是0,而是E+76数量级,请问是什么原因?
发表于 2011-7-27 12:23:20 | 显示全部楼层 来自 广东广州
Simdroid开发平台
你求错了吧,不太可能出现你说的情况,Matlab再不济,基本的线性代数规则还是不会差很多的。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-27 21:50:20 | 显示全部楼层 来自 江苏南京
谢谢总版主指教,可是我利用rank 和det进行计算得到的结果确实如此,下面附上矩阵求教

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2011-7-28 00:01:02 | 显示全部楼层 来自 英国
这个矩阵自身的问题,最大和最小的非零奇异数相差太大了。
在使用rank函数时改下tol可以解决这个问题。

svd(aaa)返回的结果是

4.62013102248461e+15
132003935791.647
43684284660.6086
563810644.958191
67064417.5064577
36766337.7122677
2288109.59096890
17453.4044193914
3834.86776732737
5.31112774302949

svd得到的最大值和最小值之间相差了好多个量级,这也可以从cond(aaa)看出来:
cond(aaa)

ans =
  8.6990e+014

既然所有的singular value都非0,这个矩阵自然是满秩的。
Matlab的rank函数采用的也是svd法,但是直接rank的确得到的结果是9。
这是因为由于考虑到计算误差,matlab并不是直接拿奇异数和0相比,而是参照了一个容忍值tol.
具体到rank函数里,tol = max(size(aaa)) *norm(aaa) *eps。如果奇异值小于tol的话就认为是0。

可是这个矩阵aaa的norm值确实太大(4.6201e+15),以至于相应计算得出的tol=10.2588.
而这个容忍值却是比最小的一个奇异值5.311大的,也就导致了后者被忽略。
那么rank函数得到的结果就是9。

看下面两个命令就清楚了:
>> rank(aaa,5.32)

ans =
     9

>> rank(aaa,5.31)

ans =
    10

前者比5.31112774302949略大,后者则略小。
所以你只要手动指定一个合适的tol值就行了。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-28 16:51:16 | 显示全部楼层 来自 江苏南京
多谢指教,看来我是在使用rank的时候出现了错误
回复 不支持

使用道具 举报

发表于 2011-7-28 16:56:35 | 显示全部楼层 来自 天津
也可以用cond条件数的命令来评估你的矩阵的奇异程度;奇异性太高,默认的参数可能就不适合了。
对于奇异矩阵,可以通过一定的假设和转换,生成条件数比较好的矩阵。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-28 16:58:30 | 显示全部楼层 来自 江苏南京
另外还想继续问一句,为什么要设置那个tol呢,干嘛不直接去与0相比较呢? 4# nwcwww
回复 不支持

使用道具 举报

发表于 2011-7-28 18:46:03 | 显示全部楼层 来自 吉林松原
另外还想继续问一句,为什么要设置那个tol呢,干嘛不直接去与0相比较呢? 4# nwcwww
limitmiao 发表于 2011-7-28 16:58


这就是数值计算的问题了,
计算机分配给每一个数的空间是有限的,
很小的浮点数有可能是计算时由于圆整误差带来的,
直接和0比较会把这种小浮点数得以保留,从而扩大误差,
指定一个合理的误差范围可以消除这种误差

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-28 22:27:49 | 显示全部楼层 来自 江苏南京
您的意思是我明白,但是单纯到rank这个命令中设置这么个tol我就不明白了,求教 8# feiyuzhen
回复 不支持

使用道具 举报

发表于 2011-7-30 00:18:19 | 显示全部楼层 来自 吉林松原
建议楼主看看奇异值分解是怎么回事,
仔细看看4楼的回答,他的解答很清楚,
相关命令的matlab帮助文档也很明了
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-6 09:20 , Processed in 0.043703 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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