Resolviendo un sistema escaso y altamente mal acondicionado

9

Tengo la intención de resolver Ax = b donde A es matriz cuadrada o rectangular compleja, escasa, asimétrica y altamente mal acondicionada (número de condición ~ 1E + 20). He podido resolver el sistema con ZGELSS en LAPACK con precisión. Pero a medida que crecen los grados de libertad en mi sistema, lleva mucho tiempo resolver el sistema en una PC con ZGELSS ya que no se explota la escasez. Recientemente probé SuperLU (usando el almacenamiento Harwell-Boeing) para el mismo sistema, pero los resultados fueron inexactos para el número de condición> 1E + 12 (no estoy seguro de si este es un problema numérico con el pivote).

Estoy más inclinado a usar solucionadores ya desarrollados. ¿Existe un solucionador robusto que pueda resolver el sistema que mencioné rápidamente (es decir, explotar la escasez) y de manera confiable (en vista de los números de condición)?

usuario1234
fuente
1
¿Puedes preacondicionarlo? Si es así, los métodos del subespacio de Krylov podrían ser efectivos. Incluso si insiste en métodos directos, el preacondicionamiento ayudará a controlar los errores numéricos.
Geoff Oxberry
1
También hice una buena experiencia con el preacondicionamiento de la forma en que se describe aquí: en.wikipedia.org/wiki/… Puede hacer el preacondicionamiento en aritmética exacta. Sin embargo, mis matrices son todas densas, por lo que no puedo señalarle métodos / rutinas más específicos aquí.
AlexE
11
¿Por qué el número de condición es tan grande? ¿Quizás la formulación se puede mejorar para que el sistema esté mejor acondicionado? En general, no puede esperar poder evaluar un residuo con mayor precisión que , lo que hace que Krylov tenga poco valor una vez que se haya quedado sin bits. Si el número de condición es realmente 10 20 , debe usar precisión cuádruple ( con GCC, compatible con algunos paquetes que incluyen PETSc). (precisión de la máquina)(número de condición)1020__float128
Jed Brown
2
¿De dónde obtiene esta estimación del número de condición? Si le pide a Matlab que calcule el número de condición de una matriz con un espacio nulo, puede darle infinito o, a veces, simplemente puede darle un número realmente enorme (como el que tiene). Si el sistema que está viendo tiene un espacio nulo y sabe lo que es, puede proyectarlo y lo que le quede podría tener un mejor número de condición. Entonces puedes usar PETSc o Trilinos o lo que tengas.
Daniel Shapero
3
minUNAX-sipagsmirpags(norte(UNA))

Respuestas:

13

Cuando usa ZGELSS para resolver este problema, está usando la descomposición de valores singulares truncados para regularizar este problema extremadamente mal condicionado. Es importante comprender que esta rutina de biblioteca no intenta encontrar una solución de mínimos cuadrados para , sino que intenta equilibrar la búsqueda de una solución que minimicecontra minimizar. UNAX=siXUNAX-si

Tenga en cuenta que el parámetro RCOND pasado a ZGELSS puede usarse para especificar qué valores singulares deben incluirse y excluirse del cálculo de la solución. Cualquier valor singular menor que RCOND * S (1) (S (1) es el valor singular más grande) será ignorado. No nos ha dicho cómo ha configurado el parámetro RCOND en ZGELSS, y no sabemos nada sobre el nivel de ruido de los coeficientes en su matriz o en el lado derecho , por lo que es difícil decir si ha utilizado Una cantidad adecuada de regularización. UNAsi

Parece estar contento con las soluciones regularizadas que está obteniendo con ZGELSS, por lo que parece que la regularización efectuada por el método SVD truncado (que encuentra una solución mínima entre las soluciones de mínimos cuadrados que minimizan sobre el espacio de soluciones abarcado por los vectores singulares asociados con los valores singulares mayores que RCOND * S (1)) es satisfactorio para usted. XUNAX-si

Su pregunta podría reformularse como "¿Cómo puedo obtener eficientemente soluciones de mínimos cuadrados regularizadas para este gran problema de mínimos cuadrados lineales muy dispersos y muy mal condicionados?"

Mi recomendación sería utilizar un método iterativo (como CGLS o LSQR) para minimizar el problema de mínimos cuadrados explícitamente regularizado

minUNAX-si2+α2X2

donde el parámetro de regularización se ajusta para que el problema de mínimos cuadrados amortiguados esté bien condicionado y para que esté satisfecho con las soluciones regularizadas resultantes. α

Brian Borchers
fuente
Mis disculpas por no mencionar esto desde el principio. El problema que se resuelve es la ecuación de acústica de Helmholtz con FEM. El sistema está mal acondicionado debido a la base de onda plana utilizada para aproximar la solución.
usuario1234
¿De dónde proceden los coeficientes en y vienen? ¿Son datos medidos? valores "exactos" del diseño de algún objeto (que en la práctica no se pueden mecanizar con tolerancias de 15 dígitos ...)? UNAsi
Brian Borchers
1
Las matrices A yb se forman utilizando la formulación débil de Helmholtz PDE, ver: asadl.org/jasa/resource/1/jasman/v119/i3/…
user1234
9

Jed Brown ya ha señalado esto en los comentarios a la pregunta, pero en realidad no hay mucho que pueda hacer con la doble precisión habitual si su número de condición es grande: en la mayoría de los casos, es probable que no obtenga un solo dígito de precisión en su solución y, lo que es peor, ni siquiera puede saberlo porque no puede evaluar con precisión el residuo correspondiente a su vector de solución. En otras palabras: no se trata de qué solucionador lineal debe elegir, ningún solucionador lineal puede hacer algo útil para tales matrices.

1,X,X2,X3,...

Wolfgang Bangerth
fuente
Al discretizar un problema mal planteado para una PDE, por ejemplo, ecuación de calor hacia atrás, definitivamente terminaremos con una ecuación matricial mal condicionada. Este no es el caso que podemos resolver reformulando la ecuación o eligiendo un solucionador de matriz eficiente o mejorando la precisión en el número de coma flotante. En este caso [es decir, problemas inversos acústicos], se requiere un método de regularización.
tqviet
7

La forma más simple / rápida de resolver problemas mal condicionados es aumentar la precisión de los cálculos (por fuerza bruta). Otra forma (aunque no siempre posible) es reformular su problema.

Es posible que deba usar precisión cuádruple (34 dígitos decimales). Aunque se perderán 20 dígitos en un curso (debido al número de condición), obtendrá 14 dígitos correctos.

Si le interesa, ahora los solucionadores dispersos de precisión cuádruple también están disponibles en MATLAB.

(Soy el autor de la caja de herramientas mencionada).

Pavel Holoborodko
fuente