Como posso estimar o número de condição de uma matriz esparsa grande usando o PETSc?

15

Eu tenho um PETSc Mate gostaria de estimar seu número de condição.

Jed Brown
fonte

Respostas:

11

Para matrizes pequenas, o número da condição pode ser calculado com segurança usando a decomposição do valor singular. Faça um KSPSolve()com a matriz e corra com -pc_type svd -pc_svd_monitor.

Para matrizes maiores, é possível estimar o número da condição usando um método de Krylov. Por exemplo, a iteração de Arnoldi realizada pelo GMRES calcula incrementalmente uma decomposição de Hessenberg. Os valores singulares extremais e os autovalores da matriz de Hessenberg são boas aproximações aos da matriz original. Para que o PETSc calcule autovalores dessa maneira, execute com

-ksp_monitor_singular_value -ksp_type gmres -ksp_gmres_restart 1000 -pc_type none

Essas opções dizem para estimar os valores singulares extremos em cada iteração de Krylov. O GMRES é usado para calcular o espaço Krylov (você também pode usar o CG) com um grande reinício. Ao reiniciar, o GMRES descarta o espaço atual de Krylov, para que todo o progresso nas estimativas de valor singular seja perdido em uma reinicialização. A opção final -pc_type nonediz para executar essa iteração na matriz não condicionada. Por padrão, o operador pré-condicionado ( ou A P - 1 ) seria usado, portanto, você terminaria com uma estimativa para o operador pré-condicionado.P-1 1UMAUMAP-1 1

KSPSolve()UMAUMA-1 1

Use SLEPc se precisar de estimativas mais precisas do menor valor singular (e para todos os outros problemas de autovalor e valor singular).

Jed Brown
fonte