Por lo que he entendido del problema, quieres calcular unos cuantos vectores propios asociados a los valores propios más pequeños de $C:=D-BL^{-1}B^T$ (probablemente $C$ es simétrica y definida positiva). Dado que las matrices implicadas son dispersas, puede utilizar métodos basados en el método de Arnoldi implementado, por ejemplo, en ARPACK . Una buena característica de estos métodos es que no es necesario calcular $C$ explícitamente, sino que debes ser capaz de calcular productos matriz-vector.
Una cuestión que se plantea aquí es que, puesto que se desea calcular los vectores propios de la parte "inferior" del espectro (¿significa menor en magnitud si $C$ no es SPD?), puede que necesite utilizar un análogo de la iteración de potencia inversa, es decir, necesita poder calcular matvecs con la función inversa de $C$ o, lo que es lo mismo, resolver sistemas de la forma $Cx=f$ para vectores del lado derecho dados $f$ .
La matriz $C$ tiene la forma de complemento de Schur y, como ya se ha notado, $L^{-1}$ es densa como suele ocurrir al intentar invertir matrices dispersas, por lo que invertirla o intentar calcular $C$ explícitamente de alguna manera no es una buena opción. Si $C$ estaba bien acondicionado, puede resolver $Cx=f$ iterativamente, por ejemplo, mediante gradientes conjugados o GMRES. Estos métodos, de forma similar al método Arnoldi de ARPACK, sólo requieren productos con $C$ por lo que se podría, por ejemplo, factorizar $L$ y luego el producto con $C$ sólo implica multiplicaciones con $B$ , $B^T$ , $D$ y la solución de un sistema con $L$ : $$ \begin{align} g=Cu=(D-BL^{-1}B^T)u: && &v:=B^Tu,\\ && &\text{solve}\;Lw=v,\\ && &g:=Du+Bw. \end{align} $$ Un posible inconveniente es que si $C$ estuviera mal condicionado, la convergencia del GC podría ser lenta.
Si no tienes miedo de factorizar o resolver de cualquier otra forma sistemas indefinidos dispersos, también puedes considerar la siguiente alternativa sobre cómo obtener la solución de $Cx=f$ . Consideremos el sistema "aumentado $$\tag{$ * $} Mu:=\pmatrix{L&B^T\\B&-D}\pmatrix{y\\x}=\pmatrix{0\\-f}. $$ Puede comprobar que el $x$ -componente del vector solución $u$ resuelve $Cx=f$ . Este enfoque tiene una pequeña desventaja: dependiendo de las propiedades de sus matrices, $M$ puede ser indefinido, por lo que hay que tener cuidado al factorizarlo. No obstante, los factores de $M$ son más propensos a ser escasos.
Para más información sobre cómo resolver sistemas como ( $*$ ), véase, por ejemplo este documento . En él se puede encontrar un buen resumen de los métodos para resolver este tipo de problemas, incluidas muchas referencias (aunque el artículo se publicó hace ya algunos años).
1 votos
No soy un experto, pero probablemente no quieras invertir matrices grandes por razones numéricas.
0 votos
@YuvalFilmus : sí , por lo que he leído la inversión es del orden de n^3 por lo tanto computar la inversión para matrices muy grandes no es una buena idea. Pero no estoy seguro de cómo hacerlo de otra manera. cualquier ayuda será apreciada.
0 votos
En realidad quería decir numérico estabilidad no el tiempo de ejecución, que, como usted señala, también es un problema. Quizá pueda decirnos qué problema quiere resolver realmente. Además, haciendo caso omiso de las cuestiones numéricas y de otro tipo, puede invertir matrices en $O(n^{2.373})$ (aunque la constante oculta es muy, muy grande).
0 votos
@YuvalFilmus : Tengo que encontrar el fondo 'm' , donde m ~ 10 vectores propios de la matriz C . Estoy trabajando en la descomposición de bajo rango.
0 votos
Tal vez debería actualizar la pregunta en consecuencia. El planteamiento sería encontrar la inferior utilizando, digamos, el método de la potencia (aunque quizá otros métodos sean más apropiados para matrices gigantescas), y luego encontrar alguna forma de iterar. También háganos saber si $C$ resulta ser escasa.
0 votos
@YuvalFilmus : ok, actualizaré la pregunta. C no será escasa.