Este método pertenece al sistema de factorización LU. A partir de una matriz A, se hallan dos matrices L y U, en este método la matriz L es triangular inferior y la matriz U es triangular superior, pero las dos matrices L y U tienen los mismos valores en la diagonal. Sin embargo, si A es simétrica y definida positiva, se pueden escoger los factores tales que U es la transpuesta de L.
La factorización puede ser calculada directamente a través de las siguientes fórmulas...
Para los elementos de la diagonal principal, y:
Para el resto de los elementos. Donde uij son los elementos de la matriz U.
Seudocódigo.
Input A, b
n= # de filas de A
L=eye(n);
U=eye(n);
for k=1:n
suma=0;
for p=1:k-1
suma=suma+L(k,p)*U(p,k);
end
L(k,k)= sqrt(A(k,k)-suma);
U(k,k) = L(k,k);
for i=k+1:n
suma=0;
for p=1:k-1
suma=suma+L(i,p)*U(p,k);
end
L(i,k)=(A(i,k)-suma)/L(k,k);
end
for j= k+1:n
suma=0;
for p=1:k-1
suma=suma+L(k,p)*U(p,j);
end
U(k,j)=(A(k,j)-suma)/L(k,k);
end
end
for i=1:n
suma=0;
for p=1:i-1
suma=suma+L(i,p)*d(p,1);
end
d(i,1)=(b(i,1)-suma)/L(i,i);
end
for i=n:-1:1
suma=0;
for p=i+1:n
suma=suma+U(i,p)*X(p,1);
end
X(i,1)=(d(i,1)-suma)/U(i,i);
end
Código.
clc
A=input('ingrese la matriz: ');
b=input('ingrese la matriz de términos independientes: ');
n=size(A,1);
L=eye(n);
U=eye(n);
for k=1:n
suma=0;
for p=1:k-1
suma=suma+L(k,p)*U(p,k);
end
L(k,k)= sqrt(A(k,k)-suma);
U(k,k) = L(k,k);
for i=k+1:n
suma=0;
for p=1:k-1
suma=suma+L(i,p)*U(p,k);
end
L(i,k)=(A(i,k)-suma)/L(k,k);
end
for j= k+1:n
suma=0;
for p=1:k-1
suma=suma+L(k,p)*U(p,j);
end
U(k,j)=(A(k,j)-suma)/L(k,k);
end
end
disp('U=')
disp(U)
disp('L=')
disp(L)
disp('L*U=')
disp(L*U)
for i=1:n
suma=0;
for p=1:i-1
suma=suma+L(i,p)*d(p,1);
end
d(i,1)=(b(i,1)-suma)/L(i,i);
end
disp('d=');
disp(d);
for i=n:-1:1
suma=0;
for p=i+1:n
suma=suma+U(i,p)*X(p,1);
end
X(i,1)=(d(i,1)-suma)/U(i,i);
end
disp('La solucion es: ')
disp(X)
B=A*X