2010-06-26 12 views

Respuesta

0

Al menos si la memoria sirve, una posibilidad sería Boost::uBlas. Si bien Boost en su conjunto es bastante grande, uBlas por sí solo es bastante más razonable. Además, si la memoria sirve, es una biblioteca de solo encabezado, así que usarla es bastante fácil (no es necesario crear primero la biblioteca, configurar nada para el enlazador, etc.)

Editar: Debo añadir que La computación de autovalores/vectores en general es bastante lenta, incluso con un código bastante optimizado. Dependiendo de exactamente lo que esté haciendo, a menudo vale la pena buscar métodos que (por ejemplo) le permitan obtener el Eigenvalue de solo un subconjunto de la matriz (por ejemplo, Landmark Multidimensional Scaling).

+0

Gracias, pero ¿tiene una función para devolver el valor propio más grande? No lo vi en la documentación. – Erin

+0

no hay función LAPACK para devolver el valor propio más grande. Puedes hacer una diagonalización de la matriz de fuerza bruta que te proporcione todos los valores propios, pero se ahogará mucho más rápido que si usaras solucionadores de Lanzos especializados. –

2

No puedo ofrecerle ningún detalle ya que no lo he usado, pero creo que ARPACK podría ser de ayuda, y especialmente ARPACK ++ que es una adaptación de C++ ya que el paquete original está en Fortran77. Creo que la función MATLAB eigs() usa esto para encontrar el valor propio más grande (y el vector propio correspondiente). Por lo que escuché, también debería poder interactuar con STL.

MATLAB usa las rutinas Fortran77 DSAUPD, DSEUPD, DNAUPD, DNEUPD, ZNAUPD y ZNEUPD. Parecen ser los que hay que buscar en ARPACK ++.

Check it out here.

+0

De hecho, ARPACK es uno de los mejores que hay (+1). Sin embargo, no puedo dar fe de su interfaz C++. –

Cuestiones relacionadas