Você está na página 1de 12

UNIVERSIDADE FEDERAL DE UBERLNDIA

Faculdade de Engenharia Eltrica


Programa de Ps Graduao em Engenharia Eltrica
EL027 - Mtodos Computacionais
Afonso Janurio Pujoni Soares - 11712EEL001

______________________________________________________________________

Resoluo de sistemas de equaes lineares


1. Fundamentos
Sistemas de equaes lineares aparecem em problemas que contm muitas variveis
dependentes. Tais problemas ocorrem no apenas na engenharia e na cincia, mas
tambm em virtualmente todas as demais disciplinas (negcios, estatstica, economia,
etc.). Um sistema de duas (ou trs) equaes com duas (ou trs) incgnitas pode ser
resolvido manualmente por substituio ou com o uso de mtodos matemticos.
Resolver um sistema dessa maneira praticamente impossvel se o nmero de
equaes (e incgnitas) for maior que trs [3]. A forma geral de um sistema contendo
n equaes lineares algbricas :

(1.01)

A figura acima mostra a forma matricial das equaes e pode ser resolvida atravs de
dois tipos de mtodos numricos, chamados de diretos e iterativos. Neste trabalho foi
utilizado um mtodo direto, chamado fatorao LU, no qual a matriz original
decomposta em duas matrizes diagonais, inferior (L) e superior (U), atravs de
sucessivas eliminaes de Gauss, tambm chamado de eliminao progressiva, e
ainda, utilizando o processo conhecido como pivotamento.
Aps a execuo desses processos determina-se o valor de uma das variveis e
utilizam-se as progresses regressivas ou progressivas, a fim de se encontrar os
valores das outras variveis. Os mtodos diretos realizam bem o trabalho de resoluo
at um nmero relativamente baixo de incgnitas, geralmente at trinta. Os mtodos
computacionais so utilizados na resoluo de sistemas lineares de equaes
algbricas devido extrema facilidade e velocidade que os computadores possuem de
realizar tarefas repetitivas, impossveis para os seres humanos.

2. Mtodo de decomposio LU

O mtodo de eliminao de Gauss consiste em duas partes. A primeira corresponde


ao procedimento de eliminao no qual um sistema de equaes lineares dado na
forma geral, [a][x] = [b], transformado em um sistema equivalente de equaes [a]
[x] = [b] no qual a matriz de coeficientes [a] triangular superior.
Na segunda parte, o sistema equivalente solucionado com o emprego da
substituio regressiva. O procedimento de eliminao requer operaes matemticas
e tambm um tempo computacional muito mais significativos do que os clculos
realizados na substituio regressiva. Durante o procedimento de eliminao, a matriz
de coeficientes [a] e o vetor [b] so alterados. Isso significa que, se houver a
necessidade de resolver sistemas de equaes possuindo os mesmos termos no lado
esquerdo (uma mesma matriz de coeficientes [a]), mas diferentes constantes do lado
direito (diferentes vetores [b]), o procedimento de eliminao deve ser feito novamente
para cada [b]. Idealmente, seria melhor se as operaes realizadas na matriz de
coeficientes [a] fossem dissociadas daquelas realizadas no vetor de constantes [b].
Dessa forma, o procedimento de eliminao em [a] seria feito apenas uma vez e ento
utilizado para solucionar sistemas de equaes com diferentes vetores [b]. Uma opo
para resolver sistemas de equaes [a][x] = [b] com mesmas matrizes de coeficientes
[a] mas diferentes vetores de constantes [b] primeiro calcular a inversa da matriz [a].
Uma vez conhecida a matriz inversa [a]1, a soluo pode ser calculada com:
(1.02)

O clculo da inversa de uma matriz, contudo, requer muitas operaes matemticas e


computacionalmente ineficiente. Um mtodo de soluo mais eficiente para este
caso o mtodo de decomposio LU. No mtodo de decomposio LU, as
operaes com a matriz [a] so feitas sem que o vetor [b] seja utilizado ou
alterado. Este s usado na parte de substituio da soluo. O mtodo de
decomposio LU pode ser usado para resolver um nico sistema de equaes
lineares. Porm, ele especialmente vantajoso na soluo de sistemas que tm
as mesmas matrizes de coeficientes [a], mas diferentes vetores de constantes
[b], o que geralmente ocorre em problemas de engenharia.
O mtodo de decomposio LU um mtodo empregado na soluo de sistemas de
equaes lineares na forma [a][x] = [b]. Neste mtodo, a matriz de coeficientes [a]
decomposta (fatorada) em um produto de duas matrizes [L] e [U]:
(1.03)

