Você está na página 1de 31

Universidade Federal de Sergipe

Métodos Numéricos para Engenharia


Mecânica
Métodos de Interpolação

Prof. Dr. Alexandre Ramos

São Cristóvão
2023
1
Aulas Passadas

• Métodos numéricos para encontrar raízes de


equações.
– Método Iterativo Linear
– Método de Newton-Raphson
– Método da Bissecção
– Método da Falsa Posição
– Método da Secante
– Funções pré-programadas em Python

2
Introdução

Objetivos desta aula

• Programar os métodos numéricos para o cálculo de interpolações e seu passo a passo


para criar códigos Python simples e eficientes que produzam a solução numérica no
grau de precisão necessário.

• Interpolação Linear
• Polinômio Interpolador de Lagrange
• Polinômio Interpolador por diferenças divididas de Newton

3
Introdução

4
Interpolação

• Denomina-se interpolação o método que permite construir um novo


conjunto de dados a partir de um conjunto discreto de dados pontuais
previamente conhecidos

5
Introdução

6
Interpolação Linear

• Método de interpolação que se utiliza de uma função linear p(x) (um


polinômio de primeiro grau) para representar, por aproximação, uma
suposta função f(x) que originalmente representaria as imagens de um
intervalo descontínuo contido no domínio de f(x).
• A interpolação linear entre dois pontos (𝑥0 , 𝑦0 ) e (𝑥1 , 𝑦1 ) pode ser deduzida
usando-se a semelhança de triângulos:

𝑦 − 𝑦0 𝑦1 − 𝑦0
=
𝑥 − 𝑥0 𝑥1 − 𝑥0

𝑥−𝑥0
𝑦 = 𝑦0 +(𝑦1 -𝑦0 ). 𝑥
1 −𝑥0

7
Interpolação Linear

• Suponha que a temperatura medida de uma reação química em um dado intervalo


seja dada por:

Tempo (s) 0 20 40 60 80 100


Temperatura (°C) 26,0 48,6 61,6 71,2 74,8 75,2

8
Interpolação Linear

• Nesse método, as seções conectando qualquer dois pontos dos dados obtidos, é
considerado uma linha reta.

9
Interpolação Linear

• Nesse método, as seções conectando qualquer dois pontos dos dados obtidos, é
considerado uma linha reta.
• Por exemplo, se a temperatura no tempo igual a 50 s é desejado, uma linha
“imaginária” é feita entre (40, 61.6) e (60, 71.2)

10
Interpolação Linear

• Seja pela derivada da linha ou pela semelhanças de triângulos mostrados, a seguinte


equação pode ser escrita.

𝑦 − 𝑦1 𝑦2 − 𝑦1
=
𝑥 − 𝑥1 𝑥2 − 𝑥1

• Então para y em um dado x, teremos:


𝑥−𝑥1
𝑦 = 𝑦1 +(𝑦2 -𝑦1 ). 𝑥
2 −𝑥1

• Então, para a temperatura no tempo igual a 50


segundos, teremos:
50−40
𝑦 = 61,6+(71,2-61,6). 60−40 = 66,4°C

11
Interpolação Linear

• Seja pela derivada da linha ou pela semelhanças de triângulos mostrados, a seguinte


equação pode ser escrita.

𝑦 − 𝑦1 𝑦2 − 𝑦1
=
𝑥 − 𝑥1 𝑥2 − 𝑥1

• Então para y em um dado x, teremos:


𝑥−𝑥1
𝑦 = 𝑦1 +(𝑦2 -𝑦1 ). 𝑥
2 −𝑥1

• Então, para a temperatura no tempo igual a 50


segundos, teremos:
50−40
𝑦 = 61,6+(71,2-61,6). 60−40 = 66,4°C

12
Interpolação Linear

import matplotlib.pyplot as plt #importa da biblioteca matplotlib o modulo de plotar gráficos

tempo=[0, 20, 40, 60, 80, 100] #lista o tempo x


temperatura=[26.0, 48.6, 61.6, 71.2, 74.8, 75.2] #lista a temperatura y

def y(xp, x, y): #define a função y


for i,xi in enumerate(x): #enumera os valores de x com i
if xp < xi: #se o tempo x desejado é menor que o tempo maximo
return y[i-1]+(y[i]-y[i-1])*(xp-x[i-1])/(x[i]-x[i-1]) #calcula o valor de y
else:
print("o valor dado de x esta fora do intervalo") #senão, informa que esta fora do intervalo

