Você está na página 1de 7

Programação de Computadores e Métodos Numéricos

Curso: Engenharia Civil Turma: 5CVAN


Roteiro de Práticas 03
0.1 Interpolação
Em engenharia e ciência, dispõe-se habitualmente de dados pontuais obtidos a partir de uma amos-
tragem ou de um experimento. Através da interpolação, pode-se construir uma função que passe
por estes dados pontuais, conferindo-lhes, então, a continuidade desejada.

Outra aplicação da interpolação é a aproximação de funções complexas por funções mais simples.
Suponha que tenhamos uma função, mas que seja complicada demais para que seja possível avaliá-la
de forma eficiente. Podemos, então, escolher alguns dados pontuais da função complicada e tentar
interpolá-los com uma função mais simples. Obviamente, quando utilizamos a função mais simples
para calcular novos dados, normalmente não se obtém o mesmo resultado da função original, mas
dependendo do domínio do problema e do método de interpolação utilizado, o ganho de simplicidade
pode compensar o erro.

A interpolação permite fazer a reconstituição (aproximada) de uma função, bastando para tanto
conhecer apenas algumas das suas abscissas e respectivas ordenadas (imagens no contra-domínio
da função). A função resultante garantidamente passa pelos pontos fornecidos, e, em relação aos
outros pontos, pode ser considerada um mero ajuste.

0.2 Polinômio interpolador


Sejam n + 1 pontos distintos: x0 , x1 , . . . , xn e sejam os valores de f (x) nestes pontos f (x0 ), f (x1 ), . . . , f (xn ).
A interpolação polinomial de f (x) consiste em obter uma função polinomial pn (x) = a0 + a1 x + a2 x2 +
. . . + an xn , tal que:


 p0 (x0 ) = f (x0 )

p1 (x1 ) = f (x1 )

..


 .

pn (xn ) = f (n)

Para obter o polinômio pn (x) = a0 + a1 x + a2 x2 + . . . + an xn devemos resolver o sistema




 a0 + a1 x0 + a2 x20 + . . . + an xn0 = f (x0 )

a0 + a1 x1 + a2 x2 + . . . + an xn = f (x1 )

1 1
. ,

 ..


a0 + a1 xn + a2 x2n + . . . + an xnn = f (n)

ou seja, devemos obter os valores para os coeficientes a0 , a1 , . . . , an . O sistema acima pode ser
escrito por meio da seguinte equação matricial Va = f(x), A matriz V é conhecida como matriz de
Vandermont.
xn0 xn−1
    
0 ··· x0 1 a0 f (x0 )
 xn xn−1 · · · x1 1   a1   f (x1 ) 
   
 1 1
 .. .. .. . . .
..  ..  =  ..
   
 . . . 1  
n−1
    
 xn x · · · x n−1 1  an−1   f (x n−1 ) 
n−1 n−1
n
xn xn n−1 ··· xn 1 an f (xn )

0.2.1 Problema: Determine o polinômio interpolador de grau 1 (p1 (x) = a0 + a1 x ) para os dados a seguir e
calcule os valor de y para x = 0 .2 e x = 0 .3
i 0 1
xi 0.1 0.6
yi 1.221 3.320
1
Programação de Computadores e Métodos Numéricos
Curso: Engenharia Civil Turma: 5CVAN

0.3 Polinômio de Lagrange


Dedução do método
1) Sejam dados n+1 pontos (x0 ,y0 ), (x1 ,y1 ), ..., (xn ,yn ), sendo xi distintos tais que yi = f(xi ) e x
∈(x0 ,xn ). Ln (x) é o polinômio de grau não superior a n tal que

Ln (xi ) = y(xi ), i = 0, 1, 2, 3, ..., n

2) Sejam Pi (xi ), i = 0, 1, 2, 3, ..., n polinômio de grau n tais que

Pi (xi ) 6= 0e Pi (xj ) = 0, ∀ i6=j.

Assim,

P0 (x) = (x - x1 )(x - x2 )(x - x3 )...(x - xn )

P1 (x) = (x - x0 )(x - x2 )(x - x3 )...(x - xn )

P2 (x) = (x - x0 )(x - x1 )(x - x3 )...(x - xn )

..
.

Pn (x) = (x - x0 )(x - x1 )(x - x2 )...(x - xn−1 )

Ou seja, de modo geral, para qualquer i :


n
Q
Pi (x) = (x − xj ), i = 0, 1, 2, 3,..., n
j=0,i6=j

