7- Com Python, determinar o polinomio de grau 3 que interpola os pontos (0,1),(1,6), (2,5),(3,-8). Além disso, plotar o gráfico da interpolação.

Passo 1

O enunciado pede duas coisas: (1) determinar, com Python, o polinômio de grau 3 que interpola os pontos (0,1), (1,6), (2,5) e (3,-8); (2) plotar o gráfico dessa interpolação.
Informações dadas (os pontos):
(0,1),\quad (1,6),\quad (2,5),\quad (3,-8).
Nada mais foi pedido (por exemplo: forma do polinômio). Vou encontrar explicitamente os coeficientes do polinômio cúbico que passa por esses quatro pontos e mostrar como gerar o gráfico em Python.

Passo 2

Modelo do polinômio: suponha que o polinômio de grau 3 seja
p(x)=ax^{3}+bx^{2}+cx+d,
onde a,b,c,d são os coeficientes desconhecidos que precisamos determinar. Cada ponto (x_i,y_i) fornece uma equação \;a x_i^{3}+b x_i^{2}+c x_i+d=y_i\;. Vou escrever as quatro equações geradas pelos pontos dados.
Ponto (0,1) dá:
a\cdot 0^{3}+b\cdot 0^{2}+c\cdot 0+d=1 \quad\Rightarrow\quad d=1.
Ponto (1,6) dá:
a\cdot 1^{3}+b\cdot 1^{2}+c\cdot 1+d=6 \quad\Rightarrow\quad a+b+c+d=6.
Ponto (2,5) dá:
a\cdot 2^{3}+b\cdot 2^{2}+c\cdot 2+d=5 \quad\Rightarrow\quad 8a+4b+2c+d=5.
Ponto (3,-8) dá:
a\cdot 3^{3}+b\cdot 3^{2}+c\cdot 3+d=-8 \quad\Rightarrow\quad 27a+9b+3c+d=-8.
Agora usamos d=1 nas outras três equações para simplificar.

Passo 3

Substituindo d=1 nas equações restantes:
Da equação em x=1:
a+b+c+1=6 \quad\Rightarrow\quad a+b+c=5. \tag{1}
Da equação em x=2:
8a+4b+2c+1=5 \quad\Rightarrow\quad 8a+4b+2c=4. \tag{2}
Da equação em x=3:
27a+9b+3c+1=-8 \quad\Rightarrow\quad 27a+9b+3c=-9. \tag{3}
Agora vou eliminar c usando (1). Da (1):
c=5-a-b. \tag{4}
Substituo (4) em (2) e (3).
Em (2):
8a+4b+2(5-a-b)=4.
Desenvolvendo:
8a+4b+10-2a-2b=4 \quad\Rightarrow\quad 6a+2b+10=4 \quad\Rightarrow\quad 6a+2b=-6.
Dividindo por 2:
3a+b=-3 \quad\Rightarrow\quad b=-3-3a. \tag{5}
Agora uso (4) e (5) em (3). Primeiro calcule c em função de a usando (4) e (5):
c=5-a-b=5-a-(-3-3a)=5-a+3+3a=8+2a. \tag{6}
Substituindo b e c em (3):
27a+9(-3-3a)+3(8+2a)=-9.
Calcule passo a passo:
27a-27-27a+24+6a=-9.
Simplificando:
-3+6a=-9 \quad\Rightarrow\quad 6a=-6 \quad\Rightarrow\quad a=-1.

Passo 4

Com a=-1 voltamos a (5) e (6) para encontrar b e c:
De (5):
b=-3-3a=-3-3(-1)=-3+3=0.
De (6):
c=8+2a=8+2(-1)=8-2=6.
E já tínhamos d=1. Portanto os coeficientes são
a=-1,\quad b=0,\quad c=6,\quad d=1.
Logo o polinômio interpolador é
p(x)=-x^{3}+6x+1.
Fazendo uma checagem rápida nos pontos:
p(0)=1,\quad p(1)=-1+6+1=6,\quad p(2)=-8+12+1=5,\quad p(3)=-27+18+1=-8,
todos corretos.

