如何忽略matlab中矩阵计算中相对较小的值
how to ignore relatively small values in matrices calculations in matlab
假设我们有一个矩阵 A=[1 0 0; 0 2 0; 0.00001 0.000002 0.00003] 在 Matlab 中。
例如,您知道如何在计算排名时忽略(视为 0)其中的小值吗?我需要的是此类问题的通用解决方案!
所以...选择一个阈值并将低于该阈值的值设置为 0?
threshold = 0.0001;
A(A < threshold) = 0
否则,根据 A
的其余部分,您可以四舍五入:
floor(A) %// or round(A) or fix(A)...
已在此处列出的阈值处理是一个简单的解决方案,它在某些情况下有效,但在其他情况下会失效。可能适合你。
对于求矩阵秩的特定问题,更正确的答案是使用奇异值分解。在您的示例中,它看起来像这样:
threshold = 0.001;
s = svd(A)
effectiveRank = sum(s/s(1) > threshold);
s
的条目从大到小排序。除以 s(1) 使您不受缩放 A 的影响。
假设我们有一个矩阵 A=[1 0 0; 0 2 0; 0.00001 0.000002 0.00003] 在 Matlab 中。 例如,您知道如何在计算排名时忽略(视为 0)其中的小值吗?我需要的是此类问题的通用解决方案!
所以...选择一个阈值并将低于该阈值的值设置为 0?
threshold = 0.0001;
A(A < threshold) = 0
否则,根据 A
的其余部分,您可以四舍五入:
floor(A) %// or round(A) or fix(A)...
已在此处列出的阈值处理是一个简单的解决方案,它在某些情况下有效,但在其他情况下会失效。可能适合你。
对于求矩阵秩的特定问题,更正确的答案是使用奇异值分解。在您的示例中,它看起来像这样:
threshold = 0.001;
s = svd(A)
effectiveRank = sum(s/s(1) > threshold);
s
的条目从大到小排序。除以 s(1) 使您不受缩放 A 的影响。