3) Vamos escrever Ln (x) como combinação linear dos Pi (xi ):

Ln (xi ) =c0 P0 (x) + c1 P1 (x) + c2 P2 (x) + · · · + cn Pn (x)

Escrevendo a expressão acima com a notação de somatório


n
P
Ln (xi ) = ci Pi (x)
i=0

n
4) Calculando a expressão dos coeficientesci : Como Pi (xj ) = 0, ∀ i 6= j , Ln (xi ) = y(xi ) e Pi (x ) =
Q
(x − xj ),
j=0,i6=j
então para um determinado i tem-se
y(xi )
Ln (xi ) = y(xi ) = ci Pi (x) ⇒ ci = Pi (xi )

n
5) Substituido este valor de ci em Ln (xi ) = ci Pi (x) obtemos
P
i=0
n n
y(xi )
y(xi ) PPii(x
(x)
P P
Ln (xi ) = Pi (xi ) Pi (x) = i)
i=0 i=0

n
6)Substituindo Pi (x) = (x − xj ) na expressão acima, obtemos a fórmula do polinômio inter-
Q
j=0,i6=j
polador de Lagrange
n n
P Q (x−xj )
Ln (xi ) = y(xi ) (xi −xj )
i=0 j=0,i6=j
Programação de Computadores e Métodos Numéricos
Curso: Engenharia Civil Turma: 5CVAN

Problema (Termodinâmica)
Estudos de termodinâmica fazem uso intesivo de tabelas. Embora muitas propriedades termodinâ-
micas possam ser plenamente descritas por meio de equações simples, outras, entretanto, ou não
são completamente entendidas, ou são muito complicadas. nestes casos é muito mais fácil tabular
os valores experimentais. Por exemplo, considere os valores a seguir para a energia interna (u) vapor
d’água super aquecido a 0.1 Mpa (aproximadamente 1 atm) em função da temperatura (T ).
T (°C) u (kJ/kg)
100 2506.7
150 2582.8
200 2658.1
250 2733.7
300 2810.4
400 2967.9
500 3131.6

a) Use um polinômio interpolador para determinar a energia interna a 215 °C. O valor esperado para a
energia interna correspondente a temperatura 215 °C é 2680 .7 kJ/kg.

b) Use um polinômio interpolador para determinar a temperatura se a energia interna é de 2600 kJ/Kg.
O valor esperado para a temperatura é 161 ◦ C .

Problema (Balística)
Um foguete é lançado na direção mostrada na figura:

e as coordenadas x e y nos vários instantes de tempo t após o lançamento, estão dados na tabela:

a) Calcule x(250), y(250) e y(x(250)), usando polinômio de interpolação sobre todos os pontos.

b) Compare os valores de y(250) e y(x(250)). Os resultados são os mesmos? Deveriam ser?

Observe que para resolver este problema, no item a) você deverá interpolar (ti , xi ), (ti , yi ) e (xi , yi ).

0.3.1 Algoritmo Polinômio de Lagrange


1 ) Entrada de dados : n , x , f ( x ) , z
2 ) r <−− 0
3 ) para i = 1 a t é n f a ç a
c <−− 1 ;
d <−− 1 ;
para j = 1 a t é n f a ç a
s e i d i f e r e n t e de j e n t ã o
c <−− c ∗ ( z−x ( j ) ) ;
d <−− d ∗ ( x ( i ) − x ( j ) ) ;
fimse
fimpara
r <−− r+y ( i ) ∗ ( c /d )
fimpara
4) e s c r e v e r
Programação de Computadores e Métodos Numéricos
Curso: Engenharia Civil Turma: 5CVAN

0.3.2 Implementação Matlab/Octave para o Polinômio de Lagrange


