2009-06-09 21 views

Répondre

1

Essayez d'utiliser la bibliothèque 'matrice':

http://www.ruby-doc.org/stdlib/libdoc/matrix/rdoc/index.html 
3

Une possibilité numériquement plus stable que l'inversion directe est d'utiliser un Cholesky decomposition avec le package que vous trouverez here:

require 'Cholesky.rb' 
require 'pp' 
# m is the covariance matrix you want to invert (it is positive semidefinite) 
l = m.cholesky 
li = l.inverse 
lit = li.transpose 
# lit*li is approximately the inverse and the next line shows this 
pp lit*li*m 

Mieux que inverser l est d'utiliser la méthode décrite dans l'article wikpedia lié ci-dessus.

Si votre problème est numériquement trop instable, alors considérez le Singular Value Decomposition, mais je n'ai pas de code pour cela.

3

Si vous pouvez compiler le code, utilisez rubis GSL

gem install gsl

L'inverse peut être obtenue en utilisant le module LU

inverse=GSL::Linalg::LU.invert(matrix)

0

Il est NMatrix. Il existe un support pour diverses opérations, y compris certaines de BLAS et LAPACK (en utilisant ATLAS).