onde a matriz [L] uma matriz triangular inferior e a matriz [U] uma matriz triangular
superior. Com essa decomposio, o sistema de equaes a ser resolvido tem a
forma:
(1.04)
Para resolver essa equao, o produto [U][x] definido como

(1.05)
e substitudo na Eq. (1.04), levando a:

(1.06)
A soluo [x] agora obtida em dois passos. Primeiramente, a Eq. (1.06) resolvida
para [y]. Em seguida, a soluo [y] substituda na Eq. (1.05) e esta equao
resolvida para [x]. Como a matriz [L] uma matriz triangular inferior, a soluo [y] na
Eq. (1.06) obtida com o uso do mtodo da substituio progressiva. Assim que [y]
conhecido e substitudo na Eq. (1.05), esta equao resolvida com o emprego da
substituio regressiva, pois [U] uma matriz triangular superior.
Neste trabalho o processo de soluo do sistema linear proposto foi realizado
utilizando o programa MATLAB do desenvolvedor MathWorks e com ele escritas
funes que realizam o trabalho em partes: o script principal
(Resolve_Sistema_Por_LU.m), a funo que realiza o pivotamento
(GaussPivotamento.m), a que realiza a decomposio de A em L e U
(DecompLUCrout.m), a que faz a substituio progressiva (SubstProgres.m) e
regressiva (SubstRegres.m).
De acordo com a proposta do professor da disciplina foi desenvolvido o cdigo e
testado com o exerccio 31 da lista, cujo enunciado mostrado abaixo:

31 Resolva o conjunto de equaes simultneas abaixo utilizando fatorao LU.

6x1+3x2+6x3 = 30
2x1+3x2+3x3 = 17
x1+2x2+2x3 = 11
3. Soluo:
Para melhor compreenso o algoritmo ser apresentado em partes, seguido de
explicaes do cdigo implementado.
Parte 1)

clc; clear all; close all; %Limpa a tela, apaga as variveis globais e
fecha as janelas abertas

%% Instrues de entrada de dados


%Para digitar uma matriz separe por espao ou vrgula os
%elementos de uma linha e por ponto e vrgula as colunas da matriz.

%% Aumenta o nmero de casas decimais

format LONGG;

%% Apresenta o ttulo do cdigo

disp('Resolve sistema linear utilizando o mtodo da decomposio LU


(Crout)');

%% Solicita a entrada dos dados da matriz A

A = input('\nEntre com a matriz dos coeficientes A na forma [a11 a12


... a1n; a21 a22 ... a2n]: ');

Nesta parte inicial do programa realizada a limpeza da janela de comandos,


apagadas as variveis da memria e fechadas possveis janelas de figuras abertas no
MATLAB. Tambm nesse trecho do cdigo solicitado ao usurio entrar com a matriz
A para a qual se deseja fazer a decomposio. Para se digitar uma matriz no
MATLAB, os elementos devem estar entre colchetes e os elementos de uma linha
devem ser separados por espao e as linhas separadas por ponto e vrgula.

Parte 2)

Testa se a matriz quadrada e encerra o programa caso no seja, informando o


usurio.

%% Testa se a matriz quadrada

[La Ca] = size(A); %Obtm o nmero de linhas (La) e colunas (Ca) de A


if (La ~= Ca )%Se o nmero de linhas de A for diferente do nmero de
colunas de A...
disp ( 'ERRO: Matriz deve ser quadrada !!!!' ); %Exibe a mensagem
return; %Sai do programa
end;

Parte 3)

Neste trecho do cdigo solicitado ao usurio entrar com o vetor coluna b, que so os
termos independentes da soluo da matriz e testa se o nmero de elementos est
correto.

%% Solicita a entrada dos dados do vetor b


