Dubbio su un codice MATLAB

fk16
Ragazzi ho il seguente codice MATLAB che ho trovato su internet sulla fattorizzazione di Cholesky, e non riesco a capire una cosa. Potete aiutarmi a capire?
function [R] = funzchol(A) % definiamo una nuova funzione 
[n,n] = size(A); 
R = zeros(n,n); 
for j = 1:n 
 if (A(j,j)-sum(R(1:j-1,j).^2)) < 0 % verifichiamo che la matrice A sia simmetrica è definita positiva 
 error ('La matrice A non è definita positiva') 
 else 
 for i = 1:j-1 
 R(i,j)= (A(i,j)- sum(R(1:i-1,i).*R(1:i-1,j)))/R(i,i); 
 end 
 R(j,j) = sqrt(A(j,j)- sum(R(1:j-1,j).^2)); 
 end 
end

Non capisco solo una cosa di questo codice: quando dice di verificare se la matrice A è definita positiva, che tipo di ragionamento fa? Il nostro professore ha spiegato il criterio di Silvester per verificare che una matrice è simmetrica definita positiva, ma questo non mi sembra essere utilizzato in questo codice.
Usa un altro criterio per caso?
Grazie dell'aiuto.

Risposte
fk16
Nessuno sa darmi una mano a capire?

walter891
la fonte dove l'hai preso è attendibile?
probabilmente vuole verificare che la matrice sia a dominanza diagonale stretta (condizione sufficiente per essere definita positiva) ma ci sono degli errori nel modo in cui è implementato.
la disuguaglianza da verificare è questa:
$|A_(ii)|>\sum_(j=1,j\ne i)^n|A_(ij)| \forall i$

fk16
Penso sia attendibile perchè alla fine fine fa un esempio con a funzione e secondo perchè è preso da appunti di un professore dell'università di Cagliari. Posto il link degli appunti da cui ho preso il codice, forse vi è d'aiuto: http://bugs.unica.it/~gppe/did/ca/tesin ... marper.pdf pagine 16-17-18-19.
Comunque anche io avevo pensato che vuole verificare la dominanza diagonale stretta, ma non c'entra nulla usare la matrice R.

fk16
Forse ho capito cosa sta facendo.
Se deve accadere che:
$R(i,i)=(A(i,i) - \sum_{k=\1}^{b=i-1}R(k,i)^2)^(1/2)$
Se tutto il radicando è $<0$ sicuramente quella radice non esiste e quindi sicuramente non è definita positiva. Posso quindi dire, che se accade che il radicando è $>0$ allora la matrice è definita positiva?
Per favore potete dirmi se in generale questo ragionamento è vero o no?

vict85
Secondo me questo codice è semplicemente sbagliato. Non usa la parte superiore della matrice e quindi non può certo dimostrare che sia simmetrica inoltre sta usando la colonna j della matrice R prima che venga introdotta nell'algoritmo (in quel momento è tutta 0, il codice che segue non lavora su R(1:j,j+1) ). Quindi di fatto testa solo che la diagonale sia composta da elementi non negativi. Non si accorgerebbe neanche che la matrice è nulla!

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