F´ısica Computacional
C´
alculo Num´erico
Universidade do Estado do Rio de Janeiro
Instituto de F´ısica
Departamento de F´ısica Aplicada e Termodinˆamica
Professor Lu´ıs Fernando
Professor Anibal Leonardo
Pref´
acio
Esta nota de aula foi preparada para apoiar o curso de F´ısica Computacional. Ela tenta englobar os m´etodos de c´alculo num´erico e algoritmos mais utilizados na forma¸c˜ao dos alunos de F´ısica, seja por causa das disciplinas do curso seja pela participa¸c˜ao em projetos de pesquisa atrav´es de inicia¸c˜ao cient´ıfica.
Rio de Janeiro, 2008
Sum´
ario
1 Sistemas Lineares 1
1.1 Sistema de Equa¸c˜oes Lineares . . . 1
1.1.1 Representa¸c˜ao Matricial de um Sistema Linear . . . 2
1.1.2 Opera¸c˜oes Elementares . . . 3
1.2 M´etodos Diretos . . . 3
1.2.1 M´etodo de Gauss . . . 3
1.2.2 M´etodo de Jordan . . . 6
1.2.3 M´etodo da Matriz Inversa . . . 8
1.2.4 M´etodo de Cramer . . . 9
1.3 M´etodos Iterativos . . . 11
1.3.1 Convergˆencia para a Solu¸c˜ao . . . 12
1.3.2 M´etodo de Jacobi . . . 14
1.3.3 M´etodo de Gauss-Seidel . . . 15
Lista de C´
odigos
1.1 M´etodo de Gauss . . . 16
1.2 M´etodo de Jordan . . . 19
1.3 M´etodo da Matriz Inversa . . . 22
1.4 M´etodo de Cramer . . . 25
1.5 M´etodo de Jacobi . . . 28
Lista de Algoritmos
1
Sistemas Lineares
O prop´osito deste cap´ıtulo n˜ao ´e elaborar um curso de ´Algebra Linear, mas apresentar os m´etodos num´ericos para se resolver um sistema de equa¸c˜oes lineares. Inevitavelmente, os m´etodos que ser˜ao apresentados depender˜ao de um conhecimento pr´evio de ´algebra.
No que tange ao objetivo deste curso, para minimizar o esfor¸co do leitor, sempre que um desenvolvimento depender de um conceito matem´atico mais sofisticado, este ser´a brevemente recordado aqui.
1.1
Sistema de Equa¸
c˜
oes Lineares
Uma equa¸c˜ao ´e dita ser linear se cada termo cont´em n˜ao mais que uma vari´avel e cada vari´avel ´e apresentada na primeira potˆencia. Por exemplo
5x+ 2y−4z=−5 e −4x1+ 3x2+
x3
5 = 0 s˜ao lineares, ao passo que
5x2+ 2y−xz = 3 e −4x
1x3+ 3x2+x3=−3
n˜ao s˜ao.
A forma generalizada de uma equa¸c˜ao linear deve apresentar, pois, as vari´aveis lineares associadas aos seus coeficientes:
a1x1+a2x2+. . .+aixi+. . .+aNxN =b
ondeai, 1≤i≤N, s˜ao os coeficientes,xi, 1≤i≤N s˜ao as vari´aveis lineares eb´e o termo independente. Outra forma de representa¸c˜ao, bem mais sucinta, chamada de forma compacta, ´e:
N
X
j=1
ajxj=b
Um sistema de equa¸c˜oes lineares comN equa¸c˜oes eN inc´ognitas ´e um conjunto de equa¸c˜oes do tipo:
S =
a1,1x1 + a1,2x2 +· · · + a1,NxN = b1
a2,1x1 + a2,2x2 +· · · + a2,NxN = b2
..
. ... ... ...
aN,1x1 +aN,2x2 +· · · + aN,NxN = bN
comaij, 1≤i≤N, 1≤j≤N, n´umeros reais ou complexos. Na forma compacta:
S= N
X
j=1
aijxj =bi, parai= 1, . . . , N.
1.1. SISTEMA DE EQUAC¸ ˜OES LINEARES
i. o sistema tem solu¸c˜ao ´unica formada pelo conjunto de n´umeros {x1 = k1, x2 = k2, . . . , xN = kN} que
satisfaz simultaneamente asN equa¸c˜oes; ii. o sistema tem infinitas solu¸c˜oes;
iii. o sistema n˜ao possui solu¸c˜ao.
O curso se concentrar´a nos sistemas que tem solu¸c˜ao ´unica deixando os demais casos para um momento mais apropriado no futuro.
1.1.1
Representa¸
c˜
ao Matricial de um Sistema Linear
O sistema linearS, apresentado acima, pode ser escrito na forma matricial A·X=B
ondeA´e a matriz de coeficientes,B´e a matriz dos termos independentes eX ´e a matriz de inc´ognitas ou matriz solu¸c˜ao. Cada uma das matrizes ´e representada a seguir:
A=
a1,1 a1,2 · · · a1,N a2,1 a2,2 · · · a2,N
..
. ... ... aN,1 aN,2 · · · aN,N
X = x1 x2 .. . xN B = b1 b2 .. . bN
Alguns dos m´etodos de solu¸c˜ao de sistemas lineares precisam manipular tanto a matriz de coeficientesAcomo a de termos independentes B. Uma maneira compacta de se representar estas duas informa¸c˜oes numa ´unica estrutura ´e a matriz ampliada (tamb´em chamada de matriz aumentada ou matriz completa) do sistema. Ela difere da matrizA apenas pela inclus˜ao dos termos independentes como ´ultima coluna da matriz:
ˆ
A= [A|B] =
a1,1 a1,2 · · · a1,N b1
a2,1 a2,2 · · · a2,N b2
..
. ... ... ... aN,1 aN,2 · · · aN,N bN
Existem dois tipos de matriz que ser˜ao muito ´uteis na solu¸c˜ao de sistemas lineares e que ser˜ao muito utilizadas ao longo das descri¸c˜oes dos m´etodos−s˜ao as matrizes triangular e escalonada.
No primeiro tipo, a matriz tem dimens˜ao N×N e os elementos abaixo ou acima da diagonal principal s˜ao identicamente nulos. Se for abaixo, a matriz ´e chamada de triangular superior; se for acima, de triangular inferior. As matrizesP eQ, a seguir, s˜ao matrizes triangulares superior e inferior respectivamente.
P =
a1,1 a1,2 a1,3 · · · a1,N−1 a1,N 0 a2,2 a2,3 · · · a2,N−1 a2,N 0 0 a2,3 · · · a3,N−1 a3,N ..
. ... ... ... ... 0 0 0 · · · aN−1,N−1 aN−1,N 0 0 0 · · · 0 aN,N
Q=
a1,1 0 0 · · · 0 0
a2,1 a2,2 0 · · · 0 0
a3,1 a3,2 a3,3 · · · 0 0
..
. ... ... ... ...
aN−1,1 aN−1,2 aN−1,3 · · · aN−1,N−1 0
aN,1 aN,2 aN,3 · · · aN,N−1 aN,N
Na matriz escalonada, a matriz n˜ao precisa ter necessariamente o n´umero de linhas igual ao n´umero de colunas, basta que ela tenha a forma de uma escada onde a parte superior ou a inferior s˜ao identicamente nulas.
Suponha o seguinte sistema linear:
S=
2x1 + 3x2 − x3 = 5
4x2 − 3x3 = 5
x3 = −1
1.2. M´ETODOS DIRETOS
ˆ S=
2 3 −1 5 4 −3 5 1 −1
Repare que a solu¸c˜ao do sistema linear pode ser obtido por simples substitui¸c˜ao regressiva. Primeiro calcula-se o valor dex3. Depois, aplica-se o valor dex3na equa¸c˜ao acima e determina-se o valor dex2. Por fim, aplicando-se
os valores dex3 ex2 na primeira equa¸c˜ao, calcula-se o valor dex1.
Se, atrav´es de opera¸c˜oes elementares, for poss´ıvel obter-se uma matriz escalonada de uma matriz ampliada qualquer, a solu¸c˜ao do sistema linear associado `a esta matriz ampliada estar´a garantida.
1.1.2
Opera¸
c˜
oes Elementares
S˜ao trˆes as opera¸c˜oes elementares que podem atuar sobre as linhas de uma matriz:
i. Permuta¸c˜ao entre linhas. A opera¸c˜ao de permuta¸c˜ao dai-´esima linha pelaj-´esima linha ´e descrita como: Li↔Lj
ii. Multiplica¸c˜ao de uma linha por um escalar n˜ao nulo. A opera¸c˜ao de multiplica¸c˜ao da i-´esima linha pela constantek´e:
Li ←kLi
iii. Substitui¸c˜ao de uma linha pela soma dela mesma com outra linha. A opera¸c˜ao de substitui¸c˜ao dai-´esima linha pela soma dela com a j-´esima linha multiplicada pork´e:
Li←Li+kLj
Ap´os um n´umero finito de opera¸c˜oes elementares sobre uma matrizP qualquer, obt´em-se uma outra matriz Qque ´e dita serequivalente `aP. Se a matrizP ´e uma matriz ampliada e representa um sistema linear, ent˜aoQ tamb´em ser´a uma matriz ampliada e representar´a um outro sistema dito ser equivalente ao primeiro sistema. A equivalˆencia entre sistemas implica em uma outra observa¸c˜ao:
“Se dois sistemas s˜ao equivalentes, ent˜ao as solu¸c˜oes dos dois sistemas s˜ao idˆenticas.”
Deste ponto em diante, ser˜ao apresentados os m´etodos matem´aticos e computacionais para a solu¸c˜ao de um sistema de equa¸c˜oes lineares.
1.2
M´
etodos Diretos
1.2.1
M´
etodo de Gauss
Descri¸c˜ao
O objetivo do m´etodo de Gauss (tamb´em chamado de elimina¸c˜ao gaussiana) ´e transformar a matriz ampliada original de um sistema linear em uma matriz escalonada atrav´es de opera¸c˜oes lineares.
Para explicar o m´etodo, considere o seguinte sistema linear:
S=
x1 + 3x2 + x3 = 0 −x1 + 3x2 + 3x3 = 5
x1 −2x2 + x3 = 1
A matriz ampliada deste sistema ´e:
ˆ S=
1 3 1 0
−1 3 3 5 1 −2 1 1
O primeiro passo para torn´a-la escalonada ´e anular o 2oe o 3oelementos da 1acoluna. ´E f´acil observar que, se
a 2a linha for substitu´ıda pela soma da 1a linha com a 2a, o 2o elemento da 1a coluna ser´a zero. E para obter-se zero no lugar do 3o elemento, basta substituir a 3alinha pela soma da 3a com a 1a multiplicada por−1.
1.2. M´ETODOS DIRETOS
1. estabelece-se o 1o elemento da 1acoluna (elementoa
1,1= 1) comopivot(elemento chave);
2. calcula-se um multiplicador para o 2o elemento da coluna (elementoa
2,1=−1) segundo a f´ormula
m2,1=− a2,1
pivot =−
−1 1 = 1 3. substitui-se a 2alinha (L
2) pela soma da 1alinha (L1, linha dopivot) multiplicada porm2,1com a 2a(L2):
L2+m2,1L1→L2
4. calcula-se um multiplicador para o 3o elemento da coluna (elementoa
3,1= 1):
m3,1=−
a3,1
pivot =− 1 1 =−1 5. substitui-se a 3alinha (L
3) pela soma da 1alinha (L1, linha dopivot) multiplicada porm3,1com a 3a(L3):
L3+m3,1L1→L3
Matricialmente, tem-se que
ˆ S=
1 3 1 0
−1 3 3 5 1 −2 1 1
L2+ (1)L1→L2
L3+ (−1)L1→L2
1 3 1 0
0 6 4 5
0 −5 0 1
Para completar a forma escalonada, ´e necess´ario que o 3oelemento da 2acoluna (a
3,2=-5) seja nulo. Fixando-se
o elementoa2,2comopivot, calcula-se o multiplicadorm3,2,
m3,2=−
a3,2
pivot =−
−5 6 =
5 6
Por fim, substitui-se a 3alinha pela soma da 2a (linha dopivot) multiplicada porm
3,2 com a 3a:
L3+m3,2L2→L3
O resultado ´e a matriz escalonada equivalente `a matriz ampliada original do sistema. Sistematizando, 1. estabelece-se o 2o elemento da 2acoluna (elementoa2,2= 6) comopivot;
2. calcula-se um multiplicador para o 3o elemento da coluna (elementoa
3,2=−5)
m3,2=−
a3,2
pivot =−
−5 6 =
5 6
3. substitui-se a 3a linha (L3) pela soma da 2alinha (L2, linha dopivot) multiplicada porm3,2 com a 3a(L3)
L3+m3,2L2→L3
Na representa¸c˜ao matricial:
ˆ S=
1 3 1 0
0 6 4 5
0 −5 0 1
L3+ 56
L2→L3
1 3 1 0
0 6 4 5
0 0 103 316
Retornando para a representa¸c˜ao de sistema linear a partir da matriz escalonada, o c´alculo da inc´ognita x3
torna-se imediato. E por substitui¸c˜ao regressiva, as demais inc´ognitas (x2 ex1) podem ser computadas.
ˆ S=
x1 + 3x2 + x3 = 0
6x2 + 4x3 = 5 10
3x3 = 31 6 =⇒
x3= 3120
x2= 16
5−4 3120=−15
1.2. M´ETODOS DIRETOS
Algoritmo e Complexidade
A partir do exemplo, o m´etodo de Gauss pode ser generalizado para um sistema deN equa¸c˜oes eN inc´ognitas. Observe que os elementos da diagonal principal da matriz de coeficientes sempre ser˜ao ospivot’s, caso contr´ario n˜ao se obter´a uma forma escalonada. Os elementos da matriz ampliada que ser˜ao “zerados” sempre est˜ao abaixo dospivot’s (dentro de suas colunas correspondentes).
SejaS um sistema de equa¸c˜oes lineares como o apresentado abaixo
S=
a1,1x1 + a1,2x2 + · · · + a1,jxj +· · · + a1,NxN = b1
a2,1x1 + a2,2x2 + · · · + a2,jxj +· · · + a2,NxN = b2
..
. ... · · · ... ... ... ai,1x1 + ai,2x2 + · · · + ai,jxj +· · · + ai,NxN = bi
..
. ... · · · ... ... ... aN,1x1 + aN,2x2 + · · · +aN,jxj +· · · + aN,NxN = bN
e a matriz ampliada do sistemaS
ˆ S=
a1,1 a1,2 · · · a1,j · · · a1,N b1
a2,1 a2,2 · · · a1,j · · · a2,N b2
..
. ... ... ... ... ai,1 ai,2 · · · ai,j · · · ai,N bi
..
. ... ... ... ... aN,1 aN,2 · · · a1,j · · · aN,N bN
O algoritmo que descreve o procedimento de escalonamento da matriz ampliada do sistema e a substitui¸c˜ao regressiva ´e
Algoritmo 1.1:M´etodo de Gauss Dados:
: {comentario}
Entrada:
: {comentario}
Sa´ıda:
: {comentario}
{escalonar a matriz ampliada do sistema}
paraj de 1 at´eN fa¸ca pivot←aj,j
paraide j+ 1 at´eN fa¸ca mi,j← − ai,j
pivot {(N+ 1) divis~oes}
Li←Li+mi,jLj {N somas e N produtos}
fim para fim para
{aplicar substitui¸c~ao regressiva}
paraide N at´e1 passo −1 fa¸ca xi← 1
ai,i
bi−
i+1
X
j=N ai,jxj
{N divis~oes e N
2−N
2 subtra¸c~oes} fim para
A complexidade do escalonamento da matriz ampliada ´e deve ser verificada acompanhado-se o algoritmo. Sabe-se que cada opera¸c˜ao de linha para anular um elemento envolveN+ 1 divis˜oes,Nsomas eN produtos. Para cada multiplicador, opera-se uma linha inteira. Portanto, o n´umero total de opera¸c˜oes do processo de escalonamento depende da estimativa de quantos multiplicadores ser˜ao calculados. Na 1a coluna, s˜ao (N−1) multiplicadores. Na 2a coluna, s˜ao (N−2) multiplicadores. Na ´ultima coluna, n˜ao h´a multiplicador (0 multiplicadores). Logo, o total de multiplicadores pode ser estimado pela s´erie
N
X
j=1
(N−j) = N
2−N
1.2. M´ETODOS DIRETOS
Consequentemente, o n´umero total de opera¸c˜oes ser´a N2−N
2 multiplicadores ×(N+ 1 divis˜oes +N somas +N produtos) =
= N
2−N
2 (3N+ 1) =
3N3−3N2+N2−N
2 =
= 3N
3−2N2−N
2 =O(N
3)
Faltou a complexidade da substitui¸c˜ao regressiva: s˜aoN divis˜oes mais (N2−N)/2 subtra¸c˜oes para calcular
todas as N inc´ognitas. O total de opera¸c˜oes da substitui¸c˜ao regressiva ´e da ordem O(N2). Conclui-se que a
complexidade do m´etodo de Gauss ´e da ordemO(N3) pois o processo de escalonamento ´e mais “pesado” que a
substitui¸c˜ao regressiva.
1.2.2
M´
etodo de Jordan
Descri¸c˜ao
Alguns autores apresentam o m´etodo de Gauss como sendo aquele que transforma a matriz ampliada em uma matriz escalonada equivalente. Outros v˜ao um pouco mais al´em e continuam operando sobre a matriz escalonada at´e que ela se torne uma matriz diagonal equivalente. Para o primeiro grupo de autores, este procedimento adicional caracteriza um novo m´etodo chamado de M´etodo de Jordan.
Portanto, o objetivo do m´etodo de Jordan ´e transformar a matriz ampliada em uma matriz diagonal equivalente. Esta matriz se caracteriza por ter a diagonal principal da matriz de coeficientes identicamente unit´aria, isto ´e, uma matriz identidade. Repare que se a matriz equivalente, resultado das opera¸c˜oes elementares sobre as linhas, for identidade, o passo final de substitui¸c˜ao regressiva torna-se desnecess´ario, pois os valores das inc´ognitas poderiam ser visualizados diretamente.
Resumindo, o m´etodo de Jordan apresenta diretamente a solu¸c˜ao do sistema de equa¸c˜oes lineares ap´os opera¸c˜oes elementares sobre a matriz ampliada. Matricialmente, isto significa:
ˆ A=
a1,1 a1,2 · · · a1,N b1
a2,1 a2,2 · · · a2,N b2
..
. ... . .. ... ... aN,1 aN,2 · · · aN,N bN
→
1 0 · · · 0 r1
0 1 · · · 0 r2
..
. ... . .. ... ... 0 0 · · · 1 rN
onderi´e a pr´opria solu¸c˜ao do sistema: x1=r1,x2=r2,. . .
Trˆes modifica¸c˜oes devem ser feitas no m´etodo de Gauss para convertˆe-lo no m´etodo de Jordan: (a) substituir a linha dopivot por ela mesma dividida pelo seupivot,
(b) anular os demais elementos da coluna dopivot (diferente do m´etodo de Gauss que s´o anulava os elemento abaixo dopivot),
(c) e eliminar a substitui¸c˜ao regressiva.
O procedimento geral para o m´etodo de Jordan ´e aplicado `a um sistema deN equa¸c˜oes eN inc´ognitas: 1. para cada coluna j= 1,2, . . . , N
2. estabelecer aj,j comopivot
3. normalizar a linha do pivot(Lj) pelopivot 4. para cada linha Li,i= 1,2, . . . , N ei6=j
5. estabelecer o multiplicador mi,j como−ai,j/pivot(diferente do m´etodo de Gauss) 6. substituirLi porLi+mi,jLj
Considere o mesmo sistema linear apresentado no m´etodo de Gauss:
S=
x1 + 3x2 + x3 = 0 −x1 + 3x2 + 3x3 = 5
1.2. M´ETODOS DIRETOS
A matriz ampliada deste sistema ´e:
ˆ S=
1 3 1 0
−1 3 3 5 1 −2 1 1
Primeiro, na 1a coluna, o pivotj´a ´e unit´ario (nada a fazer). Segundo, o multiplicador da 2a linha (coluna do pivot) ´e unit´ario tamb´em, e o multiplicador da 3a linha ´e−1. Ent˜ao, a 2a linha ser´a substitu´ıda pela soma dela mesma com a linha dopivot(L1). A 3a linha ser´a substitu´ıda pela subtra¸c˜ao dela mesma pela linha do pivot.
ˆ S=
1 3 1 0
−1 3 3 5 1 −2 1 1
L2+ (+1)L1→L2
L3+ (−1)L1→L3
1 3 1 0
0 6 4 5
0 −5 0 1
Para a 2a coluna, opivot´e o elementoa
2,2= 6. NormalizandoL2, a matriz ampliada se torna
ˆ S=
1 3 1 0
0 6 4 5
0 −5 0 1
L2
pivot→L2
1 3 1 0
0 1 23 56 0 −5 0 1
Agora, diferente do m´etodo de Gauss, deve-se anular o 1o elemento da 2a coluna. O multiplicador m
1,2 vale −3. A 1a linha (L
1) ser´a substitu´ıda porL1+ (−3)L2:
ˆ S=
1 3 1 0
0 1 2
3 5 6
0 −5 0 1
L1+ (−3)L2→L1
1 0 −1 −52
0 1 2
3 5 6
0 −5 0 1
Para anular o 3oelemento da 2a coluna (−5), o procedimento ´e similar: o multiplicadorm+ 3,2 vale 5. Assim, a 3a linha (L
3) ser´a substitu´ıda porL3+ (5)L2.
ˆ S=
1 0 −1 −5 2
0 1 23 56 0 −5 0 1
L3+ (+5)L2→L3
1 0 −1 −5 2
0 1 23 56 0 0 10
3 31 6
Duas colunas j´a est˜ao na forma de Jordan. A 3a coluna ser´a tratada da segundo os mesmos procedimentos: o pivot´ea3,3= 10/3.
ˆ S=
1 0 −1 −52
0 1 2
3 5 6
0 0 103 316
L3
pivot→L3
1 0 −1 −52
0 1 2
3 5 6
0 0 1 3120
O multiplicador de 1a linha ´e 1 e da 2a linha ´e−2 3. A 1
a linha ser´a substitu´ıda porL
1+ (1)L3 e 2a linha por
L2+ −23
L3.
ˆ S=
1 0 −1 −5 2
0 1 23 56 0 0 1 31 20
L1+ (+1)L3→L1
L2+ −23L3→L2
1 0 0 −19 20
0 1 0 −15
0 0 1 31
20
Retornando `a representa¸c˜ao de sistema linear, ´e poss´ıvel observar a solu¸c˜ao direta obtida pelo m´etodo de Jordan. S=
x1 + 3x2 + x3 = 0 −x1 + 3x2 + 3x3 = 5
x1 − 2x2 + x3 = 1
=⇒
x1 =−1920
x2 = −15
1.2. M´ETODOS DIRETOS
Algoritmo e Complexidade
A complexidade do m´etodo de Jordan ´e deduzida de forma mais direta que a do m´etodo de Gauss: s˜aoN colunas; para cada coluna s˜ao (N−1) multiplicadores; cada opera¸c˜ao de linha envolveNsomas e (N+1) produtos; e, para normalizar a linha dopivot, s˜ao calculados (N+ 1) divis˜oes. Organizando tudo isso:
N colunas×[(N+ 1) divisoes + (N−1) linhas×(N somas +(N+ 1) produtos )] = =N[(N+ 1) + (N−1) (2N+ 1)] =N(N+ 1) + 2N2−N−1=
=N 2N2= 2N3=O N3
algoritmo Jordan
{escalonar a matriz ampliada do sistema}
paracada coluna jde 1ateN,fazer pivot←aj,j
Lj ← Lj
pivot {(N+ 1) divis˜oes} paracada linhai de1ateN, (i6=j),fazer
mi,j← −ai,j
Li←Li+mi,jLj {N somas e (N+ 1) produtos}
fim para fim para
fim Jordan
1.2.3
M´
etodo da Matriz Inversa
Descri¸c˜ao
Duas outras formas de se resolver um sistema de equa¸c˜oes lineares est˜ao baseadas na invers˜ao de matrizes. Na representa¸c˜ao matricial, um sistema linear corresponde ao produto de matrizes:
A·X=B
Se a matrizAfor invers´ıvel, a solu¸c˜ao do sistema pode ser obtido pela equa¸c˜ao matricial X=A−1·B
O primeiro m´etodo, chamado de matriz inversa, usa um processo expl´ıcito de invers˜ao da matriz de coeficientes para depois multiplicar pela matriz de termos independentes. O segundo m´etodo, conhecido por Regra de Cramer, tamb´em est´a baseado na invers˜ao da matriz de coeficientes, mas n˜ao a produz explicitamente. Na se¸c˜ao seguinte, a regra de Cramer ser´a apresentada com mais detalhes.
O processo de invers˜ao utilizado neste m´etodo est´a baseado na rec´ıproca do seguinte teorema:
Teorema: Se a matriz de coeficientes A ´e invers´ıvel, a sua matriz equivalente ˆA mais simples ´e uma matriz identidadeI. Isto significa que a matrizA´e um produto de opera¸c˜oes matriciais elementares:
I = Ek·Ek−1· · · · ·E2·E1·A
= (Ek·Ek−1· · · · ·E2·E1·I)·A
ou seja,
Ek·Ek−1· · · · ·E2·E1·I=A−1
A rec´ıproca:
1.2. M´ETODOS DIRETOS
Na pr´atica, opera-se simultaneamente as matrizesAeIatrav´es de opera¸c˜oes elementares num formato similar ao da matriz ampliada (justapondo as matrizesAeI lado-a-lado):
(A|I)←→ I|A−1
Para exemplificar o m´etodo, assuma o sistema linear apresentado na se¸c˜ao anterior:
S=
x1 + 3x2 + x3 = 0 −x1 + 3x2 + 3x3 = 5
x1 − 2x2 + x3 = 1
=⇒ A=
1 3 1
−1 3 3 1 −2 1
sendoAa matriz de coeficientes. Justapondo a matrizAe a matriz identidade, obt´em-se:
1 3 1 1 0 0
−1 3 3 0 1 0 1 −2 1 0 0 1
Como resultado final do processo, onde se encontrava a matrizA, agora se encontra a matriz identidadeI, e onde se encontrava a identidade, encontra-se agora a matriz inversa A−1.
1 0 0 0,45 −0,25 0,30 0 1 0 0,20 0 −0,20 0 0 1 −0,05 0,25 0,30
Algoritmo e Complexidade
O procedimento para invers˜ao ´e idˆentico ao do m´etodo de Jordan. S´o ´e preciso acrescentar o procedimento de multiplica¸c˜ao de matriz por vetor.
algoritmo Matriz Inversa
{escalonar a matriz ampliada do sistema}
paracada coluna jde 1ateN,fazer pivot←aj,j
Lj ← Lj
pivot
paracada linhai de1ateN, (i6=j),fazer mi,j← −ai,j
Li←Li+mi,jLj {(2N−1) somas e 2N produtos}
fim para fim para
paracada linha ide1 ateN,fazer xi ←
N
X
j=1
ai,jbj {(N−1) somas eN produtos}
fim para
fim Matriz Inversa
A complexidade do m´etodo da Matriz Inversa, assim como o procedimento para invers˜ao, tamb´em ´e idˆentica ao do m´etodo de Jordan: O N3. Sugest˜ao de exerc´ıcio: demonstre a complexidade do m´etodo da Matriz Inversa
´eO N3.
1.2.4
M´
etodo de Cramer
Descri¸c˜ao
Antes de apresetar o m´etodo de Cramer para calcular a solu¸c˜a de um sistema linear, ser´a apresentada uma BREVE recorda¸c˜ao sobre determinantes, cofatores e matrizes adjuntas.
1.2. M´ETODOS DIRETOS
det (A) =|A|=X N!
(−1)Ja1,j1a1,j2· · ·a1,jN
ondeJ ´e o n´umero de invers˜oes da permuta¸c˜ao (j1, j2,· · · , jN). Observe que o somat´orio temN! termos que ´e o
n´umero de permuta¸c˜oes poss´ıveis paraN n´umeros.
O c´alculo do determinante de uma matriz quadradaApode ser simplificada (conceitualmente, mas n˜ao com-putacinalmente) pelo uso dos cofatores. Por defini¸c˜ao, o cofator (ou complemento alg´ebrico do elemento ai,j) ´e um n´umero calculado pela express˜ao
∆i,j = (−1)i+j|Ai,j|
ondeAi,j ´e a submatriz da matrizAde onde ai-´esima linha e aj-´esima coluna foram retiradas.
A partir da defini¸c˜ao de cofator, o determinante de uma matriz quadradaAN,Npode ser simplificada `a seguinte express˜ao:
det (A) =|A|= N
X
j=1
ai,j∆i,j
Observe que o ´ındicei, referente a linha, fica livre para o leitor fixar. Esta forma ´e similar para colunas:
det (A) =|A|= N
X
i=1
ai,j∆i,j
Com estes cofatores, forma-se uma nova matriz ¯Adenominada matriz de cofatores deA:
cof (A) = ¯A= [∆i,j] =
∆1,1 ∆1,2 · · · ∆1,N ∆2,1 ∆2,2 · · · ∆2,N
..
. ... . .. ... ∆N,1 ∆N,2 · · · ∆N,N
A transposta da matriz de cofatores ´e chamada de matriz adjunta:
adj (A) = ¯At=
∆1,1 ∆2,1 · · · ∆N,1
∆1,2 ∆2,2 · · · ∆N,2
..
. ... . .. ... ∆1,N ∆N,2 · · · ∆N,N
A matriz adjunta adj (A) da matriz quadradaAN,N est´a relacionada `a inversaA−1segundo a express˜ao
A−1= adj (A)
det (A)
Isso implica que s´o existe inversa da matrizAse, e somente se, o determinante deAfor diferente de zero. Voltando a forma matricial do sistema linear, tem-se que:
A·X =B⇒X =A−1·B =adj (A) det (A)·B
x1 x2 .. . xN = 1 det (A)
∆1,1 ∆2,1 · · · ∆N,1
∆1,2 ∆2,2 · · · ∆N,2
..
. ... . .. ... ∆1,N ∆N,2 · · · ∆N,N
· b1 b2 .. . bN Ent˜ao,
x1=b1∆1,1+b2∆2,1+· · ·+bN∆N,1
1.3. M´ETODOS ITERATIVOS = 1 det (A) N X i=1
bi∆i,1=
b1 a1,2 · · · a1,N b2 a2,2 · · · a2,N
..
. ... . .. ... bN a2,N · · · aN,N
a1,1 a1,2 · · · a1,N a2,1 a2,2 · · · a2,N
..
. ... . .. ... aN,1 a2,N · · · aN,N
De forma an´aloga, as outras solu¸c˜oes podem ser obtidas colocando-se o vetor de termos independentesBna coluna correspondente ao ´ındicek da vari´avel inc´ognitaxk:
xk =b1∆1,k+b2∆2,k+· · ·+bN∆N,k
det (A) =
= 1 det (A) N X i=1 bi∆i,k=
a1,1 · · · a1,k−1 b1 a1,k+1 · · · a1,N a2,1 · · · a2,k−1 b2 a2,k+1 · · · a2,N
..
. ... ... ... ... aN,1 · · · aN,k−1 bN aN,k+1 · · · aN,N
a1,1 a1,2 · · · a1,N a2,1 a2,2 · · · a2,N
..
. ... . .. ... aN,1 a2,N · · · aN,N
Algoritmo e Complexidade
O grande complicador do m´etodo de Cramer ´e o n´umero de opera¸c˜oes envolvido na computa¸c˜ao da solu¸c˜ao do sistema de equa¸c˜oes lineares. No c´alculo do determinante de uma matriz quadradaN×N, tem-seN! produtos de N elementos cada (total deN!(N−1) produtos) e maisN!−1 somas. S´o em opera¸c˜oes elementares, s˜aoN!N−1. Se o sistema possui N inc´ognitas, ser˜ao no totalN + 1 determinantes a serem computados. Isto significa que, ao final do m´etodo, (N+ 1)(N!N−1) opera¸c˜oes teriam sido realizados. Isto ´e da ordemO N!N2. SeN for 5: (5!)52= 3000 opera¸c˜oes. SeN for 8: (8!)82≈2,581 milh˜oes de opera¸c˜oes. “´E conta pr´a chuchu!!!”.
Por isso, o c´alculo do determinante deve ser repensado para fugir deste “gargalo”. Uma sa´ıda simples ´e utilizar uma matriz equivalente no lugar da matriz original. Se a matriz equivalente for uma matriz triangular superior, escalonada superior ou diagonal principal, o determinante ser´a simplesmente o produto dos termos da diagonal principal. Nesta sa´ıda simples, foram econimizados (N!−1)(N−1) produtos. Para gerar uma matriz equivalente na forma escalonada, pode-se usar o m´etodo de Gauss.
O algoritmo para o m´etodo de Cramer ser´a ent˜ao:
algoritmo Cramer
calcular o determinante da matriz de coeficientesA: detA paracada inc´ognitaxk parakde 1ateN,fazer
substituir ak-´esima coluna da matrizApelo vetor de termos independentesB
calcular o determinante da matriz resultante: detCk xk ← detCk
detA fim para
fim Cramer
1.3
M´
etodos Iterativos
1.3. M´ETODOS ITERATIVOS
este pensamento `a solu¸c˜ao de sistemas de equa¸c˜oes lineares por processos iterativos, significa dizer que a cada itera¸c˜ao, o vertor solu¸c˜aoX(k)tende `a solu¸c˜ao exata do sistemaX.
Em termos pr´aticos, isto quer dizer que a solu¸c˜aoX(k+1)est´a mais pr´oxima da solu¸c˜ao exataX que a solu¸c˜ao
X(k). E que a solu¸c˜aoX(k+2) est´a mais pr´oxima de X que a solu¸c˜aoX(k+1). Neste processo iterativo, com k
tendendo ao infinito, a solu¸c˜ao exata do sistema seria atingida. lim
k→∞X
(k)=X
Obviamente, ningu´em quer implementar um m´etodo que nunca termine. Por isso, todo processo iterativo ´e desenvolvido dispondo-se de crit´erios de parada: ou um limite para o n´umero de itera¸c˜oes ou uma precis˜ao m´ınima a ser atingida.
1.3.1
Convergˆ
encia para a Solu¸
c˜
ao
Os processos iterativos de resolu¸c˜ao de sistemas de equa¸c˜oes lineares partem da seguinte formula¸c˜ao: “Seja A a matriz de coeficientes de um sistema linear, B o vetor de termos independentes deste sistema e X o vetor de inc´ognitas ou vetor solu¸c˜ao tamb´em deste sistema. Ent˜ao, o sistema linear ´e representado matricialmente por:
A·X=B
Se Apuder ser decomposta em duas outras matrizesP eQtal queA= (P−Q) eP seja invers´ıvel, ent˜ao o sistema linear pode ser reescrito como:
A·X = (P−Q)·X=P·X−Q·X =B⇒ ⇒P·X =Q·X+B⇒X =P−1·Q·X+P−1·B
Partindo-se de uma aproxima¸c˜ao inicialX(0)e renomeandoP−1·QparaF eP−1·BparaD, obt´em-se
que:
X(1) = F·X(0)+D X(2) = F·X(1)+D
.. .
X(k) = F·X(k−1)+D sendo esta ´ultima equa¸c˜ao a equa¸c˜ao de itera¸c˜ao.”
Mas para que o processo iterativo venha a convergir para uma solu¸c˜ao aproximada do sistema, a matrizF deve satisfazer uma condi¸c˜ao espec´ıfica. Antes de apresentar esta condi¸c˜ao, ´e necess´ario estabelecer algumas defini¸c˜oes e teoremas.
Defini¸c˜ao: Define-senorma da matriz AR,S, simbolizado porkAk, o n´umero n˜ao negativo
kAk= max
1≤i≤R S
X
j=1 |ai,j|
Exemplo:
A=
−3 2 4 −2
ent˜aokAk= max{|−3|+|2|,|4|+|−2|}= max{5,6}= 6
Teorema: SeA´e uma matriz quadrada tal quekAk<1, ent˜ao todos os seus autovalores tˆem m´odulo menor que 1.
Uma breve recorda¸c˜ao: numa progress˜ao geom´etrica, se|a|<1, ent˜ao
∞
X
k=0
1.3. M´ETODOS ITERATIVOS
Teorema: SeA´e uma matriz quadrada diagonaliz´avel, ent˜aoApode ser rescrita comoA=Q·D·Q−1, ondeQ
´e a matriz de autovetores eD, a matriz de autovalores.
A=Q·
λ1 0 · · · 0
0 λ2 · · · 0
..
. ... . . . 0 0 0 · · · λ2
·Q−1
Teorema: Se A ´e uma matriz quadrada tal que todos os seus autovalores tˆem m´odulo menor que 1, ent˜ao lim
k→∞A
k= 0 (aqui,k´e expoente e n˜ao ´ındice de itera¸c˜ao).
Ak =Q·
λ1 0 · · · 0
0 λ2 · · · 0
..
. ... . .. ... 0 0 · · · λi
k
·Q−1=Q·
λk
1 0 · · · 0
0 λk
2 · · · 0
..
. ... . .. ... 0 0 · · · λk
i
·Q−1
Se todos os autovalores λi tˆem m´odulo menor que 1, ent˜ao lim k→∞A
k = 0. Al´em disso,
∞
X
k=0
Ak = (I−A)−1
(similar `a progress˜ao geom´etrica).
Voltando ao processo iterativo, a equa¸c˜ao de itera¸c˜ao tem a forma:
X(1)=F·X(0)+D
X(2)=F·X(1)+D=F·(F·X(0)+D) +D =F2·X(0)+ (I+F)·D
X(3)=F·X(2)+D=F·(F2·X(0)+ (I+F)·D) +D=
=F3·X(0)+ (I+F+F2)·D Por indu¸c˜ao matem´atica,
X(k)=Fk−1·X(0)+ (I+F+F2+. . .+Fk−2)·D Levando este resultado ao limite dek tendendo ao infinito e lembrando que lim
k→∞X
(k)=X, onde X ´e a solu¸c˜ao
exata do sistema, tem-se que X= lim
k→∞X
(k)= lim
k→∞F
k−1
| {z }
=0
·X(0)+ (I+F+F2+. . .+Fk−2+. . .)
| {z }
=(I−F)−1
·D
assumindo que a matrizF possui autovalores com m´odulo menor que 1. E para isso, a norma deF deve ser menor que 1 (kFk<1).
Desta forma, a condi¸c˜ao necess´aria para que o processo iterativo venha a convergir para a solu¸c˜ao do sistema linear ´e encontrar as matrizesP eQtal queP seja invers´ıvel e que P−1·Q<1.
Duas combina¸c˜oes de P’s eQ’s s˜ao muito utilizadas. Na primeira, a matriz A´e decomposta em uma matriz P contentdo somente a diagonal principal e uma matrizQcom o restante dos elementos. O processo que utiliza estas matrizes ´e chamada de m´etodo de Jacobi. A segunda combina¸c˜ao ´e a decomposi¸c˜ao de A em uma matriz P que ´e triangular inferior (incluindo a diagonal principal) e em uma matrizQque ´e triangular superior (sem a diagonal). Quando o processo iterativo usa estas duas matrizes, ele ´e chamado de m´etodo de Gauss-Seidel. Obs.: como j´a foi mencionado, um dos crit´erios de parada ´e o n´umero de itera¸c˜oes. Quando o n´umero de itera¸c˜oes atinge um limite pr´e-estabelecido, o processo para e o ´ultimo vetorX´e tomado como a solu¸c˜ao do sistema. Outro crit´erio ´e a precis˜ao das aproxima¸c˜oes. Se a maior diferen¸ca em m´odulo entre duas aproxima¸c˜oes sucessivas for menor que uma tolerˆanciaǫ dada, ent˜ao o processo para. Isto pode ser apresentado como a norma da diferen¸ca de duas aproxima¸c˜oes:
X(
k+1)−X(k)
= max1≤i≤N n
x
(k+1)
i −x
(k)
1.3. M´ETODOS ITERATIVOS
1.3.2
M´
etodo de Jacobi
Descri¸c˜ao
Se
A=
a1,1 · · · a1,N ..
. ... aN,1 · · · aN,N
comai,i6= 0, i= 1, . . . , N, ent˜ao, uma decomposi¸c˜ao que atende ao quisito de uma matrizF tal quekFk<1 ´e
A=
a1,1 0 · · · 0
0 a2,2 · · · 0
..
. ... . .. ... 0 0 · · · aN,N
+
0 a1,2 · · · a1,N a2,1 0 · · · a2,N
..
. ... . .. ... aN,1 aN,2 · · · 0
=P+ (−Q)
´
E fato que a matrizP ´e diagonal e invers´ıvel e que sua inversa ´e
P−1=
a1,1 0 · · · 0
0 a2,2 · · · 0
..
. ... . .. ... 0 0 · · · aN,N
−1 =
a−1,11 0 · · · 0
0 a−2,12 · · · 0
..
. ... . .. ... 0 0 · · · a−N,N1
E sendoQa matriz
Q=
0 −a1,2 · · · −a1,N
−a2,1 0 · · · −a2,N ..
. ... . .. ...
−aN,1 −aN,2 · · · 0
ent˜ao, a matrizF =P−1·Qe o vetor D=P−1·B ser˜ao
F =
0 −a1,2
a1,1
· · · −a1,N
a1,1 −a2,1
a2,2
0 · · · −a2,N
a2,2
..
. ... . .. ...
−aN,1
aN,N − aN,2
aN,N · · · 0
D= b1
a1,1
b2
a2,2
.. . bN aN,N
A condi¸c˜aokFk<1 para a convergˆencia do processo iterativo ´e ent˜ao que
−
a1,2
a1,1
+· · ·+ −
a1,N a1,1
<1 −
a2,1
a2,2
+· · ·+ −
a2,N a2,2
<1 · · · − aN,1 aN,N +· · ·+ −
aN,N−1
aN,N
<1
1.3. M´ETODOS ITERATIVOS
Algoritmo e Complexidade
Algoritmo Jacobi fazer,
X(k+1)=F·X(k)+D {N×[N+ (N−1)]}
seX(k+1)−Xk< ǫouitera¸c˜oes > limiteent˜ao parar
fim se fim fazer fim Jacobi
Para os processos iterativos, a complexidade se refere apenas ao custo das opera¸c˜oes em uma itera¸c˜ao, uma vez que n˜ao ´e conhecido previamente o total itera¸c˜oes. No m´etodo de Jacobi, a principal opera¸c˜ao ´e a itera¸c˜ao propriamente dita. Cada itera¸c˜ao envolveN produtos de linha da matriz F pelo vetor de aproxima¸c˜oes X(k).
Cada produto de linha por coluna custaN produtos entre elementos e (N−1) somas. Portanto,O(N2). A norma
da diferen¸ca das aproxima¸c˜oes tem complexidade linear,O(N) e n˜ao interfere na complexidade final.
1.3.3
M´
etodo de Gauss-Seidel
Descri¸c˜ao
A matrizApode ser decomposta de uma outra forma: duas matrizes triangulares, uma contendo a diagonal principal (matriz P) e a outra com os elementos restantes (matriz −Q):
A=
a1,1 0 · · · 0 0
a2,1 a2,2 · · · 0 0
..
. ... . .. ... 0 aN−1,1 aN−1,2 · · · aN−1,N−1 0
aN,1 aN,2 · · · aN,N−1 aN,1
+
0 a1,2 · · · a1,N−1 a1,N 0 0 · · · a2,N−1 a1,N ..
. ... . .. ... ... 0 0 · · · 0 aN−1,N 0 0 · · · 0 0
=
=P+ (−Q)
O m´etodo que utiliza estas matrizes se chama Gauss-Seidel. Note que a matriz P ´e invers´ıvel pois seus elementos da diagonal n˜ao s˜ao nulos e a matriz ´e triangular inferior. Para garantir a convergˆencia do processo, a norma da matrizF =P−1·Qdeve ser menor que 1, o que implica na mesma condi¸c˜ao j´a imposta no m´etodo de
Jacobi: os elementos da diagonal em m´odulo deve ser maior que a soma dos demais valores da matriz que estejam na mesma linha (tamb´em em m´odulo).
Algoritmo e Complexidade
A complexidade do m´etodo Gauss-Seidel seria essencialmente o mesmo que a do Jacobi, ou seja,O N2se n˜ao
1.4. C ´ODIGOS-FONTE
1.4
C´
odigos-fonte
C´odigo-fonte 1.1: M´etodo de Gauss program SolucaoGauss
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Programa SolucaoGauss
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! P r o p o s i t o : Mostra a a p l i c a c a o do metodo de Gauss ! para s o l u c a o de um s i s t e m a de e q u a c o e s l i n e a r e s . !−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Autor : L u i s Fernando de O l i v e i r a Data : 03/10/2006 ! R e v i s a o :
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
i m p l i c i t none
integer : : p , q ! c o n t a d o r e s
integer : : n ! numero de e q u a c o e s ! m a t r i z de c o e f i c i e n t e s
real,a l l o c a t a b l e ,dimension( : , : ) : : a
! v e t o r de termos i n d e p e n d e n t e s
real,a l l o c a t a b l e ,dimension( : ) : : b
! v e t o r das r a i z e s
real,a l l o c a t a b l e ,dimension( : ) : : x
! a b r i r o a r q u i v o com os dados do s i s t e m a l i n e a r
open(unit=10 ,f i l e=” s i s t e m a . t x t ” ,action=” r e a d ” ,status=” o l d ” )
! l e r numero de e q u a c o e s e i n c o g n i t a s
read(unit=10 ,fmt=∗) n
print ∗, ”Numero de e q u a c o e s : ” , n a l l o c a t e( a ( n , n ) , b ( n ) , x ( n ) )
! l e r e l e m e n t o s do s i s t e m a l i n e a r
! os dados e s t a o o r g a n i z a d o s no a r q u i v o ! como s e q u e n c i a das c o l u n a s
read(unit=10 ,fmt=∗) a read(unit=10 ,fmt=∗) b c l o s e(unit=10)
! s a i d a com as e q u a c o e s do s i s t e m a l i n e a r ! ORIGINAL
print ∗
print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” print ∗, ” Equacoes do s i s t e m a l i n e a r o r i g i n a l ” print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” do p=1,n
do q=1,n−1
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a ) ” ,advance=”no” ) a ( p , q ) , ”x ( ” , q , ” ) + ”
end do
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a , f 6 . 2 ) ” ) a ( p , q ) , ”x ( ” , q , ” ) = ” , b ( p )
end do
c a l l Gauss ( n , a , b )
! s a i d a com as e q u a c o e s do s i s t e m a l i n e a r ! ESCALONADA
1.4. C ´ODIGOS-FONTE
print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” print ∗, ” Equacoes do s i s t e m a l i n e a r e s c a l o n a d o ” print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” do p=1,n
do q=1,n−1
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a ) ” ,advance=”no” ) a ( p , q ) , ”x ( ” , q , ” ) + ”
end do
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a , f 6 . 2 ) ” ) a ( p , q ) , ”x ( ” , q , ” ) = ” , b ( p )
end do
! e x e c u t a a s u b r o t i n a de s u b s t i t u i c a o r e g r e s s i v a ! e r e s o l v e o s i s t e m a l i n e a r
c a l l S u b s t R e g r e s s i v a ( n , a , b , x )
! s a i d a com os r e s u l t a d o s e n c o n t r a d o s
print ∗
print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−” print ∗, ” S o l u c a o do s i s t e m a l i n e a r ” print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−” do p=1,n
print ∗, ”x ( ” , p , ” ) = ” , x ( p ) end do
d e a l l o c a t e( a , b , x )
!−−−−−−−
contains
!−−−−−−−
subroutine S u b s t R e g r e s s i v a ( d , a , b , x )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! S u b r o t i n a S u b s t R e g r e s s i v a ( n , a , b , x )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! P r o p o s i t o : R e s o l v e r o p r o c e d i m e n t o de s u b s t i t u i c a o ! r e g r e s s i v a s o b r e uma m a t r i z e s c a l o n a d a s u p e r i o r ! Entrada :
! d : numerico , numero de e q u a c o e s e i n c o g n i t a s ! a : numerico , m a t r i z de c o e f i c i e n t e s
! b : numerico , v e t o r de termos i n d e p e n d e n t e s ! S a id a :
! x : numerico , v e t o r s o l u c a o
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Autor : L u i s Fernando de O l i v e i r a Data : 03/10/2006 ! R e v i s a o :
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
integer,intent(in) : : d
real,dimension( : , : ) ,intent(in) : : a real,dimension( : ) ,intent(in) : : b real,dimension( : ) ,intent(out) : : x
! v a r i a v e i s l o c a i s
integer : : i , j ! c o n t a d o r e s
r e a l : : soma ! a u x i l i a r de s o m a t o r i o
do i =0,d−1
! s o m a t o r i o
1.4. C ´ODIGOS-FONTE
soma = soma+a ( d−i , d−j )∗x ( d−j ) end do
! equacao i t e r a t i v a para c a l c u l a r as s o l u c o e s
x ( d−i ) = ( b ( d−i )−soma ) / a ( d−i , d−i ) end do
end subroutine S u b s t R e g r e s s i v a subroutine Gauss ( d , a , b )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! S u b r o t i n a Gauss ( d , a , b )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! P r o p o s i t o : Transformar a m a t r i z do s i s t e m a em uma ! m a t r i z e s c a l o n a d a .
! Entrada :
! d : numerico , numero de e q u a c o e s e i n c o g n i t a s ! Entrada e Sa i da :
! a : numerico , m a t r i z de c o e f i c i e n t e s
! b : numerico , v e t o r de termos i n d e p e n d e n t e s
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Autor : L u i s Fernando de O l i v e i r a Data : 03/10/2006 ! R e v i s a o :
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
integer,intent(in) : : d
real,dimension( : , : ) ,intent(inout) : : a real,dimension( : ) ,intent(inout) : : b integer : : i , j , k ! c o n t a d o r e s
r e a l : : p i v o t ! e l e m e n t o ch ave
r e a l : : m ! m u l t i p l i c a d o r da l i n h a
do j =1,d
! f i x a r o p i v o t
p i v o t = a ( j , j ) do i=j +1,d
! c a l c u l a r o m u l t i p l i c a d o r da l i n h a
m = −a ( i , j ) / p i v o t
! s u b s t i t u i r a l i n h a por e l a v e z e s o ! m u l t i p l i c a d o r mais a l i n h a do p i v o t
a ( i , : ) = a ( i , : ) + m∗a ( j , : )
! p r o c e s s a r o termo i n d e p e n d e n t e da ! mesma forma
b ( i ) = b ( i ) + m∗b ( j ) end do
end do
1.4. C ´ODIGOS-FONTE
C´odigo-fonte 1.2: M´etodo de Jordan program S o l u c a o J o r d a n
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Programa S o l u c a o Jo r d a n
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! P r o p o s i t o : Mostra a a p l i c a c a o do metodo de Jordan ! para s o l u c a o de um s i s t e m a de e q u a c o e s l i n e a r e s . !−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Autor : L u i s Fernando de O l i v e i r a Data : 03/10/2006 ! R e v i s a o :
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
i m p l i c i t none
integer : : p , q ! c o n t a d o r e s
integer : : n ! numero de e q u a c o e s ! m a t r i z de c o e f i c i e n t e s
real,a l l o c a t a b l e ,dimension( : , : ) : : a
! v e t o r de termos i n d e p e n d e n t e s
real,a l l o c a t a b l e ,dimension( : ) : : b
! v e t o r das r a´ız e s
real,a l l o c a t a b l e ,dimension( : ) : : x
! a b r i r o a r q u i v o com os dados do s i s t e m a l i n e a r
open(unit=10 ,f i l e=” s i s t e m a . t x t ” ,action=” r e a d ” ,status=” o l d ” )
! l e r numero de e q u a c o e s e i n c o g n i t a s
read(unit=10 ,fmt=∗) n
print ∗, ”Numero de e q u a c o e s : ” , n a l l o c a t e( a ( n , n ) , b ( n ) , x ( n ) )
! l e r e l e m e n t o s do s i s t e m a l i n e a r
! os dados e s t a o o r g a n i z a d o s no a r q u i v o ! como s e q u e n c i a das c o l u n a s
read(unit=10 ,fmt=∗) a read(unit=10 ,fmt=∗) b c l o s e(unit=10)
! s a i d a com as e q u a c o e s do s i s t e m a l i n e a r ! ORIGINAL
print ∗
print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” print ∗, ” Equacoes do s i s t e m a l i n e a r o r i g i n a l ” print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” do p=1,n
do q=1,n−1
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a ) ” ,advance=”no” ) a ( p , q ) , ”x ( ” , q , ” ) + ”
end do
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a , f 6 . 2 ) ” ) a ( p , q ) , ”x ( ” , q , ” ) = ” , b ( p )
end do
c a l l Jordan ( n , a , b , x )
! s a i d a com as e q u a c o e s do s i s t e m a l i n e a r ! IDENTIDADE
print ∗
1.4. C ´ODIGOS-FONTE
do p=1,n
do q=1,n−1
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a ) ” ,advance=”no” ) a ( p , q ) , ”x ( ” , q , ” ) + ”
end do
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a , f 6 . 2 ) ” ) a ( p , q ) , ”x ( ” , q , ” ) = ” , b ( p )
end do
! s a i d a com os r e s u l t a d o s e n c o n t r a d o s
print ∗
print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−” print ∗, ” S o l u c a o do s i s t e m a l i n e a r ” print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−” do p=1,n
print ∗, ”x ( ” , p , ” ) = ” , x ( p ) end do
d e a l l o c a t e( a , b , x )
!−−−−−−−
contains
!−−−−−−−
subroutine Jordan ( d , a , b , x )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! S u b r o t i n a Jordan ( d , a , b , x )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! P r o p o s i t o : Transformar a m a t r i z do s i s t e m a em uma ! m a t r i z e s c a l o n a d a .
! Entrada :
! d : numerico , numero de e q u a c o e s e i n c o g n i t a s ! Entrada e Sa i da :
! a : numerico , m a t r i z de c o e f i c i e n t e s
! b : numerico , v e t o r de termos i n d e p e n d e n t e s ! x : numerico , v e t o r s o l u c a o
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Autor : L u i s Fernando de O l i v e i r a Data : 03/10/2006 ! R e v i s a o :
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
integer,intent(in) : : d
real,dimension( : , : ) ,intent(inout) : : a real,dimension( : ) ,intent(inout) : : b real,dimension( : ) ,intent(inout) : : x
! v a r i a v e i s l o c a i s
integer : : i , j ! c o n t a d o r e s
r e a l : : p i v o t ! e l e m e n t o ch ave
r e a l : : m ! m u l t i p l i c a d o r da l i n h a
do j =1,d
! f i x a r o p i v o t
p i v o t = a ( j , j )
! n o r m a l i z a r a l i n h a do p i v o t
a ( j , : ) = a ( j , : ) / p i v o t b ( j ) = b ( j ) / p i v o t
! z e r a r os e l e m e n t o f o r a da d i a g o n a l
do i =1,d
i f ( i /= j ) then
1.4. C ´ODIGOS-FONTE
m = −a ( i , j )
! s u b s t i t u i r a l i n h a por e l a mais ! a l i n h a do p i v o t v e z e s o
! m u l t i p l i c a d o r
a ( i , : ) = a ( i , : ) + m∗a ( j , : )
! p r o c e s s a r o termo i n d e p e n d e n t e da ! mesma forma
b ( i ) = b ( i ) + m∗b ( j ) end i f
end do end do
! c o p i a a s o l u c a o do s i s t e m a l i n e a r para o ! v e t o r s o l u c a o
x = b
1.4. C ´ODIGOS-FONTE
C´odigo-fonte 1.3: M´etodo da Matriz Inversa program S o l u c a o M a t r i z I n v e r s a
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Programa S o l u c a o M a t r i z I n v e r s a
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! P r o p o s i t o : Mostra a a p l i c a c a o do metodo da i n v e r s a o ! de m a t r i z e s para s o l u c a o de um s i s t e m a de e q u a c o e s ! l i n e a r e s .
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Autor : L u i s Fernando de O l i v e i r a Data : 03/10/2006 ! R e v i s a o :
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
i m p l i c i t none
integer : : p , q ! c o n t a d o r e s
integer : : n ! numero de e q u a c o e s ! m a t r i z de c o e f i c i e n t e s
real,a l l o c a t a b l e ,dimension( : , : ) : : a
! v e t o r de termos i n d e p e n d e n t e s
real,a l l o c a t a b l e ,dimension( : ) : : b
! v e t o r das r a´ız e s
real,a l l o c a t a b l e ,dimension( : ) : : x
! a b r i r a r q u i v o com os dados do s i s t e m a l i n e a r
open(unit=10 ,f i l e=” s i s t e m a . t x t ” ,action=” r e a d ” ,status=” o l d ” )
! l e r numero de e q u a c o e s e i n c o g n i t a s
read(unit=10 ,fmt=∗) n
print ∗, ”Numero de e q u a c o e s : ” , n a l l o c a t e( a ( n , n ) , b ( n ) , x ( n ) )
! l e r e l e m e n t o s do s i s t e m a l i n e a r
! os dados e s t a o o r g a n i z a d o s no a r q u i v o ! como s e q u e n c i a das c o l u n a s
read(unit=10 ,fmt=∗) a read(unit=10 ,fmt=∗) b c l o s e(unit=10)
! s a i d a com as e q u a c o e s do s i s t e m a l i n e a r ! ORIGINAL
print ∗
print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” print ∗, ” Equacoes do s i s t e m a l i n e a r o r i g i n a l ” print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” do p=1,n
do q=1,n−1
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a ) ” ,advance=”no” ) a ( p , q ) , ”x ( ” , q , ” ) + ”
end do
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a , f 6 . 2 ) ” ) a ( p , q ) , ”x ( ” , q , ” ) = ” , b ( p )
end do
c a l l I n v e r s a o ( n , a , b , x )
! s a i d a da m a t r i z i n v e r s a
print ∗
1.4. C ´ODIGOS-FONTE
do p=1,n
do q=1,n−1
write(unit=∗,fmt=” ( f 6 . 2 ) ” ,advance=”no” ) a ( p , q ) end do
write(unit=∗,fmt=” ( f 6 . 2 ) ” ) a ( p , q ) end do
! s a i d a com os r e s u l t a d o s e n c o n t r a d o s
print ∗
print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−” print ∗, ” S o l u c a o do s i s t e m a l i n e a r ” print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−” do p=1,n
print ∗, ”x ( ” , p , ” ) = ” , x ( p ) end do
d e a l l o c a t e( a , b , x )
!−−−−−−−
contains
!−−−−−−−
subroutine I n v e r s a o ( d , a , b , x )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! S u b r o t i n a I n v e r s a o ( d , a , b , x )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! P r o p o s i t o : I n v e r t e r a m a t r i z do s i s t e m a e armazenar ! na m a t r i z i n v
! Entrada :
! d : numerico , numero de e q u a c o e s e i n c o g n i t a s ! b : numerico , v e t o r de termos i n d e p e n d e n t e s ! Entrada e Sa i da :
! a : numerico , m a t r i z de c o e f i c i e n t e s ! x : numerico , v e t o r s o l u c a o
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Autor : L u i s Fernando de O l i v e i r a Data : 03/10/2006 ! R e v i s a o :
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
integer,intent(in) : : d
real,dimension( : , : ) ,intent(inout) : : a real,dimension( : ) ,intent(in ) : : b real,dimension( : ) ,intent(inout) : : x
! v a r i a v e i s l o c a i s
integer : : i , j ! c o n t a d o r e s
r e a l : : p i v o t ! e l e m e n t o ch ave
r e a l : : m ! m u l t i p l i c a d o r da l i n h a ! m a t r i z i n v e r s a
real,a l l o c a t a b l e ,dimension( : , : ) : : i n v
! a l o c a r e s p a c o para a m a t r i z
a l l o c a t e( i n v ( n , n ) )
! e l e m e n t o s da m a t r i z i d e n t i d a d e
i n v = 0 do i =1,d
i n v ( i , i ) = 1 end do
! para cada c o l u n a da m a t r i z , f a z e r
1.4. C ´ODIGOS-FONTE
! f i x a r o p i v o t
p i v o t = a ( j , j )
! n o r m a l i z a r a l i n h a do p i v o t
a ( j , : ) = a ( j , : ) / p i v o t i n v ( j , : ) = i n v ( j , : ) / p i v o t
! z e r a r os e l e m e n t o f o r a da d i a g o n a l
do i =1,d
i f ( i /= j ) then
! c a l c u l a r o m u l t i p l i c a d o r da l i n h a
m = −a ( i , j )
! s u b s t i t u i r a l i n h a por e l a mais ! a l i n h a do p i v o t v e z e s o
! m u l t i p l i c a d o r
a ( i , : ) = a ( i , : ) + m∗a ( j , : )
i n v ( i , : ) = i n v ( i , : ) + m∗i n v ( j , : ) end i f
end do end do
! c o p i a os dados da m a t r i z i n v e r s a em ’ a ’
a = i n v
! m u l t i p l i c a a m a t r i z i n v e r s a p e l o v e t o r de ! termos i n d e p e n d e n t e s para g e r a r a s o l u c a o
1.4. C ´ODIGOS-FONTE
C´odigo-fonte 1.4: M´etodo de Cramer program SolucaoCramer
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Programa SolucaoCramer
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! P r o p o s i t o : Mostra a a p l i c a c a o do metodo de Cramer ! para s o l u c a o de um s i s t e m a de e q u a c o e s l i n e a r e s . !−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Autor : L u i s Fernando de O l i v e i r a Data : 03/10/2006 ! R e v i s a o :
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
i m p l i c i t none
integer : : p , q ! c o n t a d o r e s
integer : : n ! numero de e q u a c o e s ! m a t r i z de c o e f i c i e n t e s
real,a l l o c a t a b l e ,dimension( : , : ) : : a
! v e t o r de termos i n d e p e n d e n t e s
real,a l l o c a t a b l e ,dimension( : ) : : b
! v e t o r das r a´ız e s
real,a l l o c a t a b l e ,dimension( : ) : : x
! a b r i r a r q u i v o com os dados do s i s t e m a l i n e a r
open(unit=10 ,f i l e=” s i s t e m a . t x t ” ,action=” r e a d ” ,status=” o l d ” )
! l e r numero de e q u a c o e s e i n c o g n i t a s
read(unit=10 ,fmt=∗) n
print ∗, ”Numero de e q u a c o e s : ” , n a l l o c a t e( a ( n , n ) , b ( n ) , x ( n ) )
! l e r e l e m e n t o s do s i s t e m a l i n e a r
! os dados e s t a o o r g a n i z a d o s no a r q u i v o ! como s e q u e n c i a das c o l u n a s
read(unit=10 ,fmt=∗) a read(unit=10 ,fmt=∗) b c l o s e(unit=10)
! s a i d a com as e q u a c o e s do s i s t e m a l i n e a r ! ORIGINAL
print ∗
print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” print ∗, ” Equacoes do s i s t e m a l i n e a r o r i g i n a l ” print ∗, ”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−” do p=1,n
do q=1,n−1
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a ) ” ,advance=”no” ) a ( p , q ) , ”x ( ” , q , ” ) + ”
end do
write(unit=∗,fmt=” ( f 6 . 2 , a , i 2 , a , f 6 . 2 ) ” ) a ( p , q ) , ”x ( ” , q , ” ) = ” , b ( p )
end do
c a l l Cramer ( n , a , b , x )
! s a i d a com os r e s u l t a d o s e n c o n t r a d o s
print ∗
1.4. C ´ODIGOS-FONTE
do p=1,n
print ∗, ”x ( ” , p , ” ) = ” , x ( p ) end do
d e a l l o c a t e( a , b , x )
!−−−−−−−
contains
!−−−−−−−
function Determinante ( d , a ) r e s u l t ( d e t )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Funcao Determinante ( d , a )
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! P r o p o s i t o : C a l c u l a r o d e t e r m i n a n t e de uma m a t r i z ! quadrada usando e l i m i n a c a o de Gauss .
! Entrada :
! d : numerico , dimensao da m a t r i z ! a : numerico , m a t r i z quadrada ! S a id a :
! d e t : numerico , d e t e r m i n a n t e
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
! Autor : L u i s Fernando de O l i v e i r a Data : 03/10/2006 ! R e v i s a o :
!−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
integer,intent(in) : : d
real,dimension( : , : ) ,intent(in) : : a r e a l : : d e t
! v a r i a v e i s l o c a i s
integer : : i , j , k ! c o n t a d o r e s
r e a l : : p i v o t ! e l e m e n t o ch ave
r e a l : : m ! m u l t i p l i c a d o r da l i n h a ! m a t r i z a u x i l i a r
real,dimension( : , : ) ,a l l o c a t a b l e : : b
! a l o c a r e s p a c o para a m a t r i z
a l l o c a t e( b ( d , d ) ) b = a
do j =1,d
! f i x a r o p i v o t
p i v o t = b ( j , j ) do i=j +1,d
! c a l c u l a r o m u l t i p l i c a d o r da l i n h a
m = −b ( i , j ) / p i v o t
! s u b s t i t u i r a l i n h a por e l a v e z e s o ! m u l t i p l i c a d o r mais a l i n h a do p i v o t
b ( i , : ) = b ( i , : ) + m∗b ( j , : ) end do
end do
! c a l c u l a n d o o d e t e r m i n a n t e da m a t r i z
d e t = 1 do i =1,d
d e t = d e t∗b ( i , i ) end do