Bagaimana saya bisa memperkirakan jumlah kondisi matriks jarang besar menggunakan PETSc?

15

Saya memiliki PETSc Matdan ingin memperkirakan jumlah kondisinya.

Jed Brown
sumber

Jawaban:

11

Untuk matriks kecil, angka kondisi dapat dihitung secara andal menggunakan dekomposisi nilai singular. Lakukan KSPSolve()dengan matriks dan jalankan dengan -pc_type svd -pc_svd_monitor.

Untuk matriks yang lebih besar, Anda dapat memperkirakan nomor kondisi menggunakan metode Krylov. Misalnya, iterasi Arnoldi yang dilakukan oleh GMRES secara bertahap menghitung dekomposisi Hessenberg. Nilai singular ekstrem dan nilai eigen dari matriks Hessenberg adalah perkiraan yang baik untuk matriks asli. Untuk meminta PETSc memperkirakan nilai eigen dengan cara ini, jalankan dengan

-ksp_monitor_singular_value -ksp_type gmres -ksp_gmres_restart 1000 -pc_type none

Opsi-opsi ini mengatakan untuk memperkirakan nilai singular ekstrem pada setiap iterasi Krylov. GMRES digunakan untuk menghitung ruang Krylov (Anda juga bisa menggunakan CG) dengan restart besar. Saat restart, GMRES membuang ruang Krylov saat ini, sehingga semua kemajuan pada estimasi nilai singular hilang dalam restart. Opsi terakhir -pc_type nonemengatakan untuk melakukan iterasi ini pada matriks tanpa syarat. Secara default, operator yang dikondisikan sebelumnya ( atau A P - 1 ) akan digunakan, sehingga Anda akan mendapatkan estimasi untuk operator yang sudah dikondisikan sebelumnya.P-1SEBUAHSEBUAHP-1

KSPSolve()SEBUAHSEBUAH-1

Gunakan SLEPc jika Anda membutuhkan estimasi lebih akurat dari nilai singular terkecil (dan untuk semua masalah nilai eigen dan nilai singular lainnya).

Jed Brown
sumber