Introdução aos Sistemas Lineares
Profa. Cynthia de O. Laga Ferreira
Métodos Numéricos e Computacionais I - SME0305
Frequentemente, em todas as áres científicas, precisamos resolver problemas na forma
Ax = b,
onde A é uma matriz quadrada de dimensão n ⇥ n cujos elementos aij são
reais ou complexos e x e b são vetores colunas de dimensão n, x é um vetor desconhecido e b é um vetor dado.
A equação acima se escreve também 8 > > > < > > > : a11x1+ a12x2+ ...+ a1nxn = b1 a21x1+ a22x2+ ...+ a2nxn = b2 ... ... ... ... ... an1x1+ an2x2+ ... annxn = bn
Antes de apresentarmos os métodos e algorítimos de solução deste problema, vejamos algumas aplicações.
Aplicações
1 Análise de fluxo em redes
Vamos representar o problema representado pela rede da figura acima através de um sistema linear. 8 > > > > < > > > > : x1+ x2 = 20 x3 x4 = 20 x2+ x3 = 20 x1 x5 = 10 x4 +x5 = 10
Matricialmente, este problema pode ser representado por 2 6 6 6 6 4 1 1 0 0 0 0 0 1 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 3 7 7 7 7 5 2 6 6 6 6 4 x1 x2 x3 x4 x5 3 7 7 7 7 5= 2 6 6 6 6 4 20 20 20 10 10 3 7 7 7 7 5
Usando MATLAB, podemos encontrar a solução deste sistema pelo operador de divisão à esquerda
>> A = [1 1 0 0 0; 0 0 1 -1 0; 0 1 1 0 0; 1 0 0 0 -1; 0 0 0 -1 1]; >> b = [20; -20; 20; -10; -10];
>> x = A\b x =
O que significa a mensagem de warning dada pelo MATLAB ?
2 Ajuste de curvas
Suponha que dispomos de n pontos do plano xy (x1, y1), (x2, y2), ... , (xn, yn)
representando uma coleção de dados. Gostaríamos de encontrar um polinômio de grau n 1 , p(x) = a0+a1x+a2x2+...+an 1xn 1cujo gráfico passe por estes
pontos. Este procedimento é chamado de ajuste de curvas.
Para encontrar os n coeficientes de p(x), devemos substituir cada um dos n pontos na função polinomial a fim de obtermos n equações nas n variáveis a0, a1, ...an 1.
8 > > > < > > > : a0+ a1x1+ · · · +an 1xn 11 = y1 a0+ a2x2+ · · · +an 1xn 12 = y2 ... ... ... ... ... a0+ a2xn+ · · · +an 1xn 1n = yn
Exemplo : Encontre o polinômio de grau 4 cujo gráfico passa pelos pontos ( 2, 3), ( 1, 5), (0, 1), (1, 4) e (2, 10).
Observação: Regra de Cramer
O sistema Ax = b possui solução única se e somente se a matriz A é não singular. Desta forma, a solução pode ser calculada usando a regra de Cramer xi= det(Ai)/det(A),com i = 1, ..., n. A matriz Aié obtida a partir da matriz A
substituindo sua i ´esima coluna por b. Se computarmos os n+1 determinantes usando a fórmula de Lagrange, na qual det(A) = ⇢ P a11 se n = 1
n
j=14ijaij n = 2, ...n ,
onde 4ij = ( 1)i+jdet(Aij),sendo Aija matriz obtida eliminando-se a i ´esima
linha e a j esima´ coluna da matriz A, 2(n + 1)! operações são necessárias.
Métodos Diretos
Consideremos, novamente, o problema Ax = b,
onde A é uma matriz quadrada de dimensão n⇥n cujos elementos aijsão reais ou
complexos e x e b são vetores colunas de dimensão n, x é um vetor desconhecido e b é um vetor dado. Vamos estudar uma classe de métodos conhecida como métodos diretos. Tais métodos nos permitem obter a solução exata do problema, supondo não haver erros de arredodamento ou quaisquer outros.
Matrizes Triangulares
Suponhamos que desejamos resolver o sistema Ax = b, no qual a matriz A 2 Mn(R) é triangular superior. Neste caso, o sistema a ser resolvido pode ser
escrito na forma 8 > > > < > > > : a11x1+ a12x2+ ...+ a1nxn = b1 0 a22x2+ ...+ a2nxn = b2 ... ... ... ... ... 0 0 ... annxn = bn
Se aii 6= 0, para todo i = 1, ..., n, a solução é calculada através do algoritmo
abaixo
Algoritmo de substituições regressivas Entrada: bi, i=1,...,n e aij, i,j = 1,...,n
Saída: xi, i=1,...,n xn= bn/ann Para i de n-1 até 1 xi= ⇣ bi Pnj=i+1aijxj ⌘ /aii
Exercício: escreva uma função MATLAB que realiza o algoritmo de substituições regressivas para resolver o sistema Ax = b, sendo dados a matriz quadrada triangular superior A e o vetor b. O protótipo da função deverá ser x = backsub(A,b).
Analogamente, podemos resolver o sistema Ax = b, em que a matriz A 2 Mn(R)
é triangular inferior. Neste caso, o sistema a ser resolvido pode ser escrito na forma 8 > > > < > > > : a11x1+ 0 ... 0 = b1 a21x1+ a22x2 0 ... 0 = b2 ... ... ... ... ... an1x1+ an2x2+ ... annxn = bn
Se aii6= 0, para todo i = 1, ..., n, a solução é calculada através do algoritmo
de substituição regressiva
Algoritmo de substituições progressivas Entrada: bi, i=1,...,n e aij, i,j = 1,...,n
Saída: xi, i=1,...,n x1= b1/a11 Para i de 2 até n xi= ⇣ bi Pn 1j=1aijxj ⌘ /aii
Exercício: repita o exercício anterior e escreva uma função MATLAB que realiza o algoritmo de substituições progressivas para resolver o sistema Ax = b, sendo dados a matriz quadrada triangular inferior A e o vetor b. O protótipo da função deverá ser x = forwsub(A,b).
Ordem de Complexidade: ⇢
Substitui¸c˜ao P rogressiva : n2 Substitui¸c˜ao Regressiva : n2
Decomposição LU
(TEOREMA) Seja A uma matriz quadrada de ordem n e Ak o menor principal
k. Se det(Ak) 6= 0, para k = 1, 2, ..., n 1. Então existe uma única matriz
triangular inferior L e uma única matriz triangular superior U tais que A = LU.
Definição: (Menores Principais Ak) São matrizes definidas pelas k primeiras
linhas e colunas de A. A = 2 6 6 6 4 a11 a12 . . . a1n a21 a22 a2n ... ... an1 an2 · · · ann 3 7 7 7 5= 2 6 6 6 4 1 l21 1 ... ... ln1 ln2 · · · 1 3 7 7 7 5 2 6 6 6 4 u11 u12 · · · u1n u22 u2n ... ... unn 3 7 7 7 5= LU.
Resolver o sistema Ax = b é equivalente a resolver os sistemas Ly = b e U x = y,consecutivamente, onde y é um vetor temporário.
2 6 6 6 4 1 l21 1 ... ... ln1 ln2 · · · 1 3 7 7 7 5 0 B B B @ y1 y2 ... yn 1 C C C A= 0 B B B @ b1 b2 ... bn 1 C C C A Substitui¸c˜ao P rogressiva 2 6 6 6 4 u11 u12 · · · u1n u22 u2n ... ... unn 3 7 7 7 5 0 B B B @ x1 x2 ... xn 1 C C C A= 0 B B B @ y1 y2 ... yn 1 C C C A Substitui¸c˜ao Regressiva
Pseudo-Código
uij = aij i 1 X k=1 likukj lij = aij Pj 1k=1likukj ujjFunção Matlab [L,U] = ludecomp(A)
% Decomposicao LU sem pivoteamento % Input:Matriz quadrada A(nxn).
% Output:Matrizes triangulares inferior L e superior U de A = LU. function [L,U] = ludecomp(A)
n=size(A,1); L=eye(n); U=zeros(n); for k=1:n for j=k:n U(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j); end for i=k+1:n L(i,k)=(A(i,k)-L(i,1:k-1)*U(1:k-1,k))/U(k,k); end end
Ordem de Complexidade: Decomposi¸c˜ao LU : 2 3n3
Função Matlab x = resolve_lu(A,b)
% Resolver sistema Ax = b, usando decomposição LU % Input:Matriz quadrada A e vetor b.
% Output:Vetor solução x. function x = resolve_lu(A,b) [L,U] = ludecomp(A);
y = forwsub(L,b); x = backsub(U,y);
Exercício: Seja A =
2
4
5 2 1
3 1 4
1 1 3
3
5.
(a) Verifique se A satisfaz às condições da decomposição LU. (b) Decompor A em LU.
(c) Calcular o determinante de A usando a decomposição obtida. (d) Resolver o sistema Ax = b, onde b = (0, 7, 5)t.
Decomposição De Cholesky
(COROLÁRIO) Se A é simétrica e positiva definida, então A pode ser decom-posta unicamente no produto HHT, onde H é uma matriz triangular inferior
com elementos diagonais positivos.
Definição: (Positiva definida) Uma matriz simétrica A é positiva definida se para todo vetor não nulo x 2 Rn , tem-se xTAx > 0.
A = 2 6 6 6 4 a11 a12 . . . a1n a21 a22 a2n ... ... an1 an2 · · · ann 3 7 7 7 5= 2 6 6 6 4 h11 h21 h22 ... ... hn1 hn2 · · · hnn 3 7 7 7 5 2 6 6 6 4 h11 h21 · · · hn1 h22 ... hn2 ... ... hnn 3 7 7 7 5= HH T.
Pseudo-Código
hkk= v u u takk k 1 X s=1 h2 ks hkj= akj Pj 1s=1hkshjs hjjFunção Matlab H = choldecomp(A)
% Decomposicao de Cholesky
% Input:Matriz simetrica e positiva definida A(nxn). % Output:Matriz triangular inferior H.
function H = cholcomp(A) n=size(A,1); H=tril(A); for k=1:n-1 H(k,k)=sqrt(H(k,k)); H(k+1:n,k)=H(k+1:n,k)/H(k,k); for j=k+1:n H(j:n,j)=H(j:n,j)-H(j:n,k)*H(j,k); end end H(n,n)=sqrt(H(n,n));
Ordem de Complexidade: Cholesky : 1 3n
3
Função Matlab x = resolve_chol(A,b)
% Resolver sistema Ax = b, usando decomposição Cholesky % Input:Matriz quadrada A e vetor b.
% Output:Vetor solução x. function x = resolve_chol(A,b) H = choldecomp(A); y = forwsub(H,b); x = backsub(H’,y);
Exercício: Seja A =
2
4
4
2
10
2
4
4
4
4
9
3
5.
(a) Verifique se A satisfaz às condições do método de Cholesky. (b) Decompor A em HHT.