Você está na página 1de 3

Exemplo ilustrativo de matriz mal condicionada

Dados n+1 pares de valores {x


i
, f(x
i
)}, i = 0, 1, 2, ..., n, existe um e somente um
polinmio p
n
(x) de grau s n no qual
f(x
i
) = p
n
(x
i
) , i = 0, 1, 2, ..., n.
Portanto, embora existam vrias frmulas de interpolao polinomial, se elas
utilizarem as mesmas informaes nos pontos nodais {x
0
, x
1
, x
2
, ..., x
n
}, ento os
polinmios obtidos sero os mesmos.
Naturalmente, se f(x) for um polinmio de grau s n, ento a aproximao
tambm ser exata x = x
i
.
Expressando o polinmio interpolador na forma:
0
( )
n
i
n i
i
p x c x
=
=


os coeficientes c
i
so solues do sistema abaixo de n+1 equaes algbricas lineares:
2
0 1 0 2 0 0 0
2
0 1 1 2 1 1 1
2
0 1 2
( )
( )
( )
n
n
n
n
n
n n n n n
c c x c x c x f x
c c x c x c x f x
c c x c x c x f x
+ + + + =

+ + + + =

+ + + + =


cujo determinante da matriz dos coeficientes:
2
0 0 0
2
1 1 1
2
1
1
1
n
n
n
n n n
x x x
x x x
V
x x x
=


chamado de determinante de Vandermonde, sendo no-nulo se x
i
= x
j
i = j.
O problema desta tcnica de determinao dos coeficientes a sua tendncia de
propagar os erros de arredondamento medida que os pontos nodais se aproximam uns
dos outros, pois o determinante de Vandermonde tende a zero nestas situaes, gerando
um sistema de equaes mal condicionado.

Exerccio: implementar o cdigo abaixo no MATLAB ou SCILAB para interpolar a
funo
senh( )
( )
senh( )
x
y f x
x
u
= =
u

que a soluo analtica do problema de reao com difuso em um partcula cataltica
esfrica isotrmica com reao de primeira ordem (x o raio adimensional e y a
concentrao adimensional). Utilizar como pontos nodais, pontos igualmente espaados
entre 0,1 e 0,9, com espaamento uniforme de 0,1 para o caso (a) e de 0,04 para o caso
(b). Aps obter o polinmio, interpolar a funo nos valores de 0 a 1 em intervalos de
0,01. Note que entre 0 e 0,1 e entre 0,9 e 1 os valores sero extrapolados. Comparar os
dois casos.
dx=0.1; % para o caso (a)
dx=0.04; % para o caso (b)

x=[0.1:dx:0.9]'; % pontos nodais

phi=5;
y=sinh(phi*x)./(x*sinh(phi)); % valor da funo nos pontos nodais

n=length(x); % nmero de pontos

xc=[0:0.01:1]'; % pontos para interpolao
m=length(xc);
yc(1)=phi/sinh(phi);
yc(2:m)=sinh(phi*xc(2:m))./(xc(2:m)*sinh(phi));
% formao da matriz de Vandermonde
Um=ones(n,1); % vetor de tamanho n x 1 com todos elementos iguais a 1
M=Um;
for i=1:n-1
M=[M x.^i];
end

C=inv(M)*y; % coeficientes polinomiais (inverso sem pivotamento)
% C=M\y; % coeficientes polinomiais (inverso com pivotamento
parcial)

pn1=C'*(Um*xc').^([0:n-1]'*ones(1,m)); % valores interpolados

%
% forma alternativa calcular os valores interpolados
%
%for i=1:m
% pn1(i)=C(n);
% for j=n-1:-1:1
% pn1(i)=pn1(i)*xc(i)+C(j);
% end
%end

condM=cond(M) % nmero de condicionamento da matriz dos coeficientes

plot(xc,yc,'b:',xc,pn1,'r',x,y,'o');
legend('exato','polinmio','pontos');
O resultado do exerccio acima mostrado na figura abaixo, onde se observa no caso (b)
o efeito dos erros de arredondamento devido inverso matricial sem pivotamento do
sistema de Vandermonde que neste caso mal condicionado. Este problema no
ocorreria se fosse realizada a inverso matricial com pivotamento (parcial ou total).

Caso (a)

Caso (b)
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
exato
polinmio
pontos
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
exato
polinmio
pontos
Outro aspecto sobre a formulao
0
( )
n
i
n i
i
p x c x
=
=

a sua forma ineficiente de


clculo de interpolao. A forma alternativa (aninhada):
0 1 2 1
( ) ( ( ( )) ))
n n n
p x c x c x c x c x c

= + + + + +
requer um nmero bem menor de operaes de multiplicao (2n1 contra n(n+1)/2) e
pode ser implementada conforme o algoritmo:
p c
n

Para i = n1, n2, ..., 2, 1, 0, faa
p p x + c
i

Este algoritmo est implementado de forma comentada no cdigo acima.

Você também pode gostar