Un altro modo di considerare questo problema è quello di considerare gli strumenti da discreti problemi inversi, cioè problemi che implicano la risoluzione di o dove è molto mal condizionato (cioè il rapporto tra il primo e l'ultimo valore singolare è grande).Ax=bmin||Ax−b||2Aσ1/σn
Qui, abbiamo diversi metodi per scegliere il criterio di arresto, e per un metodo iterativo, consiglierei il criterio della curva a L poiché coinvolge solo quantità già disponibili (NOTA BENE: il mio consulente ha aperto la strada a questo metodo, quindi sono decisamente orientato verso esso). L'ho usato con successo in un metodo iterativo.
L'idea è di monitorare la norma residua e la norma di soluzione , dove è il 'th iterate. Mentre ripetete, questo inizia a disegnare la forma di una L in un diagramma loglog (rho, eta) e il punto all'angolo di quella L è la scelta ottimale.ρk=||Axk−b||2ηk=||xk||2xkk
Ciò ti consente di implementare un criterio in cui tieni d'occhio quando hai superato l'angolo (cioè guardando il gradiente di ), quindi scegli l'iterata che si trovava nell'angolo.(ρk,ηk)
Il modo in cui l'ho fatto ha comportato la memorizzazione degli ultimi 20 iterati e se il gradiente era più grande di qualche soglia per 20 iterazioni successive, sapevo di essere sulla parte verticale della curva e di aver superato l'angolo. Ho quindi preso la prima iterata nel mio array (ovvero le 20 iterazioni fa) come soluzione.abs(log(ηk)−log(ηk−1)log(ρk)−log(ρk−1))
Esistono anche metodi più dettagliati per trovare l'angolo, che funzionano meglio ma richiedono la memorizzazione di un numero significativo di iterate. Giocaci un po '. Se sei in MATLAB, puoi usare la casella degli strumenti Strumenti di regolarizzazione, che implementa alcuni di questi (in particolare la funzione "angolo" è applicabile).
Si noti che questo approccio è particolarmente adatto a problemi su larga scala, poiché il tempo di elaborazione aggiuntivo richiesto è minimo.