1 %**********************************************************
2 %******** PROGRAMA INTERPOLAÇÃO DE LAGRANGE ********
3 % Objetivo : Calcula valor interpolado por meio do polinômio interpolador de Lagrange
4 % Autor :
5 % Data :
6 %***********************************************************
7 %******** VARIÁVEIS *********
8 % x : abscissas
9 % fx : ordenadas
10 % z : valor a ser interpolado
11 % n : número de pontos do domínio
12 % r : resultado da interpolação para z
13 % i , j : contadores
14 %***********************************************************
15 % * * * * * * * * * * * * * * * * * INICIO DO PROGRAMA * * * * * * * * * * * * * * * * * * * * * *
16 clear all ;
17 close all ;
18 %***********************************************************
19 %******** ENTRADA DE DADOS VIA TECLADO *********
20 disp ( ’ Encontra interpolador de Lagrange ’);
21 x = input ( ’ Entre com os pontos do domínio ’);
22 fx = input ( ’ Entre com os pontos da imagem ’);
23 z = input ( ’ Entre com o valor a ser interpolado ’);
24 dt = datestr ();
25 n = length ( x );
26 %***********************************************************
27 %******** ABERTURA DE ARQUIVO DE ESCRITA *********
28 fid = fopen (" m e u n o m e _ p c m n 2 _ 6 e m a n _ n º e x e r c i c i o . txt " ," w ");
29 fprintf ( fid , " Programação de Computadores e Métodos Numéricos \ n ");
30 fprintf ( fid , " Nome : \ n ");
31 fprintf ( fid , " Turma : \ n ");
32 fprintf ( fid , " Data : % s \ n \ n " , dt );
33 fprintf ( fid , " Número de pontos do domínio % d \ n " , n );
34 fprintf ( fid , [ repmat ( ’%.0 f \t ’ , 1 , size (x , 2)) ’\n ’] , x );
35 fprintf ( fid , [ repmat ( ’%.1 f \t ’ , 1 , size ( fx , 2)) ’\n ’] , fx );
36 %***********************************************************
37 %******** CALCULA VALOR A SER INTERPOLADO *********
38 r = 0;
39 for i = 1:1: n
40 c = 1;
41 d = 1;
42 for j = 1:1: n
43 if ( i ~= j )
44 c = c *( z - x ( j ));
45 d = d *( x ( i ) - x ( j ));
46 end
47 end
48 r = r + fx ( i )*( c / d );
49 end
50 %***********************************************************
51 %******** FECHAMENTO DE ARQUIVO DE ESCRITA *********
52 fprintf ( fid , " O valor interpolado é f (%.0 f ) = %.1 f \ n " , z , r );
53 fclose ( fid )
54 %***********************************************************
55 %******** FIM DO PROGRAMA *********
56 %***********************************************************

Obs: Implementação usando funções built-in do Matlab : substituir as linhas 40 a 50 por polyfit(x,fx,6); r =
polyval(x,fx,z);

Resolução do problema 0.2.1: A partir dos pontos X0 = (0 .1 , 1 .221 ) e X1 = (0 .6 , 3 .320 ) e usando a aproximação
f((x) ≈ p1 (xi ) = a0(+ a1 xi = yi montamos o seguinte sistema de equações lineares com as incógnitas a0 e a1
         
p1 (x0 ) = y0 a0 + a1 x0 = y0 1 x0 a0 y0 1 x0 a0 y0
→ → = → =
p1 (x1 ) = y1 a0 + a1 x1 = y1 1 x1 a1 y1 0 x1 − x0 a1 y1 − y0

y1 −y0
A solução da equação matricial anterior é a1 = x1 −x0
e a0 = y0 − a1 x0 , ou seja, o polinômio p1 (x) = a0 + a1 x procurado é
y1 −y0
p1 (x) = y0 + x1 −x0
(x − x0 ).

Os valores esperados são p1 (0.2) = 1.641 e p1 (0.3) = 2.061. Compare os valores obtidos com os valores de f (x ) = e 2x .
Programação de Computadores e Métodos Numéricos
Curso: Engenharia Civil Turma: 5CVAN

0.4 Biomecânica
Consideramos um teste para estabelecer a relação entre tensão σ (MPa = 100 N/cm²) e deformação
 de uma amostra de um disco intervertebral.

A partir dos dados coletados na tabela a seguir deve-se estimar a deformação correspondente a
tensão σ = 0.09 MPa.
σ 0.00 0.06 0.14 0.25 0.31 0.47 0.60 0.70
 0.00 0.08 0.14 0.20 0.23 0.25 0.28 0.29

0.4.1 Polinômio de Newton


Operador de diferenças divididas
Dada y = f (x) uma função que passa pelos pontos (xi , f (xi )), i = 0, 1, 2, 3, ..., n. O operador de
diferença dividida ∆i de ordem i é definido como:
a) ordem 0: ∆0 yi = yi = [xi ],
∆0 yi+1 −∆0 yi yi+1 −yi
b) ordem 1: ∆yi = xi+1 −xi = xi+1 −xi = [xi , xi+1 ],
∆0 yi+2 −∆0 yi ∆0 y −∆0 y yi+2 −yi+1 y −y
∆yi+1 −∆yi xi+2 −xi
− xi+1 −x i xi+2 −xi+1
− xi+1 −xi
c) ordem 2: ∆2 yi = xi+2 −xi = xi+2 −xi
i+1 i
= i+1
xi+2 −xi
i
= [xi , xi+1 , xi+2 ],

