Implementación del método de Cholesky en MATLAB
serhanus
Mensajes publicados
3
Estado
Miembro
-
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" !
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" !
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