当前位置:  开发笔记 > 编程语言 > 正文

对Matlab的秩函数在小整数值矩阵上的"不一致"行为感到惊讶

如何解决《对Matlab的秩函数在小整数值矩阵上的"不一致"行为感到惊讶》经验,为你挑选了0个好方法。

今天我对此感到非常惊讶:

>> M = [0, 0, 0;6, 1, 3;1, 7, 0];
>> rank(M)

ans = 

    3

>> rank(M')

ans = 

    2

我知道秩函数不一定在数值上稳定,因为它阈值奇异值.然而,我期待在尺寸大或元素大且不是3×3小整数矩阵的矩阵上发生问题.

我检查了发生了什么,实际上svd(M)给出奇异值7.82,5.93,2.91e-15,而默认容差只有max(大小(A))*eps(max(s))= 2.665e-15.另一方面,svd(M')给出0作为第三奇异值(可能是由于整列为零).

当然我可以手动增加呼叫等级的容忍度,但我怎么知道增加它的距离呢?

是否有另一种数值稳定的方法来计算排名(比如我们知道矩阵是整数)?

编辑:我刚发现此行为与版本有关.上述测试使用Matlab 2014a进行.在Matlab 2016b上,svd(M)返回第三个奇异值为4.15e-16并且排名正常.所以也许确实在版本之间修复了svd的问题.不过,我不确定我能在多大程度上信任等级,所以我相信我的问题仍然有效.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有