17 votos

¿Computar el valor propio más grande de una matriz sparse muy grande?

Estoy tratando de calcular el asintótica tasa de crecimiento específica de un problema combinatorio dependiendo de un parámetro w, mediante la Transferencia-método de la Matriz. Esto equivale a calcular el mayor autovalor de la matriz correspondiente.

Para pequeños valores de w, la matriz correspondiente es pequeño y que se puede utilizar el llamado método de la potencia - comenzar con el vector, y se multiplica por la matriz, y bajo determinadas condiciones, usted obtendrá el vector propio correspondiente al mayor valor propio. Sin embargo, para los valores de w que me interesa, la matriz se vuelve a los grandes, y por lo que el vector se vuelve demasiado grande - $n>10,000,000,000$ entradas o así, así que no puede ser contenida en la memoria de la computadora y necesito de programación extra trucos o un ordenador muy potente.

Como para la propia matriz, no es necesario almacenar en la memoria - puedo acceder a ella como una caja negra, es decir, dado $i,j$ puedo regresar $A_{ij}$ a través de un simple cálculo. También, la matriz tiene sólo 0 y 1 entradas, y yo creo que es escasa (es decir, sólo alrededor de $\log n$ de las entradas son 1, $n$ el número de filas/columnas). Sin embargo, la matriz es no simétrica.

¿Hay algún método más espacio efectivo para el cálculo de autovalores para un caso como este?

9voto

varikin Puntos 1335

Usted podría utilizar la Arnoldi Iteración del algoritmo. Este algoritmo sólo requiere de la matriz $A$ para la matriz de vectores multiplicación. Estoy esperando que usted será capaz de caja negra de la función $v\rightarrow Av$. Lo que generan es una parte superior de la matriz de Hessenberg $H$ cuyos autovalores que puede ser calculada barato (por un método directo o el cociente de Rayleigh iteración) y las que se aproximan a los valores propios de a $A$. Arnoldi Iteración le dará la mejor aproximación para el autovalor dominante así que sospecho que usted no tiene que hacer muchas iteraciones antes de que usted tenga una buena estimación.

Una excelente introducción a este es: "Álgebra Lineal Numérica" por Trefethen y Bau. (p250)

El algoritmo básico se puede encontrar aquí: http://en.wikipedia.org/wiki/Arnoldi_iteration

Ahora la única cosa que se requiere para hacer de este un completo y funcional algoritmo es una condición de terminación. Ya que no parecen necesitar el autovalor dominante a un alto grado de precisión, yo no me preocuparía y sólo se detendrá cuando la autovalor dominante estiman que no cambia demasiado.

Si usted tiene Matlab siempre se puede utilizar el construido en función de eigs(Afun,n,...) donde Afun es la caja negra en función de la manija que calcula el $Av$.

Buena suerte!

4voto

Juan Puntos 2898

Para un paquete de computadora que resuelve el autovalor para la ampliación de la matriz dispersa problema. Uso ARPACK.

De la wiki:

El paquete está diseñado para calcular un unos valores propios y sus correspondientes los vectores propios de grandes dispersas o estructurado de matrices, el uso de la Implícitamente Se Reinicia Arnoldi Método (IRAM) o, en el caso de los simétrica matrices, la correspondiente variante de el algoritmo de Lanczos.el algoritmo de Lanczos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X