∆n−1 yi+1 −∆n−1 yi


d) ordem n: ∆n yi = xi+n −xi = [xi , xi+1 , . . . , xi+n ].

Sejam os n+1 pontos (xi , f (xi )), i = 0, 1, 2, 3, ..., n e P (x) um polinômio de grau n tal que P (xi ) = yi .
A diferença dividida de ordem 1 é
P (x)−P (x0 )
[x, x0 ] = x−x0 (1),

de onde obtemos
P (x) = P (x0 ) + [x, x0 ] (x − x0 ) (2)

Da diferença dividida de ordem 2 obtemos [x, x0 ], pois


[x,x0 ]−[x0 ,x1 ]
[x, x0 , x1 ] = x−x1 ⇒ [x, x0 ] = [x0 , x1 ] + [x, x0 , x1 ] (x − x1 ) (3)

Substituindo a equação (2) na equação (1)


P (x) = P (x0 ) + [x0 , x1 ] (x − x0 ) + [x, x0 , x1 ] (x − x0 )(x − x1 ) (4)

Da diferença dividida de ordem 3 obtemos [x, x0 , x1 ], pois


[x,x0 ,x1 ]−[x0 ,x1 ,x2 ]
[x, x0 , x1 , x2 ] = x−x2 ⇒ [x, x0 , x1 ] = [x0 , x1 , x2 ] + [x, x0 , x1 , x2 ] (x − x2 ) (5)

Substituindo a equação (4) na equação (3)


P (x) =
P (x0 ) + [x0 , x1 ] (x − x0 ) + [x0 , x1 , x2 ] (x − x0 )(x − x1 ) + [x, x0 , x1 , x2 ] (x − x0 )(x − x1 )(x − x2 ) (6)
Programação de Computadores e Métodos Numéricos
Curso: Engenharia Civil Turma: 5CVAN

Da diferença dividida de ordem 4 obtemos [x, x0 , x1 , x2 ] e substituímos na equação (5). Obtendo as


diferenças divididas até a ordem n+1 e substiuindo da mesma forma na expresão de P (x) temos:

P (x) = P (x0 ) + [x0 , x1 ] (x − x0 ) + [x0 , x1 , x2 ] (x − x0 )(x − x1 ) + [x0 , x1 , x2 , x3 ] (x − x0 )(x − x1 )(x − x2 )+

+ [x0 , x1 , x2 , x3 , x4 ] (x − x0 )(x − x1 )(x − x2 )(x − x3 ) + [x0 , x1 , x2 , x3 , x4 , x5 ] (x − x0 )(x − x1 )(x − x2 )(x −


x3 )(x − x4 ) + · · · +

+ [x0 , x1 , x2 , . . . , xn ] (x − x0 )(x − x1 )(x − x2 ) . . . (x − xn−1 ) + [x, x0 , x1 , . . . , xn ] (x − x0 )(x − x1 )(x −


x2 ) . . . (x − xn )

É possível provar que para um polinômio de grau n a diferença dividida [x, x0 , x1 , . . . , xn ] = 0. Dessa
forma chegamos a seguinte expressão para o polinômio de Newton:

Pn (x) = Pn (x0 ) + ∆y0 (x − x0 ) + ∆2 y0 (x − x0 )(x − x1 ) + · · · + ∆n y0 (x − x0 ) . . . (x − xn−1 ),

como Pn (x0 ) = y0 , então


n i−1
∆ i y0
P Q
Pn (x) = y0 + (x − xj )
i=1 j=0

0.4.2 Exemplo numérico


Sejam os dados tabelados a seguir:

x 0,1 0,3 0,4 0,6 0,7


y 0,3162 0,5477 0,6325 0,7746 0,8367

Calcular o valor de y = y(0,2) por meio de um polinômio interpolador de Newton de grau 4. Conforme
n Q i−1
a expressão Pn (x) = y0 + ∆i y0 (x − xj ) o polinômio P4 (x ) é dado por
P
i=1 j=0

