Ax=bmin||Ax−b||2 onde está muito mal condicionado (ou seja, a razão entre o primeiro e o último valor singular σ 1 / σ n é grande).Aσ1/σn
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||2xkk
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.