> M = [0, 0, 0;6, 1, 3;1, 7, 0]; >> rank(M) ans = 3 >> rank(M') ans = 2 我知道等级函-6ren">
gpt4 book ai didi

matlab - Matlab 的秩函数在小的整数值矩阵上的 "inconsistent"行为感到惊讶

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:00 24 4
gpt4 key购买 nike

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

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

ans =

3

>> rank(M')

ans =

2

我知道等级函数不一定在数值上稳定,因为它限制了奇异值。然而,我预计问题会发生在尺寸大或元素大的矩阵上,而不是 3 x 3 的小整数矩阵。

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

当然我可以手动增加调用等级的容差,但我怎么知道增加到什么程度呢?

是否有另一种数值稳定的方法来计算秩(假设我们知道矩阵是整数)?

编辑:我刚刚发现这种行为是依赖于版本的。以上测试是用Matlab 2014a进行的。在 Matlab 2016b 上,svd(M) 返回第三个奇异值 4.15e-16 并且排名正常。所以也许确实存在版本之间修复的 svd 问题。尽管如此,我仍然不确定我可以信任 rank 到什么程度,所以我相信我的问题仍然有效。

最佳答案

Matlab 2015a/2015b 似乎可以工作(见下文)

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

ans =

2

>> rank(M')

ans =

2

>>

关于matlab - Matlab 的秩函数在小的整数值矩阵上的 "inconsistent"行为感到惊讶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41594612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com