2017-05-31 6 views
2

J'utilise la classe Matrix dans ruby ​​pour calculer les valeurs propres et les vecteurs propres. Avec ce code:Est-ce un bug de Ruby dans la classe Matrix?

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

le résultat correct doit être:

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

que je confirme avec numpy en utilisant Python.

Cependant, je suis le résultat ci-dessous:

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

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

Est-ce le bug d'un rubis? La version de mon ruby ​​ci-dessous:

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

Répondre

0

Ce serait pas du dire une réponse, mais je vais le mettre ici pour des raisons de mise en forme:

En ce qui concerne les mathématiques, j'utiliser pour vérifier l'exactitude du résultat:

> 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 

Je fais confiance au résultat ci-dessus, ce qui signifie rubis fait sans doute mieux, que python/numpy.

+0

Nous vous remercions de votre réponse. Et pourriez-vous me dire pourquoi est-ce que ruby ​​est meilleur que python/numpy sur cette question à votre avis? – Ireul

+0

Comme je l'ai écrit dans le résumé, je fais plus confiance à [tag: r] qu'à [tag: ruby] et [tag: python] quand il s'agit de mathématiques. Et le résultat de Ruby est le même que celui obtenu avec R, alors que celui de Python ne l'est pas. – mudasobwa

+0

OK, je l'ai eu. Merci ^^ – Ireul