b = input('\nEntre com os coeficientes independentes (vetor coluna b)
no formato [ b11; b12; ...; b1n]: ');
[Lb Cb] = size(b); %Obtm o nmero de linhas (Lb) e colunas (Cb) de b
if (Lb ~= La ) %Se o nmero de linhas de b for diferente do nmero de
%linhas de A
disp ( 'ERRO: Nmero de elementos de b deve ser igual ao nmero de
linhas de A !!!!' );
return; %Sai do programa
end;

Parte 4)

So passados como argumentos de entrada para a funo a matriz A e o vetor coluna


b e as variveis A e B recebem os argumentos de sada da funo GaussPivotamento()
que so a matriz A e o vetor b aps o processo de pivotamento (A_pivot e B_pivot).

%% Chama a funo que realiza o pivotamento

[A,B] = GaussPivotamento(A,b);

Parte 5)

passada para a funo como argumento de entrada a matriz A, que ser


decomposta em duas matrizes L (inferior) e U (superior), utilizando o processo de
decomposio de Crout, que cria a matriz U com todos os elementos da diagonal
principal iguais a 1, conforme exemplo abaixo:

%% Chama a funo que realiza a decomposio de A em L e U

[L,U] = DecompLUCrout(A);

Parte 6)

A funo recebe as variveis L (matriz inferior) e B (vetor coluna aps o processo de


pivotamento) e realiza os clculos segundo as expresses abaixo, para encontrar o
vetor x(i), que nesse cdigo recebeu o nome de y(i):
%% Faz a substituio progressiva em L com os dados de b

y = SubstProgres(L,B);

Parte 7)

A funo recebe as variveis U (matriz superior) e y (vetor coluna encontrado no passo


anterior) e realiza os clculos segundo as expresses abaixo, para encontrar o vetor
x(i), que a resposta da soluo do sistema:

%% Faz a substituio regressiva em U com os dados de y

x = SubstRegres(U,y);

Parte 8)

%% Apresenta os dados
disp(' ');
disp('Os valores de [x1 x2 ... xn] = ');
x

4. Cdigos das funes implementadas no MATLAB

Funo GaussPivotamento( )

function [ A_pivot, B_pivot ] = GaussPivotamento( A,B )


%A funo resolve um sistema de equaes lineares [A][x]=[B] usando o
mtodo de eliminao de Gauss.
% A = Matriz de coeficientes.
% B = Vetor coluna contendo as constantes do lado direito do sistema.
% ab = Matrizes A e B concatenadas:
% v = Vetor coluna com a soluo.
clc;
ab = [A B]; % Concatena as matrizes A e B
[Linhas,Colunas] = size(ab); %Recebe os valores de linha e colunas da
%matriz concatenada.

%% Mtodo da eliminao de Gauss com pivotamento


for j = 1:Linhas-1 %Seleciona as linhas, exceto a primeira que o
%piv
if ab(j,j) == 0 %Verifica se o elemento piv nulo (se for, a
%pivotao necessria)
for k = j + 1:Linhas %Procura uma linha que o piv seja
diferente de zero
if ab(k,j) ~= 0 %Se for...
abTemp = ab(j,:); %Armazena a linha na matriz
%temporria
ab(j,:) = ab(k,:); %
ab(k,:) = abTemp; %Troca a linha da matriz ab pela da
%matriz temporria
break %Trmino da busca por uma linha que o piv seja
%diferente de zero
end %Fim do if
end %Fim do for
end %Fim do if
end

B_pivot = zeros(Linhas,1); %Cria um vetor coluna preenchido com zeros


A_pivot = zeros(Linhas,Colunas-1); %Cria uma matriz preenchida com
zeros
A_pivot = ab(:,1:Colunas-1); %A matriz A_pivot recebe os elementos da
%matriz ab sem a ltima coluna, que o vetor b concatenado
B_pivot = ab(:,Colunas);%A matriz B_pivot recebe os elementos da
%ltima coluna de ab, que o vetor b, pivotado

end

Funo DecompLUCrout( )

function [ L, U ] = DecompLUCrout( A )
% A funo decompe a matriz A em uma matriz triangular inferior L e
% em uma matriz triangular superior U, usando o mtodo de Crout de
forma que A = LU.
% Variveis de entrada:
% A Matriz de coeficientes.
% Variveis de sada:
% L Matriz triangular inferior.
% U Matriz triangular superior.

[linhas, colunas] = size(A); %Verifica o nmero de linhas e colunas da


%matriz A
for i = 1:linhas %Varivel i assume valores de 1 at o nmero de
%linhas da matriz A
L(i,1) = A(i,1); %Os elementos da primeira coluna da matriz L so
%iguais a da matriz A
U(i,i) = 1;%Os elementos da diagonal principal de U so iguais a 1
end
for j = 2:linhas
U(1,j) = A(1,j)/L(1,1); %Clculo das linhas abaixo da primeira
%(2, 3, ... ,n)
end

