Você está na página 1de 3

Eliminao de Gauss com Pivoteamento Parcial

Profa. Cynthia de O. Laga Ferreira


Mtodos Numricos e Computacionais I - SME0305

Considere o exemplo abaixo:

Exemplo
Use o mtodo de Gauss para resolver o sistema linear

10 4 x1 + x2 = 1
.
x1 + x2 = 2

Resolvendo este sistema pelo mtodo de Gauss, temos


(1)
a21 1
m21 = (1)
= 4
= 104
a11 10
e
4 4
10 1 | 1 10 1 | 1

1 1 | 2 0 1 104 | 2 104
Supondo que trabalhamos com trs algarismos significativos, a solu-
o deste sistema
0
x .
1
Entretanto, a soluo "exata" deste sistema

1.0001
x .
0.9999

A propagao de erros acontece quando multiplicamos nmeros grandes por


outros que j contm erros de arredondamento. No mtodo de Eliminao de
Gauss vrios produtos so efetuados. Para amenizar esta propagao de erros,
(k)
a
devemos tomar os multiplicadores mik = ik (k)
menores do que 1, em valor
akk
absoluto. Podemos, ento, em cada passo, escolher na coluna correspondente o
elemento de maior valor absoluto, da diagonal (inclusive) para baixo, e fazer uma
permutao nas equaes do sistema, de modo que esse elemento venha a ocupar
a posio do piv. A este procedimento chamamos Mtodo de Eliminao de
Gauss com Pivotamento Parcial.

1
Descrio do Algoritmo

(k) (k)
Encontrar pivo : |apk | = maxkin |aik |

T rocar linhas Lk ! Lp

F azer Eliminacao de Gauss

Exerccio: resolva o sistema do exemplo anterior pelo mtodo de


Gauss com pivotemento e compare os resultados obtidos.

De fato, uma permutao das duas equaes no dar um resultado mais satis-
fatrio, mesmo considerando apenas trs algarismos significativos
(1) 4
a21 10 4
m21 = (1)
= = 10
a11 1

e
1 1 | 2 1 1 | 2
4 4 4 ,
10 1 | 1 0 1 10 | 1 2.10
isto ,
1
x .
1

Exerccio: Considere o sistema


0 10 1 0 1
2 5 3 x1 8
@ 5 2 1 A @ x2 A = @ 7 A .
1 3 6 x3 13

Use o mtodo da eliminao de Gauss com pivoteamento parcial para


resolver este sistema, trabalhando com dois algarismos significativos
em todas as operaes.

2
Funo Matlab x = eliminacao_gauss_pivo(A,b)
function x = eliminacao_gauss_pivo(A,b)
[m,n] = size(A);
Ab = [A b];
for k=1:n-1
%parte do pivoteamento
[,p] = max(abs(Ab(k:n,k)));
p = p+k-1;
if p = k
% pivoteamento das linhas
Ab([k,p],:) = Ab([p,k],:)
end
for i=k+1:n
m = Ab(i,k)/Ab(k,k);
Ab(i,k:end) = Ab(i,k:end)-m*Ab(k,k:end);
end
end
x = backsub(Ab(:,1:n),Ab(:,end));

Você também pode gostar