temperaturadesejada= y(50, tempo, temperatura) #insere o valor temporal no qual se deseja a temperatura
print("A temperatura = %f" %temperaturadesejada) #imprimi a temperatura desejada

plt.figure() #plota figura


plt.plot(tempo,temperatura,'b--') #plota figura com tempo no eixo x e temperatura no eixo y com curva tracejada em azul
plt.plot(tempo,temperatura,'ro') #plota os pontos das listas tempo e temperatura em vermelho e uma bolinha "ro"
plt.xlabel('Tempo (s)', fontsize=15) #insere o nome do eixo x
plt.ylabel('Temperatura °C', fontsize=15) #insere o nome do eixo y
plt.title('Interpolação da curva reação quimica') #insere o titulo do grafico
plt.grid(True) #insere um grade no fundo do grafico
plt.show() #mostra o grafico

13
Interpolação pelo Met. de Lagrange

Em 1794 criou o Polinômio


Interpolador de Lagrange

Joseph Lagrange
1736-1813
Interpolação pelo Met. de Lagrange

Método de Lagrange
• Esse método é baseado na criação de um polinômio de grau n.
• O grau depende do numero de pontos considerado no conjuntos de dados, então
eles devem conter n+1 pontos.
• Por exemplo, um polinômio de terceiro grau (cúbico), n=3, quatro conjunto de dados
são necessários e serão escritos da forma:

𝑦 𝑥 = 𝑦1 𝑙1 (x) + 𝑦2 𝑙2 (x) + 𝑦3 𝑙3 (x) + 𝑦4 𝑙4 (x)

• Ou de forma geral: 𝑛+1

𝑦 𝑥 = ෍ 𝑦𝑖 𝑙𝑖 (𝑥)
𝑖=1

15
Interpolação pelo Met. de Lagrange

Método de Lagrange
• Onde:
(𝑥 − 𝑥2 ) (𝑥 − 𝑥3 ) (𝑥 − 𝑥4 )
𝑙1 𝑥 =
(𝑥1 − 𝑥2 ) (𝑥1 − 𝑥3 ) (𝑥1 − 𝑥4 )
(𝑥 − 𝑥1 ) (𝑥 − 𝑥3 ) (𝑥 − 𝑥4 )
𝑙2 𝑥 =
(𝑥2 − 𝑥1 ) (𝑥2 − 𝑥3 ) (𝑥2 − 𝑥4 )
(𝑥 − 𝑥1 ) (𝑥 − 𝑥2 ) (𝑥 − 𝑥4 )
𝑙3 𝑥 =
(𝑥3 − 𝑥1 ) (𝑥3 − 𝑥2 ) (𝑥3 − 𝑥4 )
(𝑥 − 𝑥1 ) (𝑥 − 𝑥2 ) (𝑥 − 𝑥3 )
𝑙4 𝑥 =
(𝑥4 − 𝑥1 ) (𝑥4 − 𝑥2 ) (𝑥4 − 𝑥3 )

• Ou de forma geral:
𝑛+1
(𝑥 − 𝑥𝑗 )
𝑙𝑖 𝑥 = ෑ
(𝑥𝑖 − 𝑥𝑗 )
𝑗=1
𝑗≠𝑖
16
Interpolação pelo Met. de Lagrange

Método de Lagrange
• A combinação das duas formas gerais:

𝑛+1 𝑛+1
(𝑥 − 𝑥𝑗 )
𝑦 𝑥 = ෍ 𝑦𝑖 𝑙𝑖 (𝑥) 𝑙𝑖 𝑥 = ෑ
(𝑥𝑖 − 𝑥𝑗 )
𝑖=1 𝑗=1
𝑗≠𝑖

• É dada pela forma geral do polinômio de interpolação de Lagrange.

𝑛+1 𝑛+1
(𝑥 − 𝑥𝑗 )
𝑦 𝑥 = ෍ 𝑦𝑖 ෑ
(𝑥𝑖 − 𝑥𝑗 )
𝑖=1 𝑗=1
𝑗≠𝑖

17
Interpolação pelo Met. de Lagrange

• Do exemplo 1, para a temperatura medida de uma reação química em um dado


