Ich habe einen PETSc Mat
und möchte seine Kondition schätzen.
quelle
Für kleine Matrizen kann die Konditionszahl zuverlässig mit der Einzelwertzerlegung berechnet werden. Führen Sie eine KSPSolve()
mit der Matrix und laufen mit -pc_type svd -pc_svd_monitor
.
Für größere Matrizen können Sie die Bedingungsnummer mit einer Krylov-Methode schätzen. Beispielsweise berechnet die von GMRES durchgeführte Arnoldi-Iteration inkrementell eine Hessenberg-Zerlegung. Die extremen Singularwerte und Eigenwerte der Hessenberg-Matrix sind gute Annäherungen an die der ursprünglichen Matrix. Haben PETSc Schätzung Eigenwerte auf diese Weise, laufen mit
-ksp_monitor_singular_value -ksp_type gmres -ksp_gmres_restart 1000 -pc_type none
Diese Optionen geben an, dass die extremalen Singularwerte für jede Krylov-Iteration geschätzt werden sollen. GMRES wird verwendet, um den Krylov-Raum (Sie könnten auch CG verwenden) mit einem großen Neustart zu berechnen. Bei einem Neustart verwirft GMRES den aktuellen Raum Krylov, so dass alle die Fortschritte auf Einzelwertschätzungen in einem Neustart verloren. Die letzte Option -pc_type none
besagt, dass diese Iteration für die nicht vorbereitete Matrix ausgeführt werden soll. Standardmäßig ist der vorkonditionierten Operator ( oder A P - 1 ) würde verwendet werden, so dass Sie mit einer Schätzung für den vorkonditionierten Operator enden würden.
KSPSolve()
Verwenden Sie SLEPc, wenn Sie genauere Schätzungen des kleinsten Singularwerts benötigen (und für alle anderen Eigenwert- und Singularwertprobleme).