for i = 2:linhas
for j = 2:i %Nmero das colunas
L(i,j) = A(i,j) - L(i,1:j-1)*U(1:j - 1,j); %Clculo dos
%valores dos elementos de L
end

%Clculo dos demais elementos linha aps linha (i o nmero da linha


%e j o nmero da coluna). Os elementos de [L] so calculados
%primeiro porque eles so usados no clculo dos elementos de [U]:

for j = i + 1:linhas
U(i,j) = (A(i,j) - L(i,1:i-1)*U(1:i-1,j))/L(i,i); %Clculo dos
valores dos elementos de U
end

end

end

Funo SubstProgres( )

function y = SubstProgres( L,b )


% A funo resolve um sistema de equaes lineares ax = b, onde a um
% matriz triangular inferior, usando a substituio progressiva.
% Variveis de entrada:
% a Matriz de coeficientes.
% b Vetor coluna de constantes.
% Varivel de sada:
% Vetor coluna com a soluo.

n = length(b); %Atribui a n o valor do comprimento de y


y(1,1) = b(1)/L(1,1);
for i = 2:n
y(i,1) = (b(i) - L(i,1:i -1)*y(1:i-1,1))./L(i,i);
end
end

Para um sistema com n equaes na forma triangular superior, uma frmula geral para
a soluo usando a substituio progressiva :

Funo SubstRegres( )

function x = SubstRegres( U,y );


% A funo resolve um sistema de equaes lineares ax = b, onde a
uma
% matriz triangular superior, usando a substituio regressiva.
% Variveis de entrada:
% U: Matriz de coeficientes.
% b: Vetor coluna de constantes.
% Varivel de sada:
% x: Vetor coluna com a soluo.

n = length(y); %Atribui a n o valor do comprimento de y


x(n,1) = y(n)/U(n,n);
for i = n-1:-1:1 %Substituio regressiva, da penltima linha
at a %primeira
x(i,1) = (y(i,1) - U(i,i + 1:n)*x(i +1:n))/U(i,i);
end
end

Para um sistema com n equaes na forma triangular superior, uma frmula geral para
a soluo usando a substituio regressiva :
5. Resultados

Entrando os dados do sistema (matriz A e vetor coluna b).

Apresentando o resultado.

Visualizao das matrizes L e U.

A multiplicao de L por U resulta na matriz A, como esperado.


6. Concluses

As funes desenvolvidas para a soluo do sistema de equaes lineares proposto


apresentaram o resultado esperado. O cdigo foi utilizado para resolver diversos
sistemas da lista de exerccios da disciplina, mostrando-se eficiente mesmo em
sistemas com elementos iguais a zero, mostrando que o processo de pivotamento foi
eficaz na mudana das linhas piv, sendo que, para a resoluo do sistema proposto
no houve alterao na matriz de coeficientes, uma vez que o maior elemento j se
encontrava na primeira linha. O cdigo foi testado para sistemas com oito equaes,
utilizando um exemplo de [3] e com sistemas gerados com o MATLAB , utilizando
A*x = b, gerando uma matriz de inteiros com o comando randi( ), de 10x10, 20x20 e
50x50 e vetores 10x1, 20x1 e 50x1, sendo que at esse nmero apresentou
resultados condizentes com o esperado, apenas com diferenas do resultado do
linsolve( ), nativo do programa, devido a arredondamentos realizados nos clculos.

7. Referncias

[1] GRIFFITHS, D.V. ; SMITH, I.M. Numerical Methods for Engineers. 2.ed. Boca
Raton: CRC Press, 2000, 340p.
[2] CHAPRA, S.C; CANALE, R. P. Mtodos Numricos para Engenharia. 5.ed. So
Paulo: McGraw-Hill, 2008, 810p.
[3] CHAPRA, S.C. Mtodos Numricos Aplicados com MATLAB para Engenheiros
e Cientistas. 3. Ed. Porto Alegre: McGraw-Hill, 2013, 655p.
[4] F. F. CAMPOS. Algoritmos Numricos. 2. ed. Rio de Janeiro: LTC Editora, 2007.
v. 1. 444p .

Você também pode gostar