intervalo, no instante de tempo igual a 50 segundos, teremos:

Tempo (s) 0 20 40 60 80 100


Temperatura (°C) 26,0 48,6 61,6 71,2 74,8 75,2

• O gráfico ao lado, mostra a diferença entre


uma interpolação polinomial do 5° grau,
pelo método de Lagrange e a interpolação
linear.

18
Interpolação pelo Met. de Lagrange

x=[0, 20, 40, 60, 80, 100] #lista o tempo


y=[26.0, 48.6, 61.6, 71.2, 74.8, 75.2] #lista a temperatura

m=len(x) # comprimento da lista x


n=m-1 #grau do polinomio sempre o numero de elementos menos 1
xp=float(input("entre com o valor de x:"))
yp=0
for i in range (n+1):
L=1
for j in range (n+1):
if j!=i: #Para j diferente de i
L *= (xp-x[j])/(x[i]-x[j]) #calcula L, o operador L*= indica L=L*(xp-x[j])/(x[i]-x[j])
yp += y[i]*L #calcula yp, o operador += indica yp = yp + y[i]*L
print("Para x=%.1f, y=%.1f" % (xp,yp))

Pelo método da interpolação linear foi obtido 66,4°C, para t=50s, e pelo método de
Lagrange, foi obtido 66,9°C, ou seja, 0,5°C de diferença!

19
Interpolação pelo Met. Dif. Div. Newton

Em 1687, foi publicado o


livro Principia
Mathematica com o
método de interpolação
de James Gregory. O
James Gregory procedimento de James
1638-1675 Gregory desde então
ficou conhecido como
Isaac Newton “método de interpolação
Gregory-Newton”
1643-1727
Interpolação pelo Met. Dif. Div. Newton

Polinômio Interpolador por diferenças Divididas de Newton

• O método de Newton é aplicado a um conjunto de dados com a finalidade


de obtenção de um polinômio da forma:
𝑦 𝑥 = 𝑎0 + 𝑎1 𝑥 − 𝑥1 + 𝑎2 𝑥 − 𝑥1 𝑥 − 𝑥2 + ⋯ + 𝑎𝑛 𝑥 − 𝑥1 𝑥 − 𝑥2 ... 𝑥 − 𝑥𝑛

• Isso pode ser feito em dois passos:

1. O procedimento das diferenças divididas para calcular os


coeficientes do polinômio ( os “as”).
2. A substituição dos valores de 𝑥𝑖 dos pares de dados e o valor de x no
polinômio para obtenção do valor interpolado y.

21
Interpolação pelo Met. Dif. Div. Newton
Polinômio Interpolador por diferenças Divididas de Newton

• Diferenças Divididas:
• As diferenças divididas são aplicadas para criar uma tabela com o dado
fornecido mais n colunas de diferença, onde n é o grau do polinômio para n+1
pontos dados.
• No exemplo abaixo, a tabela mostra os níveis de diferenças divididas para 4
conjuntos de dados.

22
Interpolação pelo Met. Dif. Div. Newton

Polinômio Interpolador por diferenças Divididas de Newton


• Diferenças Divididas:

• O valor da coluna (2) é a diferença da segunda coluna em relação ao seu


correspondente valor de x e seu valor é calculado da forma:

(1) (1)
(2) 𝑦𝑖 −𝑦1
𝑦𝑖 = 𝑥𝑖 −𝑥1
, i=2,3,4

• Da mesma forma, a coluna 3 é a diferença do terceiro, então os valores serão:

(2) (2)
(3) 𝑦𝑖 −𝑦2
𝑦𝑖 = 𝑥𝑖 −𝑥2
, i=3,4
• Finalmente, a última coluna contém
um único valor:

(4)
(3)
𝑦4 −𝑦3
(3) - -
𝑦4 = 𝑥4 −𝑥3
23
Interpolação pelo Met. Dif. Div. Newton
Polinômio Interpolador por diferenças Divididas de Newton
• Diferenças Divididas:

• A formula geral para diferenças divididas é da forma:

(j) (j)
(j+1) yi −yj
yi = , j=1,...,n e i=j+1,...,n+1
xi −xj

Onde:

(1) (1)
𝑦1 = 𝑦1 e 𝑦2 = 𝑦2

e assim por diante...

24
Interpolação pelo Met. Dif. Div. Newton

Polinômio Interpolador por diferenças Divididas de Newton


