Comment puis-je estimer le nombre de conditions d'une grande matrice clairsemée en utilisant PETSc?

15

J'ai un PETSc Matet je voudrais estimer son numéro d'état.

Jed Brown
la source

Réponses:

11

Pour les petites matrices, le nombre de conditions peut être calculé de manière fiable en utilisant la décomposition en valeurs singulières. Faites un KSPSolve()avec la matrice et exécutez avec -pc_type svd -pc_svd_monitor.

Pour les matrices plus grandes, vous pouvez estimer le numéro de condition à l'aide d'une méthode de Krylov. Par exemple, l'itération Arnoldi effectuée par GMRES calcule de manière incrémentielle une décomposition de Hessenberg. Les valeurs singulières extrêmes et les valeurs propres de la matrice de Hessenberg sont de bonnes approximations de celles de la matrice d'origine. Pour que PETSc estime les valeurs propres de cette façon, exécutez avec

-ksp_monitor_singular_value -ksp_type gmres -ksp_gmres_restart 1000 -pc_type none

Ces options indiquent d'estimer les valeurs singulières extrêmes à chaque itération de Krylov. GMRES est utilisé pour calculer l'espace Krylov (vous pouvez également utiliser CG) avec un énorme redémarrage. Au redémarrage, GMRES supprime l'espace Krylov actuel, de sorte que toute la progression des estimations de valeurs singulières est perdue lors d'un redémarrage. La dernière option -pc_type nonedit d'effectuer cette itération sur la matrice non conditionnée. Par défaut, l'opérateur préconditionné ( ou A P - 1 ) serait utilisé, vous vous retrouveriez donc avec une estimation pour l'opérateur préconditionné.P-1UNEUNEP-1

KSPSolve()UNEUNE-1

Utilisez SLEPc si vous avez besoin d'estimations plus précises de la plus petite valeur singulière (et pour tous les autres problèmes de valeurs propres et de valeurs singulières).

Jed Brown
la source