Respostas:
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 none
diz 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.
KSPSolve()
Use SLEPc se precisar de estimativas mais precisas do menor valor singular (e para todos os outros problemas de autovalor e valor singular).