Você está na página 1de 6

Anlise Numrica - PSist2 - Resoluo

Sistemas Lineares com Matlab

O Matlab tem o operador \ que permite com uma sintaxe simples resolver sistemas de
equaes lineares de qualquer tipo.
Se quisermos resolver o sistema Ax = b basta fazer x=A\b. Se o sistema for determinado o mtodo
que utilizado idntico factorizao LU dada. Vamos, no entanto, ver outras funes que nos
fornecem a prpria decomposio.

Nota:

Faa o download, com copy-past, dos seguintes cheiros (com funes Matlab) do Moodle (directrio sistemas de equaes lineares) para a sua rea de trabalho: jacobi.m; seidel.m

1. Pretendemos resolver o sistema de equaes Ax = b:

1
2
A=
1
3

1.1. Execute os seguintes comandos

1
2
2
1

1
1
1
1

1
1
,
2
1

Matlab

4
6

b=
6 .
6

A=[1 1 1 1;2 2 1 1;1 2 1 2;3 1 1 1]


b=[4;6;6;6]
xx=A\b

Resoluo:
xx = (1.0000 , 1.0000 , 1.0000 , 1.0000 )
Nota: Como a resposta aparece com c.d. a soluo no inteira. Se calcularmos a
diferena entre o valor obtido e a soluo exacta (1, 1, 1, 1), usando o comando Matlab
dif=xx-[1;1;1;1] vamos obter o valor

dif==
1.0e-015 *
0
-0.1110
-0.2220
0.2220

que mostra que a diferena para os valores exactos ocorre na 16 a c.d..


1.2. Execute o comando Matlab: [L,U,P]=lu(A)
Este comando efectua a decomposio LU de Doolittle da matriz A com pivotagem
parcial sendo L, U e P tais que LU = P A. Indique uma soluo aproximada, x, do
sistema Ax = b usando esta decomposio. Escreva todos os comandos Matlab que
executou.
Resoluo:
[L,U,P]=lu(A);
y=L\(P*b)
x=U\y

Resultados:
L =
1.0000
0
0.3333 1.0000
0.3333 0.4000
0.6667 0.8000

0
0
1.0000
-0.5000

0
0
0
1.0000

U =

3.0000 1.0000 1.0000 1.0000


0 1.6667 0.6667 1.6667
0
0 0.4000
0
0
0
0 -1.0000

P =

0
0
1
0

0
0
0
1

0
1
0
0

1
0
0
0
x =

y =

6.0000
4.0000
0.4000
-1.0000

1.0000
1.0000
1.0000
1.0000

1.3. Porque que LU 6= A?


Resoluo:
Porque lu usa a decomposio LU com escolha parcial de pivot. Logo obtm a decomposio de uma matriz Aperm constituda pelas linhas de A permutadas.
Nota: Pela anlise de P , a 1a linha de Aperm a 4a linha de A, a 2a linha de Aperm a
3a linha de A, a 3a linha de Aperm a 1a linha de A e a 4a linha de Aperm a 2a linha
de A. De facto:
>> D=L*U
D =
3
1
1
2

1
2
1
2

1
1
1
1

1
2
1
1

>> Aperm=P*A
Aperm =
3
1
1
2
1
1
2
2

1
1
1
1

1
2
1
1

1.4. Calcule o nmero de condio da matriz A. Estime a preciso da soluo x calculada.


Resoluo:
cond(A) = 16.9847 101 . Como o algoritmo estvel, espera-se que o problema que
na realidade resolvemos aproxime o problema que pretendamos resolver com cerca de
16 a.s., que a preciso do Matlab. Como a condio da ordem dos 101 espera-se
perder apenas 1 a.s. e, por isso, temos conana em 15 a.s. do valor da soluo.
(Estamos a usar a frmula: e.m.r.(resultado) cond(A) e.m.r.(dados))
1.5. Para este sistema, qual foi o mtodo que obteve melhores resultados?
Resoluo:
Os resultados so os mesmos. De facto, se determinar a diferena entre x e xx obtm-se:
>> xx-x
ans =
0
0
0
0

o que mostra que as operaes executadas quer pelo operador \ quer pela funo lu
seguida dos 2 sistemas triangulares so as mesmas. O operador \ usa o mtodo de Gauss
com escolha parcial de pivot e a funo lu usa a decomposio de Doolitle com escolha
parcial de pivot. Logo o operador \ pode ser usado quando pretendemos resolver um
s sistema com a matriz A. A funo lu mais vantajosa quando pretendemos resolver
vrios sistemas com a mesma matriz.
1.6. Calcule as normas 1,2 e da matriz do sistema. Porque obteve resultados diferentes?
Resoluo:
norm(A,1)= 7, norm(A)(ou norm(A,2))=5.7016, norm(A,Inf)= 6.

Uma funo pode ser designada por norma desde que respeite as respectivas condies
(v. pp. 100 da sebenta). H uma innidade de possibilidades, sendo as normas indicadas (v pp.101) as mais usadas para vectores e matrizes fornecendo valores diferentes.
Geralmente o valor da componente maior que mais contribui para o valor da norma.
Este facto, faz com que por vezes as normas s digam o que acontece s componentes
maiores em valor absoluto.

