Implementación del método de Cholesky en MATLAB

serhanus Mensajes publicados 3 Estado Miembro -  
serhanus Mensajes publicados 3 Estado Miembro -
Hola a todos,

Primero recuerdo que el método de Cholesky consiste en resolver un sistema lineal clásico Ax=b, descomponiendo la matriz A en A=B*Bt (con B una matriz triangular inferior y Bt su transpuesta).

Hay una función en MATLAB que se llama "chol" que devuelve Bt, he escrito un script que resuelve el sistema utilizando esta función.

Pero el problema es que me han pedido implementar una función que haga lo que hace "chol" !

1 respuesta

rlo73 Mensajes publicados 3123 Estado Miembro 669
 
¿No se llama eso un ejercicio? No vamos a escribir el algoritmo en tu lugar, al menos me parece que esa no es la política de CCM.
3
serhanus Mensajes publicados 3 Estado Miembro
 
sí, lo es,
pero no te pido que resuelvas el problema, el problema es que es la primera publicación, y se ha publicado antes de completarla...

Lo que quiero es solo una indicación

Aquí está mi intento:

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