1 votos

Aceleración de la resolución lineal en MATLAB para un tipo específico de matrices

Dentro de un solucionador de DG (hasta ahora 1D) necesito resolver un sistema lineal de ecuaciones varias veces. El orden del sistema es bastante pequeño ( $N=10..20$ ). Necesito resolver el sistema $Ax=b$ , donde $A$ es la acumulación de la matriz de rigidez y la matriz de masa y otros términos más un componente del flujo de entrada. Por tanto, mi matriz $A$ tiene (hasta ahora) las siguientes propiedades.

  • $A+A^T$ es diagonal
  • $A_{11}\approx \sum_i \sum_j A_{ij}$
  • $A_{11}\approx \frac12 \sum_i \sum_j |A_{ij}|$

Es decir, que $A$ tiene una entrada diagonal que es significativamente mayor que todos los demás valores. Mi lado derecho no tiene propiedades notables, todas las entradas son aproximadamente del mismo orden (o al menos no hay propiedades similares a las de $A$ )

Hasta ahora, simplemente resuelvo la ecuación con

x=A\b

que tiene que hacerse con bastante frecuencia. Muy a menudo, tengo una estimación aproximada de $x$ y también $A$ y $b$ suelen ser similares de una iteración a otra.

Así que esta es mi pregunta: ¿Hay algún método que pueda considerar para acelerar el cálculo? ¿Crees que para sistemas tan pequeños, hay alguna posibilidad de ganar algo, en comparación con la solución estándar de MATLAB? ¿Puedo hacer uso del hecho, que sé que $A = M + E$ , donde $E$ sólo contribuye a $A_{11}$ y $M$ se mantiene igual a lo largo de múltiples iteraciones?

Gracias.

1voto

je44ery Puntos 395

Normalmente, es muy poco probable que pueda hacer algo significativamente mejor que el operador de barra invertida, a menos que abandone MATLAB.

Aquí debe tratar de capitalizar el hecho de que su matriz $A$ es constante excepto para una perturbación de rango uno. El resultado que necesitas es la fórmula de Sherman-Morrison. La entrada de wikipedia para esta fórmula es buena. Si puedes calcular un $LU$ factorización de $M$ entonces esta fórmula le permitirá reutilizarla y resolver sistemas lineales de la forma $Ax = b$ , donde $A = M + E$ y $E = uv^T$ es una matriz de rango uno.

No puedo prometerle que vaya a ver una mejora. Simplemente hay demasiadas incógnitas. Si la velocidad es realmente un problema, entonces le recomiendo que considere dejar MATLAB.

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