Você está na página 1de 5

Cdigo Fonte

function [P L U A] = crout_p( A )
%UNTITLED Summary of this function goes here
%
Detailed explanation goes here
%%%%%%% ALgoritmo de Crout para Fatorao LU - Com pivoteamento
% dados de entrada
%
% matriz A
%
% dados de sada
%
% U matriz triangular superior
% L matriz triangular inferior
% P matriz de trocas de linha pelo pivoteamento
% iniciar contador de tempo
tic
% determinar dimenso da matriz A
n=length(A);
P=[1:n];
for j=1:n
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%%% Inicio algoritmo de Crout
%
for i=1:j-1
soma=A(i,j);
for k=1:i-1
soma=soma-A(i,k)*A(k,j);
end
A(i,j)=soma;
%A(i,j)=U(i,j);
end

for i=j:n
soma=A(i,j);
for k=1:j-1
soma=soma-A(i,k)*A(k,j);
end

A(i,j)=soma;
end
%
% Iniciar Pivoteamento por linha
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
p=0;
for i=j:n
if abs(A(i,j)) > p
p=abs(A(i,j));

i_linha=i;
end
end
%Teste se a matriz singular
if p==0
fprintf('A matriz eh singular \n')
break
end
%Trocar Linha j pela linha i_linha
for k=1:n
aux=A(i_linha,k);
A(i_linha,k)=A(j,k);
A(j,k)=aux;
end
aux=P(j);
P(j)=P(i_linha);
P(i_linha)=aux;
%
% Fim do pivoteamento por linha
%
if j~=n
aux=1/A(j,j);
for i=j+1:n
A(i,j)=A(i,j)*aux;
end
end
end
%%%%%
%%%% Fim algortmo de Crout
%%%%%
%Criando matriz troca de linhas e exibindo a matriz L e U
aux=zeros(n,n);
for i=1:n
aux(i,P(i))=1;
L(i,i)=1;
for j=1:n
if i>j
L(i,j)=A(i,j);
else
U(i,j)=A(i,j);
end
end
end
P=aux;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%contador de tempo
toc
end

Você também pode gostar