【问题标题】:how to ignore relatively small values in matrices calculations in matlab如何在matlab中忽略矩阵计算中相对较小的值
【发布时间】:2015-02-05 09:20:15
【问题描述】:

假设我们有一个矩阵 A=[1 0 0; 0 2 0; 0.00001 0.000002 0.00003] 在 Matlab 中。 例如,您知道在计算排名时如何忽略(考虑为 0)其中的小值吗?我需要的是针对此类问题的通用解决方案!

【问题讨论】:

  • 您对小的定义是什么? round 的数字会吗?
  • 我的意思是我可以设置一个阈值来定义小的值,或者如果我可以根据矩阵的值设置一个相对阈值,那就更好了。

标签: matlab numerical


【解决方案1】:

那么...选择一个阈值并将低于该阈值的任何值设置为 0?

threshold = 0.0001;
A(A < threshold) = 0

或者根据A 的其余部分,您可以四舍五入:

floor(A) %// or round(A) or fix(A)...

【讨论】:

  • 非常感谢!但是你知道在整个环境中发送阈值的方法吗?不仅仅是一个对象!
  • @Ziad 这听起来是个非常糟糕的主意……你为什么要这样做?
  • 你写的现在已经足够了,因为我想计算一个真实世界矩阵的秩,我知道矩阵中的值永远不会及时达到零,但它们会比较小.我现在真的不需要“环境门槛”。
  • 万一出现更好的答案,这样我猜想的问题就会产生更多的兴趣
  • @Ziad 您应该等待一天或至,然后才能接受。许多人懒得看公认的答案。这样可以确保问题得到足够的关注,即对问题和答案有更多的投票。
【解决方案2】:

此处已列出的阈值是一种简单的解决方案,它在某些情况下有效,在其他情况下会中断。对你来说可能没问题。

对于求矩阵秩的特定问题,更正确的答案是使用奇异值分解。在您的示例中,它看起来像这样:

threshold = 0.001;
s = svd(A)
effectiveRank = sum(s/s(1) > threshold);

s 的条目从大到小排序。除以 s(1) 可以让您对 A 进行缩放。

【讨论】:

    猜你喜欢
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2017-10-15
    • 2012-12-20
    相关资源
    最近更新 更多