Come posso stimare il numero di condizione di una matrice sparsa grande usando PETSc?


Risposte:


11

Per matrici piccole, il numero di condizione può essere calcolato in modo affidabile utilizzando la decomposizione del valore singolare. Fai un KSPSolve()con la matrice e corri con -pc_type svd -pc_svd_monitor.

Per matrici più grandi, è possibile stimare il numero della condizione utilizzando un metodo Krylov. Ad esempio, l'iterazione di Arnoldi eseguita da GMRES calcola in modo incrementale una decomposizione di Hessenberg. I valori singolari e gli autovalori estremi della matrice di Hessenberg sono buone approssimazioni a quelli della matrice originale. Per avere gli autovalori di stima PETSc in questo modo, eseguire con

-ksp_monitor_singular_value -ksp_type gmres -ksp_gmres_restart 1000 -pc_type none

Queste opzioni dicono di stimare i valori singolari estremi su ogni iterazione di Krylov. GMRES è usato per calcolare lo spazio di Krylov (potresti anche usare CG) con un grande riavvio. Al riavvio, GMRES scarta l'attuale spazio di Krylov, quindi tutti i progressi nelle stime di valori singolari vengono persi in un riavvio. L'ultima opzione -pc_type nonedice di eseguire questa iterazione sulla matrice non condizionata. Per impostazione predefinita, verrebbe utilizzato l'operatore precondizionato ( o ), quindi si otterrebbe una stima per l'operatore precondizionato.P−1AAP−1

Questo sarà generalmente accurato per i valori singolari più grandi, ma può sopravvalutare il valore singolare più piccolo a meno che il metodo non sia convergente. Se si dispone di un solutore per la matrice (ad es. Utilizzando KSPSolve()), è possibile stimare il valore singolare più piccolo di utilizzando la stessa procedura applicata ad .AA−1

Utilizzare SLEPc se sono necessarie stime più accurate del valore singolare più piccolo (e per tutti gli altri problemi di autovalore e valore singolare).

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.