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..20N=10..20 ). Necesito resolver el sistema Ax=bAx=b , donde AA 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 AA tiene (hasta ahora) las siguientes propiedades.
- A+ATA+AT es diagonal
- A11≈∑i∑jAijA11≈∑i∑jAij
- A11≈12∑i∑j|Aij|A11≈12∑i∑j|Aij|
Es decir, que AA 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 AA )
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 xx y también AA y bb 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+EA=M+E , donde EE sólo contribuye a A11A11 y MM se mantiene igual a lo largo de múltiples iteraciones?
Gracias.