Passo 5

Agora a parte “com Python”: vou mostrar dois jeitos simples de obter o mesmo resultado em Python e como plotar.
Método A — usando resolução do sistema linear (Vandermonde):
  • Monta-se a matriz de Vander-monde V com linhas [x_i^{3},x_i^{2},x_i,1] e resolve-se V\cdot [a,b,c,d]^{T}=[y_i]^{T}.
Método B — usando numpy.polyfit:
  • A função \verb|numpy.polyfit(x,y,deg)| ajusta um polinômio de grau \verb|deg| por mínimos quadrados; para pontos distintos com deg igual ao número de pontos menos 1 ela devolve exatamente o polinômio interpolador.
Abaixo está um script completo que mostra ambos os métodos e plota os pontos e a curva do polinômio. Copie e cole em um arquivo Python e execute (precisa de numpy e matplotlib instalados).
import numpy as np
import matplotlib.pyplot as plt

# pontos dados
x = np.array([0, 1, 2, 3], dtype=float)
y = np.array([1, 6, 5, -8], dtype=float)

# Método A: montar Vandermonde e resolver
V = np.vander(x, 4)       # matriz Vandermonde com colunas x^3, x^2, x, 1
coeffs_v = np.linalg.solve(V, y)  # coeffs_v = [a, b, c, d]
print("Coeficientes (resolvendo sistema):", coeffs_v)

# Método B: numpy.polyfit (retorna coeficientes do grau máximo ao termo constante)
coeffs_p = np.polyfit(x, y, 3)
print("Coeficientes (numpy.polyfit):    ", coeffs_p)

# Observação: ambos os arrays devem ser equivalentes (até pequenos erros numéricos)
# Vamos construir uma função polinomial a partir dos coeficientes (poly1d facilita)
p = np.poly1d(coeffs_p)   # p(x) é o polinômio interpolador

# Preparar uma grade densa para plot
xx = np.linspace(-0.5, 3.5, 400)
yy = p(xx)

# Plot
plt.figure(figsize=(7,5))
plt.plot(xx, yy, label='Polinômio interpolador (grau 3)')
plt.scatter(x, y, color='red', zorder=5, label='Pontos dados')
plt.axhline(0, color='gray', linewidth=0.5)
plt.axvline(0, color='gray', linewidth=0.5)
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('Interpolação polinomial (grau 3)')
plt.grid(True)
plt.show()
Explicação rápida das linhas importantes:
  • \verb|np.vander(x,4)| cria a matriz com potências x^{3},x^{2},x,1.
  • \verb|np.linalg.solve(V,y)| resolve o sistema linear V\cdot c = y retornando o vetor de coeficientes c=[a,b,c,d].
  • \verb|np.polyfit(x,y,3)| devolve coeficientes no formato [a,b,c,d] com a do termo x^{3}.
  • \verb|np.poly1d(coeffs)| cria um objeto polinomial que facilita avaliar o polinômio em muitos pontos para plotagem.

Passo 6

Interpretação do resultado e dica para a prova:
  • Se você estiver sem calculadora simbólica, o primeiro passo útil é perceber que pelo ponto (0,1) já sai d=1. Isso reduz a quantidade de trabalho.
  • Montar o sistema linear e eliminar incógnitas (substituição) é uma forma manual direta e eficaz para 4 pontos.
  • Em programação (Python), use \verb|np.vander|+\verb|np.linalg.solve| ou \verb|np.polyfit| para obter os coeficientes automaticamente.
  • Sempre verifique nos pontos dados substituindo-os no polinômio final — é uma checagem rápida.

Resposta

-x^{3}+6x+1
(a,b,c,d)=(-1,0,6,1)

Exercícios relacionados