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.
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.