Eu tenho um problema generalizado de matriz: de um método espectral em um problema de análise de estabilidade linear. Minha matriz B é diagonal e positiva semi-definida. A é não-eremita e complexo.
Meu problema é essencialmente que, ao usar o solucionador de autovalor generalizado do SLEPc, recebo o erro "pivô zero na fatoração da LU". O restante abaixo é detalhes sobre o problema e as coisas que tentei até agora. Obrigado pela ajuda!
Detalhes do problema
A matriz terá o maior valor entre 48000 e 48000, e eu quero encontrar os autovalores. Os autovalores nos quais estou interessado são aqueles com a maior parte real próxima de 0 + 0i. Idealmente, quero ser capaz de encontrá-los, mesmo que sejam internos (ou seja, quando houver outros autovalores com maior parte real positiva no espectro). No entanto, eu ficaria feliz se conseguisse trabalhar com problemas em que todos os autovalores tenham partes reais <0 além do autovalor de interesse.
No momento, usei as funções scipy linalg.eig e sparse.eigs. Tanto quanto eu sei, eles usam LAPACK e ARPACK, respectivamente, para fazer o trabalho pesado. Decidi ver se posso obter melhor desempenho usando a biblioteca SLEPc. Se for uma má decisão, me avise!
Eu quero passar a usar o PETSc com os solucionadores de autovalores do SLEPc. Eu tenho experimentado o SLEPc usando os exemplos fornecidos como parte do tutorial. O Exercício 7 ( http://www.grycap.upv.es/slepc/handson/handson3.html ) lê matrizes A e B de um arquivo e gera as soluções. Eu fiz isso funcionar bem usando as matrizes fornecidas. No entanto, se eu substituir uma versão de teste de tamanho menor do meu problema (6000x6000), obtenho vários erros, dependendo dos argumentos da linha de comando que forneço.
O principal problema que tenho é o erro: "zero pivô na fatoração da LU!" quando eu uso as configurações padrão.
Eu acho que isso pode estar relacionado ao fato de B conter linhas de zeros, embora meu entendimento da álgebra linear seja um pouco básico. Isso é verdade?
Eu tentei definir as opções sugeridas no site petsc, -pc_factor_shift_type NONZERO etc, mas tudo o que recebo é um aviso adicional de que essas opções não foram usadas
Eu assumi que isso era um problema com o pré-condicionador, então tentei definir -eps_target como 0.1 e com e sem especificar -st_type sinvert e shift. Ainda recebo o mesmo erro.
Então tentei -st_pc_type jacobi e st_pc_type bjacobi. O jacobi é executado, mas não produz nenhum valor próprio. O bloco jacobi faz uma fatoração de LU e me dá o mesmo erro novamente.
O método padrão é krylov-schur, então experimentei as opções -eps_type gd e -eps_type jd. Infelizmente, eles parecem produzir autovalores sem sentido, que não aparecem no espectro quando resolvo o uso do LAPACK no scipy.
Eu sei que meu problema de matriz não é singular, porque eu posso resolvê-lo usando scipy.
Você conhece algum livro / guia que talvez precise ler além dos manuais do PETSC e do SLEPC para entender o comportamento de todos esses diferentes solucionadores?
A saída do caso sem opções de linha de comando é fornecida abaixo.
Muito obrigado por ler o meu primeiro post!
Atenciosamente, Toby
Saída terminal do SLEPc
tobymac: SLEPC toby $ mpiexec ./ex7 -f1 LHS-N7-M40-Re0.0-b0.1-Wi5.0-amp0.02.petsc -f2 RHS-N7-M40-Re0.0-b0.1- Wi5.0-amp0.02.petsc -eps_view
Problema próprio generalizado armazenado em arquivo.
[0] ERRO PETSC: --------------------- Mensagem de erro --------------------- --------------- [0] ERRO PETSC: Pivô zero detectado na fatoração de LU: consulte http://www.mcs.anl.gov/petsc/documentation/faq.html#ZeroPivot! [0] ERRO PETSC: linha vazia na matriz: linha na ordem original 2395 na ordem permutada 3600! [0] ERRO PETSC: -------------------------------------------- ---------------------------- [0] ERRO PETSC: Petsc Release Versão 3.3.0, Patch 5, sáb 1 dez. 15:10 : 41 CST 2012 [0] ERRO PETSC: consulte docs / changes / index.html para atualizações recentes. [0] ERRO PETSC: consulte docs / faq.html para obter dicas sobre solução de problemas. [0] ERRO PETSC: consulte docs / index.html para páginas de manual. [0] ERRO PETSC: -------------------------------------------- ---------------------------- [0] ERRO PETSC: ./ex7 em um arco-darw chamado tobymac por toby Qui 25 jul 10 : 20: 40 2013 [0] ERRO PETSC: Bibliotecas vinculadas a partir de / opt / local / lib [0] ERRO PETSC: Configure a execução em terça-feira 23 de julho 15:11:27 2013 [0] ERRO PETSC:
[0] ERRO PETSC: PCSetUp () linha 832 em /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/interface/precon.c [0] PETSC ERRO: linha 278 KSPSetUp () em /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/ksp/interface/itfunc.c [0] ERRO PETSCUp: ) linha 176 na linha /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/impls/redundant/redundant.c [0] linha PETSC ERRO: PCSetUp () 832 em /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/interface/precon.c [0] ERRO PETSC: KSPSetUp () linha 278 in / opt /local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/ksp/interface/itfunc.c [0] ERRO PETSC: linha STSetUp_Shift () 94 em src / st / impls / shift / shift.c [0] ERRO PETSC: linha STSetUp () 280 em src / st / interface / stsolve.c [0] ERRO PETSC : Linha 204 EPSSetUp () em src / eps / interface / setup.c [0] ERRO PETSC: linha 109 EPSSolve () em src / eps / interface / resolve.c tobymac: SLEPC toby $
fonte
Respostas:
Nos problemas desta forma, você normalmente precisa que não seja singular, isto é, que seja invertível. Você não diz de onde vem, então eu não sei nada sobre o seu mas você precisa garantir que ele não seja singular.B A,B B
fonte