Considere com quase singular, o que significa que há um autovalor de que é muito pequeno. O critério de parada usual de um método iterativo é baseado no residual e diz respeito às iterações podem parar quando com n o número da iteração. Mas no caso que estamos considerando, pode haver um grande erro v vivendo no espaço próprio associado ao pequeno autovalor \ lambda_0, que fornece um pequeno valor residual Av = \ lambda_0v . Suponha que o r_0 residual inicial seja grande, então pode acontecer que paremos em mas o erro ainda é grande. Qual é o melhor indicador de erro neste caso? É um bom candidato?
linear-algebra
Hui Zhang
fonte
fonte
Respostas:
Por favor, nunca use a diferença entre iterações sucessivas para definir um critério de parada. Isso diagnostica estagnação por convergência. A maioria das iterações não simétricas da matriz não é monótona e mesmo o GMRES na aritmética exata sem reinicializações pode estagnar por um número arbitrário de iterações (até a dimensão da matriz) antes de convergir repentinamente. Veja exemplos em Nachtigal, Reddy e Trefethen (1993) .
Uma maneira melhor de definir convergência
Geralmente, estamos interessados na precisão da nossa solução mais do que no tamanho do resíduo. Especificamente, gostaríamos de garantir que a diferença entre uma solução aproximada e a solução exata satisfaça para alguns especificados pelo usuário . Acontece que é possível conseguir isso encontrando um tal que que é o menor valor singular de , devido a x | x n - x | < c c x n | A x n - b | < C £ £ Axn x
onde usamos que é o maior valor singular de (segunda linha) e que resolve exatamente (terceira linha).A -1/ϵ xAx=bA−1 x Ax=b
Estimando o menor valor singularϵ
Uma estimativa precisa do menor valor singular geralmente não está disponível diretamente no problema, mas pode ser estimada como um subproduto de um gradiente conjugado ou iteração GMRES. Observe que, embora as estimativas dos maiores valores próprios e valores singulares sejam geralmente muito boas depois de apenas algumas iterações, uma estimativa precisa do menor valor próprio / próprio / singular geralmente é obtida apenas quando a convergência é alcançada. Antes da convergência, a estimativa geralmente será significativamente maior que o valor real. Isso sugere que você deve realmente resolver as equações antes de definir a tolerância correta . Uma tolerância de convergência automática que requer uma precisão fornecida pelo usuárioc ϵϵ cϵ ϵ ϵc para a solução e estimativas, o menor valor singular com o estado atual do método de Krylov pode convergir muito cedo, porque a estimativa de era muito maior que o valor real.ϵ ϵ
Notas
-ksp_monitor_singular_value
com qualquer programa PETSc. Consulte KSPComputeExtremeSingularValues () para calcular valores singulares do código.-ksp_gmres_restart 1000
no PETSc).fonte
Aqui, temos vários métodos para escolher o critério de parada e, para um método iterativo, eu recomendaria o critério da curva L, uma vez que envolve apenas quantidades que já estão disponíveis (AVISO LEGAL: Meu orientador foi pioneiro neste método, por isso estou definitivamente inclinado a isto). Eu usei isso com sucesso em um método iterativo.
A idéia é monitorar a norma residual e a norma de solução η k = | | x k | | 2 , onde x k é o k 'é iterado. À medida que você itera, isso começa a desenhar a forma de um L em um gráfico de loglog (rho, eta), e o ponto no canto desse L é a escolha ideal.ρk=||Axk−b||2 ηk=||xk||2 xk k
Isso permite que você implemente um critério no qual você fica de olho quando passa pela esquina (ou seja, observa o gradiente de ) e, em seguida, escolhe a iteração que estava localizada na esquina.(ρk,ηk)
A maneira como eu fiz isso envolveu o armazenamento das últimas 20 iterações, e se o gradiente foi maior que um limite para 20 iterações sucessivas, eu sabia que estava na parte vertical da curva e que havia passado a esquina. Então, tomei a primeira iteração da minha matriz (ou seja, a de 20 iterações atrás) como minha solução.abs(log(ηk)−log(ηk−1)log(ρk)−log(ρk−1))
Também existem métodos mais detalhados para encontrar a esquina, e eles funcionam melhor, mas exigem o armazenamento de um número significativo de iterações. Brinque um pouco com isso. Se você estiver no matlab, poderá usar a caixa de ferramentas Regularization Tools, que implementa parte disso (especificamente a função "corner" é aplicável).
Observe que essa abordagem é particularmente adequada para problemas de grande escala, pois o tempo de computação extra envolvido é minúsculo.
fonte