• Diferenças Divididas:

• Os coeficientes dos polinômios serão os valores da diagonal principal da tabela de


diferenças divididas.

• Então: (1) (2) (3) (𝑛+1)


𝑎0 = 𝑦1 , 𝑎1 = 𝑦2 , 𝑎2 = 𝑦3 , … , 𝑎𝑛 = 𝑦𝑛+1

• Por exemplo, os coeficientes do polinômio para 4 grupo de pontos:

25
Interpolação pelo Met. Dif. Div. Newton

Polinômio Interpolador por diferenças Divididas de Newton


• Diferenças Divididas:

• Finalmente, a segunda parte do método de Newton é o cálculo do polinômio para os


valores de x.
• O polinômio abaixo:
𝑦 𝑥 = 𝑎0 + 𝑎1 𝑥 − 𝑥1 + 𝑎2 𝑥 − 𝑥1 𝑥 − 𝑥2 + ⋯ + 𝑎𝑛 𝑥 − 𝑥1 𝑥 − 𝑥2 ... 𝑥 − 𝑥𝑛

• Pode ser reescrito de forma geral como:


𝑛 𝑖

𝑦 𝑥 = 𝑎0 + ෍ ෑ(𝑥 − 𝑥𝑗 𝑎𝑖
𝑖=1 𝑗=1

• Escrevendo os coeficientes da forma de diferenças divididas, o polinômio será:


𝑛 𝑖
(1) (𝑖+1)
𝑦 𝑥 = 𝑦1 + ෍ ෑ(𝑥 − 𝑥𝑗 ) 𝑦𝑖+1
𝑖=1 𝑗=1

26
Interpolação pelo Met. Dif. Div. Newton
• Exercício 3: Construa uma tabela de diferenças divididas para a sequência de dados e
encontre o valor correspondente a x=4.0.
x 0.0 1.5 2.8 4.4 6.1 8.0
y 0.0 0.9 2.5 6.6 7.7 8.0

• Solução: O cálculo analítico (manual) dos dados valores é dado na tabela a seguir:

(0) (1) (2) (3) (4) (5) (6)


0.0 0.0
1.5 0.9 0.6
2.8 2.5 0.89286 0.22528
4.4 6.6 1.5 0.31034 0.053162
6.1 7.7 1.2623 0.14398 -0.024636 -0.045764
8.0 8.0 1.0 0.061538 -0.031489 -0.023514 0.011711

27
Interpolação pelo Met. Dif. Div. Newton
import numpy as np #importa a biblioteca numpy e abrevia para np

x = [0.0, 1.5, 2.8, 4.4, 6.1, 8.0] #lista com os valores no tempo (s)
y = [0.0, 0.9, 2.5, 6.6, 7.7, 8.0] #lista com os valores de temperatura (°C)

n=len(x)-1 #define a ordem da interpolação


Dy = np.zeros((n+1,n+1)) #define uma matriz de zeros de com n+1 linhas e n+1 colunas,
quando usamos o np.zeros é para gerar uma matriz de zeros utilizando a biblioteca numpy "np"
Dy[:,0]=y # todos os valores das linhas somente da coluna 0
for j in range (n):
for i in range(j+1, n+1):
Dy[i,j+1]=(Dy[i,j]-Dy[j,j])/(x[i]-x[j])
print(Dy)

xp=float(input("Entre com o valor de x:"))


yp=Dy[0,0]
for i in range (n):
xprod=1
for j in range (i+1):
xprod *=xp-x[j]
yp+=xprod*Dy[i+1,i+1]
print("Para x= %.1f, y=%.1f" %(xp,yp))

28
Interpolação pelo Met. Dif. Div. Newton

O polinômio passa pelos seguintes pontos como ilustrado no gráfico ao lado:

Entre com x: 4.4


Para x = 4.4, y = 6.6
Entre com x: 8
Para x = 8.0, y = 8.0
Entre com x: 2.8
Para x = 2.8, y = 2.5

29
Próximas Aulas

• Ajustes de Curvas
• Integração Numérica
• Método das Diferenças Finitas
• Método dos Volumes Finitos
...

30
Referências

• Steven C. Chapra e Raymond P. Canale, 2008. Métodos Numéricos Para Engenharia.


McGraw Hill. ISBN:978-8586804878

31

Você também pode gostar