Implémentation de la methode de Cholesky en MATLAB

Fermé
serhanus Messages postés 3 Date d'inscription jeudi 16 mai 2013 Statut Membre Dernière intervention 17 mai 2013 - 16 mai 2013 à 23:19
serhanus Messages postés 3 Date d'inscription jeudi 16 mai 2013 Statut Membre Dernière intervention 17 mai 2013 - 16 mai 2013 à 23:48
Salut à tous,

Tout d'abord je rappel que la méthode de Cholesky consiste à résoudre un système linéaire classique Ax=b, On décomposant la matrice A en A=B*Bt (avec B une matrice triangulaire inférieur, et Bt sa transposée).

Il existe une fonction dans MATLAB qui s'appelle "chol" qui retourne Bt, j'ai écrit un script qui résous le système on utilisant cette fonction.

Mais le problème et que je suis demandé d'implémenter une fonction qui fait ce que "chol" fait !

1 réponse

rlo73 Messages postés 2956 Date d'inscription jeudi 12 avril 2012 Statut Membre Dernière intervention 25 février 2023 635
16 mai 2013 à 23:42
ça s'appelle un exercice non ? on ne va pas écrire l'algorithme à ta place, enfin il me semble que ce n'est pas la politique de CCM !
3
serhanus Messages postés 3 Date d'inscription jeudi 16 mai 2013 Statut Membre Dernière intervention 17 mai 2013
16 mai 2013 à 23:48
oui il est,
mais je te demande pas de résoudre le problème , le problème c'est que c'est première publication , et la à été poster avant de compléter ...

ce que je veus c'est just une indication

voilà ma tentation:

function x=cholesky2(A,b)
%*****************
[n nn]=size(A);
%*****************
for i=1:n
for j=1:n
B(i,j)=0;
end
end

%*****************
for j=1:n-1
som1=0;

for k=1:n
som1=som1+B(j,k)^2;
end

B(j,j)=sqrt(A(j,j)-som1);

n=j+1;
som2=0;
for k=1:j-1
som2=som2+B(j,k)*B(j+1,k);
end
B(j+1,j)=A(j+1,j)-som2;
end
%B(j+1,j)=A(j+1,j)-som2;
B
%*****************
Bt=B';
%******************
for k=1:n
B(k,n+1)=b(k);
end

%******************
y(1)=B(1,n+1)/B(1,1);
for i=1:n;
c=0;

for j=1:i-1;


c=c+B(i,j)*y(j);


end
y(i)=(B(i,n+1)-c)/B(i,i);
end
%******************

for k=1:n
Bt(k,n+1)=y(k);
end


%******************
x(n)=Bt(n,n+1)/Bt(n,n);
for i=n-1:-1:1;
c=0;

for j=i+1:n;


c=c+Bt(i,j)*x(j);


end
x(i)=(Bt(i,n+1)-c)/Bt(i,i);
end
x=x';
%******************
B
Bt
0