In the system AX=b are triangular matrices, so we can say that:
L=( lij ) lower triangular lij = 0, i < j
U=( uij ) upper triangular uij = 0, i > j
This method is a recursive type, this means that every step is based on results obtained on previous steps.
This will find a column from L and then a row from U and assume that the values in the diagonal U are 1.
function LUcrout
clc
clear
format short
disp(' ');
disp(' FACTORIZACION LU CROUT: ');
disp(' ');
disp(' METODO UTILIZADO PARA SOLUCIONAR UN SISTEMA DE ECUACIONES LINEALES ');
disp(' BASADO EN LA FACTORIZACION LU DE LA MATRIZ DE COEFICIENTES ');
disp(' RELACIONADA AL SISTEMA. PARA ESTE METODO DE FACTORIZACION ');
disp(' DIRECTA DE MATRICES, SE UTILIZA COMO FUNDAMENTO QUE LOS VALORES ');
disp(' DE LA DIAGONAL DE LA MATRIZ U, SON TODOS UNO (1). ');
disp(' ');
A=input(' INGRESE LA MATRIZ DE COEFICIENTES A= ');
b=input(' INGRESE LA MATRIZ DE TERMINOS INDEPENDIENTES b= ');
[n,m]=size(A);
Ab=[A,b];
fprintf('\n LA MATRIZ AUMENTADA Ab ES = \n');
disp(' ');
disp(Ab);
if n==m
for k=1:n
U(k,k)=1;
suma=0;
for p=1:k-1
suma=suma+L(k,p)*U(p,k);
end
L(k,k)=(A(k,k)-suma);
for i=k+1:n
suma=0;
for r=1:k-1
suma=suma+L(i,r)*U(r,k);
end
L(i,k)=(A(i,k)-suma);
end
for j=k+1:n
suma=0;
for s=1:k-1
suma=suma+L(k,s)*U(s,j);
end
U(k,j)=(A(k,j)-suma)/L(k,k);
end
end
detu=1;
detl=1;
for i=1:n
detl=detl*L(i,i);
end
detA=detl*detu;
disp(' ');
disp(' EL DETERMINANTE DE LA MATRIZ L ES IGUAL A: ');
disp(' ');
fprintf(' %g \n',detl);
disp(' ');
disp(' EL DETERMINANTE DE LA MATRIZ A: ');
disp(' ');
fprintf(' %g \n',detA);
if detA~=0
for i=1:n
suma=0;
for p=1:i-1
suma=suma+L(i,p)*y(p,1);
end
y(i,1)=(b(i)-suma)/L(i,i);
end
for i=n:-1:1
suma=0;
for p=(i+1):n
suma = suma+U(i,p)*x(p);
end
x(i)=(y(i)-suma)/U(i,i);
end
else
disp(' ');
disp('EL DETERMINANTE DE LA MATRIZ A ES IGUAL A CERO - EL SISTEMA TIENE INFINITAS SOLUCIONES O NO TIENE SOLUCIÓN')
disp(' ');
end
end
disp(' ');
fprintf('\n LA MATRIZ Ab AL FINAL DEL PROCESO ES IGUAL A: \n')
disp(' ');
fprintf('\n Ab= \n');
disp(' ');
disp(Ab)
fprintf('\n LA MATRIZ L CALCULADA ES IGUAL A: \n')
disp(' ');
fprintf('\n L= \n');
disp(' ');
disp(L)
disp(' ');
fprintf('\n LA MATRIZ U CALCULADA ES IGUAL A: \n')
disp(' ');
fprintf('\n U= \n');
disp(' ');
disp(U)
disp(' ');
fprintf('\n EL VECTOR Y CALCULADO ES IGUAL A: \n')
disp(' ');
fprintf('\n Y= \n');
disp(' ');
disp(y)
fprintf('\n\n\n EL VERTOR SOLICION ES IGUAL A :\n');
x=x';
B=A*x;
disp(x);
fprintf('\n EL PRODUCTO ENTRE LA MATRIZ A Y EL VECTOR SOLUCION DA COMO RESULTADO EL VECTOR b \n');
disp(B);
fprintf('\n CUYA DIFERENCIA CON EL VECTOR b HORIGINAL ES DE \n');
D=b-B;
disp(D);
return
end