Une autre façon de voir ce problème est de considérer les outils à partir de problèmes inverses discrets, c'est-à-dire des problèmes qui impliquent la résolution de ou min | | A x - b | | 2 où A est très mal conditionné (ie le rapport entre la première et la dernière valeur singulière σ 1 / σ n est grand).Ax=bmin||Ax−b||2Aσ1/σn
Ici, nous avons plusieurs méthodes pour choisir le critère d'arrêt, et pour une méthode itérative, je recommanderais le critère de la courbe en L car il n'implique que des quantités qui sont déjà disponibles il). J'ai utilisé cela avec succès dans une méthode itérative.
L'idée est de surveiller la norme résiduelle et la norme de solution η k = | | x k | | 2 , où x k est le k -ième itération. Au fur et à mesure que vous itérez, cela commence à dessiner la forme d'un L dans un graphique loglog (rho, eta), et le point au coin de ce L est le choix optimal.ρk=||Axk−b||2ηk=||xk||2xkk
Cela vous permet d'implémenter un critère où vous gardez un œil lorsque vous avez franchi le coin (c'est-à-dire en regardant le gradient de ), puis choisissez l'itération qui était située au coin.(ρk,ηk)
La façon dont je l'ai fait impliquait de stocker les 20 derniers itérations, et si le gradient était supérieur à un certain seuil pour 20 itérations successives, je savais que j'étais sur la partie verticale de la courbe et que j'avais dépassé le coin. J'ai ensuite pris la première itération de mon tableau (c'est-à-dire celle d'il y a 20 itérations) comme solution.abs(log(ηk)−log(ηk−1)log(ρk)−log(ρk−1))
Il existe également des méthodes plus détaillées pour trouver le coin, et elles fonctionnent mieux mais nécessitent de stocker un nombre important d'itérations. Jouez un peu avec. Si vous êtes dans matlab, vous pouvez utiliser la boîte à outils Outils de régularisation, qui implémente une partie de cela (en particulier la fonction "coin" est applicable).
Notez que cette approche est particulièrement adaptée aux problèmes à grande échelle, car le temps de calcul supplémentaire impliqué est minuscule.