Risolvere un sistema scarso e altamente mal condizionato


9

Intendo risolvere Ax = b dove A è una matrice quadrata o rettangolare complessa, sparsa, asimmetrica e altamente mal condizionata (numero condizione ~ 1E + 20). Sono stato in grado di risolvere accuratamente il sistema con ZGELSS in LAPACK. Ma man mano che i gradi di libertà nel mio sistema crescono, ci vuole molto tempo per risolvere il sistema su un PC con ZGELSS poiché la scarsità non viene sfruttata. Di recente ho provato SuperLU (utilizzando l'archiviazione Harwell-Boeing) per lo stesso sistema ma i risultati non erano accurati per il numero di condizione> 1E + 12 (non sono sicuro che si tratti di un problema numerico con il pivot).

Sono più propenso all'utilizzo di solutori già sviluppati. Esiste un solido risolutore in grado di risolvere il sistema che ho citato rapidamente (ovvero sfruttando la scarsità) e in modo affidabile (alla luce dei numeri delle condizioni)?


1
Puoi precondizionarlo? In tal caso, i metodi del sottospazio di Krylov potrebbero essere efficaci. Anche se insisti su metodi diretti, il precondizionamento ti aiuterà a controllare gli errori numerici.
Geoff Oxberry,

1
Ho anche fatto una buona esperienza con il precondizionamento praticamente come è descritto qui: en.wikipedia.org/wiki/… Puoi fare il precondizionamento nell'aritmetica esatta. Le mie matrici tuttavia sono tutte dense, quindi non posso indicarti metodi / routine più specifici qui.
AlexE

11
Perché il numero della condizione è così grande? Forse la formulazione può essere migliorata per rendere il sistema meglio condizionato? In generale, non puoi aspettarti di essere in grado di valutare un residuo in modo più accurato di , il che rende Krylov di scarso valore una volta esauriti i bit. Se il numero della condizione è davvero , dovresti usare la precisione quad ( con GCC, supportato da alcuni pacchetti incluso PETSc). 10 20(machine precision)(condition number)1020__float128
Jed Brown,

2
Da dove stai ottenendo questa stima del numero di condizione? Se chiedi a Matlab di stimare il numero di condizione di una matrice con uno spazio nullo, potrebbe darti infinito o a volte potrebbe darti un numero davvero enorme (come quello che hai). Se il sistema che stai guardando ha uno spazio nullo e sai cos'è, puoi proiettarlo e ciò che ti rimane potrebbe avere un numero di condizione migliore. Quindi puoi usare PETSc o Trilinos o quello che hai.
Daniel Shapero,

3
Daniel - il metodo SVD troncato usato da ZGELSS determina lo spazio nullo (i vettori singolari associati a piccoli valori singolari nell'SVD sono una base per N (A)) e trova la soluzione dei minimi quadrati asopra . minAxbperp(N(A))
Brian Borchers,

Risposte:


13

Quando usi ZGELSS per risolvere questo problema, stai usando la scomposizione del valore singolare troncato per regolarizzare questo problema estremamente mal condizionato. è importante capire che questa routine di libreria non sta cercando di trovare una soluzione dei minimi quadrati per , ma piuttosto sta cercando di bilanciare la ricerca di una soluzione che minimizzicontro minimizzare. x A x - b Ax=bxAxb

Si noti che il parametro RCOND passato a ZGELSS può essere utilizzato per specificare quali valori singolari dovrebbero essere inclusi ed esclusi dal calcolo della soluzione. Qualsiasi valore singolare inferiore a RCOND * S (1) (S (1) è il valore singolare più grande) verrà ignorato. Non ci hai detto come hai impostato il parametro RCOND in ZGELSS e non abbiamo nulla sul livello di rumore dei coefficienti nella tua matrice o nella parte destra , quindi è difficile dire se hai usato una quantità adeguata di regolarizzazione. bAb

Sembra che tu sia soddisfatto delle soluzioni regolarizzate che stai ottenendo con ZGELSS, quindi sembra che la regolarizzazione effettuata dal metodo SVD troncato (che trova una soluzione minima tra le soluzioni dei minimi quadrati che minimizzano nello spazio di soluzioni attraversate dai singoli vettori associati ai valori singolari maggiori di RCOND * S (1)) è soddisfacente per te. A x - b xAxb

La tua domanda potrebbe essere riformulata come "Come posso ottenere in modo efficiente soluzioni ai minimi quadrati regolarizzati a questo problema dei minimi quadrati lineari grandi, sparsi e molto mal condizionati?"

La mia raccomandazione sarebbe di usare un metodo iterativo (come CGLS o LSQR) per minimizzare il problema dei minimi quadrati esplicitamente regolarizzati

minAxb2+α2x2

dove il parametro di regolarizzazione è regolato in modo che il problema dei minimi quadrati smorzati sia ben condizionato e che tu sia soddisfatto delle soluzioni regolarizzate risultanti. α


Mi scuso per non averlo menzionato all'inizio. Il problema da risolvere è l'equazione dell'acustica di Helmholtz che utilizza FEM. Il sistema è scarsamente condizionato a causa della base dell'onda piana utilizzata per approssimare la soluzione.
user1234

Da dove provengono i coefficienti in e ? Sono dati misurati? valori "esatti" dalla progettazione di alcuni oggetti (che in pratica non possono essere elaborati con tolleranze di 15 cifre ...)? bAb
Brian Borchers,

1
Le matrici A e b sono formate usando la formulazione debole di Helmholtz PDE, vedi: asadl.org/jasa/resource/1/jasman/v119/i3/…
user1234

9

Jed Brown lo ha già sottolineato nei commenti alla domanda, ma non c'è davvero molto che puoi fare nella solita doppia precisione se il tuo numero di condizione è grande: nella maggior parte dei casi, probabilmente non otterrai una singola cifra di precisione in la tua soluzione e, peggio, non puoi nemmeno dirlo perché non puoi valutare accuratamente il residuo corrispondente al tuo vettore di soluzione. In altre parole: non è una questione di quale risolutore lineare dovresti scegliere - nessun risolutore lineare può fare qualcosa di utile per tali matrici.

Questo tipo di situazioni si verificano in genere perché si sceglie una base non adatta. Ad esempio, si ottengono matrici così mal condizionate se si scelgono le funzioni come base di un metodo Galerkin. (Questo porta alla matrice di Hilbert, che è notoriamente mal condizionata.) La soluzione in questi casi non è quella di chiedere quale solutore può risolvere il sistema lineare, ma chiedere se ci sono basi migliori che possono essere utilizzate. Ti incoraggio a fare lo stesso: pensa a riformulare il tuo problema in modo da non finire con questo tipo di matrici.1,x,x2,x3,...


Quando discretizziamo un problema mal posto per un PDE, ad esempio un'equazione di calore all'indietro, sicuramente finiremo con un'equazione di matrice mal condizionata. Questo non è il caso che possiamo risolvere riformulando l'equazione o scegliendo un risolutore di matrici efficiente o migliorando la precisione nel numero in virgola mobile. In questo caso [cioè problemi acustici inversi], è richiesto un metodo di regolarizzazione.
tqviet,

7

Il modo più semplice / veloce per risolvere i problemi mal condizionati è aumentare la precisione dei calcoli (con la forza bruta). Un altro modo (ma non sempre possibile) è di riformulare il tuo problema.

Potrebbe essere necessario utilizzare la precisione quadrupla (34 cifre decimali). Anche se in un corso verranno perse 20 cifre (a causa del numero della condizione), si otterranno comunque 14 cifre corrette.

Se è di qualche interesse, ora i solutori sparsi quad-precisione sono disponibili anche in MATLAB.

(Sono l'autore della cassetta degli attrezzi menzionata).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.