【问题标题】:Is this a ruby's bug in class Matrix?这是 Matrix 类中的 ruby​​ 错误吗?
【发布时间】:2017-05-31 10:12:59
【问题描述】:

我在 ruby​​ 中使用 Matrix 类来计算特征值和特征向量。使用此代码:

m = Matrix[[0.6868,0.6067],[0.6067,0.5978]]
v, d, v_inv = m.eigensystem

正确的结果应该是:

[ 1.25057433  0.03398123]
[[ 0.73251454 -0.68075138]
 [ 0.68075138  0.73251454]]

我使用 Python 通过numpy 确认了这一点。

但是,我得到了以下结果:

d=[[0.033970204576497576,   0],
 [0,    1.2506297954235022]]

v=[[0.6807528514962294, 0.7325131774785713],
 [-0.7325131774785713,  0.6807528514962294]]

这是红宝石的错误吗?我的 ruby​​ 版本如下:

ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]

【问题讨论】:

    标签: ruby matrix eigenvalue eigenvector


    【解决方案1】:

    这绝不是一个答案,但为了格式化,我会把它放在这里:

    说到数学,我会使用来检查结果的正确性:

    > entries <- c(0.6868, 0.6067, 0.6067, 0.5978)
    > input <- matrix(entries, nrow=2, byrow=TRUE)
    > input
    
    #        [,1]   [,2]
    # [1,] 0.6868 0.6067
    # [2,] 0.6067 0.5978
    
    > input_eigen <- eigen(input)
    > input_eigen 
    
    $values
    # [1] 1.2506298 0.0339702
    
    $vectors
    #            [,1]       [,2]
    # [1,] -0.7325132  0.6807529
    # [2,] -0.6807529 -0.7325132
    

    我相信上面的结果,这意味着 ruby​​ 可能比 python/numpy 做得更好。

    【讨论】:

    • 感谢您的回答。你能告诉我为什么你认为在这个问题上 ruby​​ 比 python/numpy 更好吗?
    • 正如我在总结中所写的,在数学方面,我对 r 的信任超过了 ruby 和 python。并且 ruby​​ 的结果与 R 产生的结果相同,而 python 的结果则不然。
    • 好的,我明白了。谢谢^^
    • @Ireul,您将此标记为正确答案。这是否意味着您从另一个来源(wolfram/手动)检查它并发现 numpy 确实是错误的?如果是的话,它不是比你原来的问题更有趣吗?您是否在某个地方提出了后续问题或联系了包维护人员或其他什么?
    猜你喜欢
    • 2015-03-04
    • 2011-01-04
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2011-09-28
    相关资源
    最近更新 更多