2. Para resolver um dado problema de Engenharia necessrio determinar x tal que Ax = b.


Sabese que

1
0
0
0
2.9444 6.2222 2.9444

A=

0
2.9444 6.2222 2.9444
0
0
0
1

e que b = (0.0185, 0.1111, 0.2222, 0.1481)T .


2.1. Faa

A=[1 0 0 0;2.9444 -6.2222 2.9444 0; 0 2.9444 -6.2222 2.9444 ;0 0 0 1];


b=[0.0185;0.1111;0.2222;0.1481];
xx=A\b
c=cond(A)

Resoluo:
Qual a soluo que obteve? x= 0.018500000000000, 0.009230809998256, 0.038739487152272,
0.148100000000000
Atendendo condio de A = 13.1008 temos conana em 15 a.s. desta soluo. Porque cond(A) 101 , esperamos perder um a.s. dos cerca de 16 a.s. com que o Matlab
trabalha.
Nota: A soluo apresentada com 15 c.d. para cada componente e no com 15 a.s.
pois, tal como referimos anteriormente, quando se trabalha com normas s camos
praticamente com a a informao da componente maior. Como o erro relativo dado
pela norma do erro absoluto a dividir pela norma do vector x, apesar de no sabermos
qual a componente que tem maior erro, sabemos que a componente maior de x a
ltima. Assim, na pior das hipteses, nessa componente que temos o maior erro
absoluto que nos permite ter conana em 15 a.s.. Como a ordem de grandeza dessa
componente das dcimas, os 15 a.s. so 15 c.d. e por essa razo s podemos garantir
15 c.d. para as restantes componentes.
2.2. Faa
format short
[xj,k,rerr,C,Y]=jacobi(A,b,[0;0;0;0],1.e-3,20,1);

para resolver Ax=b pelo mtodo de Jacobi, usando para ponto x0 o vector nulo e usando
kxi x(i1) k
para critrio de paragem
< 1.e 3 ou, no mximo, 20 de iteraes.
kxi k
O programa fornece a soluo em xj, obtida em k iteraes. Fornece tambm rerr=
kxk x(k1) k
, C a matriz da frmula de recorrncia de Jacobi e a tabela Y com todos
kxk k


os iterados. Na 1a coluna x0 e na ltima linha xi x(i1) .

Resoluo:
E obteve-se o quadro:

iter #
0
1
2
3
x1 = 0.000000 0.018500 0.018500 0.018500
x2 = 0.000000 -0.017855 -0.026000 0.003165
x3 = 0.000000 -0.035711 0.025922 0.022068
x4 = 0.000000 0.148100 0.148100 0.148100
||xN-xV|| 0.0 0.148100 0.061633 0.029165
iter #

10

4
0.018500
0.001342
0.035869
0.148100
0.013801
11

5
0.018500
0.007873
0.035006
0.148100
0.006531

6
0.018500
0.007464
0.038097
0.148100
0.003090

7
0.018500
0.008927
0.037904
0.148100
0.001462

x1 =
x2 =
x3 =
x4 =
||xN-xV||

0.018500
0.008835
0.038596
0.148100
0.000692

0.018500
0.009163
0.038552
0.148100
0.000327

0.018500 0.018500
0.009142 0.009216
0.038707 0.038698
0.148100 0.148100
0.000155 0.000073

 O mtodo
convergente
. Parou ao m de 11 iteraes pelo critrio de paragem


rerr =

x(11) x(10)


103 que garante que da 10a para a 11a iterao houve
x(11)

uma estabilizao, na maior das componentes, de cerca de 3 a.s..


Nota: Leiam os comentrios da funo jacobi para identicarem o signicado dos
parmetros.
(n)



x x(n1) dada por x x(n)
 Existe
uma
relao
entre
o
e.m.a.
cometido
e


K x(n) x(n1) . Para obter essa relao faa:
Dena um "script"com as instrues
for i=2:k
v(i-1)=norm(Y(1:4,k+1)-Y(1:4,i),Inf);
end
KR=v./Y(5,2:k)

Corra o "script", qual a informao guardada em v e KR?


Resoluo:
v guarda a norma da diferena entre a ltima iterao e as restantes iteraes. Quando a ltima iterao tiver pelo menos mais 1 a.s. do que a
outra
iterao
a aproximar a soluo pretendia x ento v tambm
nos d
=



x x(n) . Como na ltima linha de Y esto os valores de x(n) x(n1) ,

KR vai fornecer a constante de proporcionalidade K da relao anterior. Como


nas primeiras iteraes aquela relao pode
ser vlida e nas ltimas
ainda no
o valor de v no aproxima bem o erro x x(n) , convm olhar para os
valores de KR intermdios.
Nota: se olharem para a ltima linha da tabela (ou Y ) vem que so precisas
um pouco mais do que 3 iteraes para a soluo ganhar 1 a.s.. Deste modo,
v s aproxima bem o erro at 7a iterao.
i
KR
v

10

0.5024

0.5714

