2010-07-20 18 views
11

Si tuviera una matriz cuadrada de 1,000 por 1,000 ¿podría Lapack calcular los vectores propios y los valores propios de esta matriz? Y si puede, ¿cuánto tiempo tomaría? Además, ¿qué tal una matriz de 10,000 por 10,000 o incluso una matriz de 1,000,000 por 1,000,000?¿Puedo usar Lapack para calcular los valores propios y vectores propios de matrices dispersas grandes?

Tenga en cuenta que estas serán matrices dispersas pobladas principalmente por ceros (las matrices serán gráficos que representan redes sociales). ¿Hay algún procedimiento especial en Lapack para tratar con matrices dispersas? Veo la recomendación de Arpack. Pero, ¿esto permitiría calcular matrices muy grandes?

+0

Estoy usando LAPACK en Intel MKL para el mismo propósito. Usualmente mis cálculos son con matrices n = 20k, m = entre 100m y 1m. El cálculo de valores propios es bastante rápido, si también necesita todos los vectores propios, demora unos 30 minutos en una PC rápida (i7-2600, 4 núcleos). Si tiene 16 GB de RAM, la memoria no es un problema. – mete

Respuesta

1

Lapack solamente tiene soporte para las matrices densas y con bandas (no hay soporte para matrices dispersas en general). Entonces, a menos que su matriz dispersa esté agrupada (de su descripción parece que sería una matriz dispersa general, generalmente almacenada en un esquema de almacenamiento de filas comprimido), entonces lapack no es lo que desea usar.

Para grandes matrices dispersas, Arpack sería un buen lugar para comenzar.

9

LAPACK no tiene soporte especial integrado para matrices dispersas, pero ARPACK sí. Dependiendo de la máquina en la que planee ejecutar esto, esto podría descartar el uso de LAPACK, ya que puede quedarse sin memoria para matrices muy grandes. Consulte http://www.netlib.org/utk/people/JackDongarra/la-sw.html para obtener un resumen de varias bibliotecas de álgebra lineal.

No hay forma de darle una estimación significativa de cuánto tiempo tomarían estos cálculos sin detalles de las matrices que espera (las simétricas serán mucho más rápidas), en qué procesador planea ejecutar esto, cuánta memoria que tiene disponible, etc.

sobre la base de sus otras preguntas, yo recomendaría quedarse con MATLAB. Tiene soporte de matriz escasa y es bueno para el álgebra lineal en general.

3

Si sus matrices son escasas, probablemente sea mejor que use un paquete sparse matrix. Consulte este StackOverflow article para obtener más información.

Uso Lapack que podría hacer un 1000 x 1000 en un par de segundos (dependiendo de la máquina). Un 10000 x 10000 tomaría 1000 veces más, ya que todos los algoritmos tienden a ser O (n^3).

Cuestiones relacionadas