P4 (x) =
y0 +∆y0 (x−x0 )+∆2 y 0 (x−x0 )(x−x1 )+∆3 y 4
0 (x−x0 )(x−x1 )(x−x2 )+∆ y0 (x−x0 )(x−x1 )(x−x2 )(x−x3 ),

∆n−1 yi+1 −∆n−1 yi


A partir da expressão geral das diferenças divididas ∆n yi = xi+n −xi , contruimos a seguinte
tabela:
i xi yi ∆yi ∆ 2 yi ∆ 3 yi ∆4 yi
0 0,1 0,3162 1,1575 -1,0317 1,1468 -1,2447
1 0,3 0,5477 0,8480 -0,4583 0,400
(VERIFIQUE!)
2 0,4 0,6325 0,7746 -0,2983
3 0,6 0,7746 0,6210
4 0,7 0,8367

Segue que P4 (x) = 0, 3162 + 1, 1575(x − 0, 1) + (−1, 0317)(x − 0, 1)(x − 0, 3) + 1, 1468(x − 0, 1)(x −
0, 3)(x − 0, 4) + (−1, 2447)(x − 0, 1)(x − 0, 3)(x − 0, 4)(x − 0, 6)

O valor de P4 (0 , 2 ) = 0 , 4456
Programação de Computadores e Métodos Numéricos
Curso: Engenharia Civil Turma: 5CVAN

0.4.3 Algoritmo Polinômio de Newton


1 ) Entrada de dados : n , x , f ( x ) , z
2 ) r <−− 0
para i = 1 a t é n f a ç a
d e l t a ( i ) <−− f x ( i )
f i m para
3) Diferenças d i v i d i d a s
para i = 1 a t é n−1 f a ç a
para j = m a t é i +1 p a s s o −1 f a ç a
d e l t a ( j ) <−− ( d e l t a ( j )− d e l t a ( j −1 ))/ ( x ( j ) − x ( j −i ) )
fimpara
fimpara
5 ) A v a l i a ç ã o do p o l i n ô m i o
r <−− d e l t a (m)
para i = m−1 a t é 1 p a s s o −1 f a ç a
r <−− r ∗ ( z − x ( i ))+ d e l t a ( i )
fimpara
6) Saida
escreve r

Exercício: Implemente o algoritmo anterior por meio de um programa Matlab/Octave para resolver
o problema 04 (Biomecânica).

0.5 Resistência dos materiais


Realiza-se um teste de tensão para determinar o comportamento tensão-deformação da borracha.
Os dados coletados no teste são mostrados na figura e seus valores são fornecidos a seguir.

Def ormação ε 0 0, 4 0, 8 1, 2 1, 6 2, 0 2, 4 2, 8 3, 2 3, 6 4, 0 4, 4 4, 8 5, 2 5, 6 6, 0
T ensão σ(M P a) 0 3, 0 4, 5 5, 8 5, 9 5, 8 6, 2 7, 4 9, 6 15, 6 20, 7 26, 7 31, 1 35, 6 39, 3 41, 5

a) Determine um polinômio interpolador para ajustar o conjunto de pontos dados. Trace um gráfico
que inclua esses pontos e a curva correspondente ao polinômio.
Obs1 : u t i l i z e o comando p o l y f i t para g e r a r o s c o e f i c i e n t e s do p o l i n ô m i o : p o l = p o l y f i t ( e , s , 1 6 )
Obs2 : para g e r a r um domínio para p o l : z = l i n s p a c e ( e ( 1 ) , e ( end ) , 1 0 0 )
Obs3 : para g e r a r a imagem da f u n ç ã o p o l u t i l i z e : p = p o l y v a l ( pol , z )
Obs4 : para p l o t a r o g r á f i c o dos p o n t o s dados e da f u n ç ã o p o l u t i l i z e o comando :
p l o t ( e , s , ’ ro ’ , z , p , ’ k ’ , ’ l i n e w i d t h ’ , 2 )
Obs5 : para a d i c i o n a r o s r ó t u l o s no g r á f i c o :
x l a b e l ( ’ Deformação ’ , ’ f o n t s i z e ’ , 2 0 )
y l a b e l ( ’ Tensão (MPa) ’ , ’ f o n t s i z e ’ , 2 0 )

Obs: utilize o comando polyfit e polyval para comparar o resultado do primeiro exercício: o valor
esperado é 0 .10691 .

Você também pode gostar