0.5702

0.5705

0.5652

0.5667

0.5430

0.5496

0.4436

0.4732

7.44e-2

3.52e-2

1.66e-2

7.87e-3

3.69e-3

1.75e-3

7.94e-4

3.80e-4

1.45e-4

7.33e-5





O valor de K = 0.58 e x x(n) 0.58 x(n) x(n1) .

 Faa

Erro=K*Y(5,k+1)

O erro na ltima iterao 4.2532e 005 < 0.5 104 .


 Qual a soluo que obteve (apresente-a de modo conveniente)?
x= ( 0.0185(0), 0.0092(2), 0.0387(0), 0.1481(0)).
 Verique se os resultados esto correctos
Faa
xx,xj,dif=xx-xj
dif=
1.0e-004 *
-0.0000
0.1525
0.4192
0

Concluso: o valor estimado (0.43 104 ) para o erro, neste caso, alm de ser
bastante prximo do erro cometido (0.42 104 ), tambm um limite superior do

erro, mas isso no podemos garantir sempre. (Usou-se a norma ).


2.3. Faa
format short
[xs,k,rerr,Y]=seidel(A,b,[0;0;0;0],1.e-3,20,1);

para resolver Ax=b pelo mtodo de Gauss-Seidel, usando para ponto x0 o vector nulo e
kxi x(i1) k
usando para critrio de paragem
< 1.e3 ou, no mximo, 20 de iteraes.
kxi k
O programa fornece a soluo em xj, obtida em k iteraes. Fornece tambm rerr=
kxk x(k1) k
e a tabela Y com todos os iterados. Na 1a coluna x0 e na ltima linha
xk k
k
i

x x(i1) .

Resoluo:
E obteve-se o quadro:

iter #
0
1
2
3
x1 = 0.000000 0.018500 0.018500 0.018500
x2 = 0.000000 -0.009101 -0.028038 0.000885
x3 = 0.000000 -0.040018 0.021104 0.034790
x4 = 0.000000 0.148100 0.148100 0.148100
||xN-xV|| 0.0 0.148100 0.061121 0.028923

4
0.018500
0.007362
0.037855
0.148100
0.006477

5
0.018500
0.008812
0.038541
0.148100
0.001450

6
0.018500
0.009137
0.038695
0.148100
0.000325

7
0.018500
0.009210
0.038730
0.148100
0.000073

O mtodo
convergente
. Parou ao m de 7 iteraes pelo critrio de paragem


rerr =

x(7) x(6)


103 que garante que da 6a para a 7a iterao houve uma
x(7)

estabilizao, na maior das componentes, de cerca de 3 a.s..


Nota: Leiam os comentrios da funo seidel para identicarem o signicado dos
parmetros.


* Existe uma relao entre o e.m.a. cometido e x(n) x(n1) dada por




x x(n) K x(n) x(n1) . Para obter essa relao faa:
* Dena um "script"com as instrues
for i=2:k
v(i-1)=norm(Y(1:4,k+1)-Y(1:4,i),Inf);
end
KR=v./Y(5,2:k)

Corra o "script", qual a informao guardada em v e KR?


Resoluo:
v guarda a norma da diferena entre a ltima iterao e as restantes iteraes.
Quando a ltima iterao tiver pelo menos mais 1 a.s. do que a outra
iterao a

aproximar a soluo pretendia x ento v tambm nos


d
= x x(n) . Como na

ltima linha de Y esto os valores de x(n) x(n1) , KR vai fornecer a constante
de proporcionalidade K da relao anterior. Como nas primeiras iteraes aquela
relao
pode

ainda no ser vlida e nas ltimas o valor de v no aproxima bem o erro
x x(n) , convm olhar para os valores de KR intermdios.

Nota: se olharem para a ltima linha da tabela (ou Y ) vem que, nas ltimas iteraes,
so precisas um pouco mais do que 3 iteraes para a soluo ganhar 2 a.s.. Deste
modo, v s aproxima bem o erro at 5a iterao. Nas primeiras iteraes parece que
o mtodo ainda no estabilizou.
i
1
2
3
4
5
6
KR
0.5317
0.6094
0.2878
0.2853
0.2741
0.2239
v
7.87e-002 3.72e-002 8.32e-003 1.85e-003 3.97e-004 7.27e-005




- O valor de K = 0.3 e x x(n) 0.3 x(n) x(n1) .
- Faa
Erro=K*Y(5,k+1)

O erro na ltima iterao 2.1817e 005 < 0.5 104 .


- Qual a soluo que obteve (apresente-a de modo conveniente)?
x= ( 0.0185(0), 0.0092(1), 0.0387(3), 0.1481(0))
- Verique se os resultados esto correctos
Faa
xx,xs,dif=xx-xs
dif = 1.0e-004 * (-0.0000, 0.2098,

0.0993,

0)

Concluso: o valor estimado (0.22 104 ) para o erro, neste caso, alm de ser bastante
prximo do erro cometido (0.21 104 ), tambm um limite superior do erro, mas
isso no podemos garantir sempre. (Usou-se a norma ).

Você também pode gostar