Forzare una matrice ad essere definita positiva

Silente
Buongiorno,
mi trovo ad avere a che fare con delle manipolazioni di matrici (definite positive), il cui risultato sulla carta è ancora una matrice definita positiva. Tuttavia, per problemi di natura numerica, implementando il calcolo in Matlab mi succede spesso che la matrice risultato ha un autovalore negativo (molto prossimo allo zero).
Ho trovato in rete questa funzione che risolve il problema: https://it.mathworks.com/matlabcentral/ ... nearestspd

ma il calcolo rallenta abbastanza la macchina su cui gira.

Che voi sappiate, esiste un metodo (anche un pò più grezzo di quello linkato) che potrei attuare alla matrice finale per far sì che essa torni di nuovo ad essere definita positiva? Nella sostanza lo è già, ma approssimazioni numeriche le impediscono di esserlo.

Grazie in anticipo per qualunque dritta.

Risposte
feddy
Non ero a conoscenza di questo problema, ma vedo che l'algoritmo implementato e' basato su un lavoro di N. Higham, quindi probabilmente dovunque cercherai troverai una referenza a questo, come qui.


Che ordine di grandezza hai per le dimensioni della tua matrice? Ho dato una rapida occhiata, alla fine usa Cholesky per testare se effettivamente e' PD, magari puoi rimuovere quelle righe se non l'hai gia' fatto.

Silente
Grazie della risposta.
Ho rimosso la Cholesky ma purtroppo cambia poco.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.