Interpolación de una función

Interpolación de una función#

Los polinomios algebraicos son una de las clases de funciones más útiles y conocidas que aplican el conjunto de los números reales en sí mismos. El conjunto de funciones de la forma

\[ P_{n}(x) = a_{n}x^{n} + a_{n-1}x^{n-1} + \cdots + a_{1}x + a_{0}, \]

donde \(n\) es un entero no negativo y \(a_{0},\dots,a_{n}\) son constantes reales.

Teorema 10 (Aproximación de Weierstrass)

Suponga que \(f\) está definida y es continua en \([a, b]\). Para cada \(\varepsilon > 0\), existe un polinomio \(P(x)\) con la propiedad de que

\[ |f(x) - P(x)| < \varepsilon \quad \forall x \in [a,b] \]

Ejemplo 1. Suponga que se necesita calcular los primeros seis polinomios de Taylor sobre \(x_{0}=0\) para \(f(x) = e^{x}\). Esto es

\[ P_{0}(x) = 1, \quad P_{1}(x) = 1 + x, \quad P_{2}(x) = 1 + x + \frac{x^{2}}{2}, \quad P_{3}(x) = 1 + x + \frac{x^{2}}{2} + \frac{x^{3}}{6}, \]
\[ P_{4}(x) = 1 + x + \frac{x^{2}}{2} + \frac{x^{3}}{6} + \frac{x^{4}}{24}, \quad P_{5}(x) = 1 + x + \frac{x^{2}}{2} + \frac{x^{3}}{6} + \frac{x^{4}}{24} + \frac{x^{5}}{120} \]
import numpy as np
import matplotlib.pyplot as plt

# Suprimir advertencias menores de integración durante los bucles de optimización
import warnings
warnings.filterwarnings("ignore")

# Configurar el estilo de graficación para una mejor visualización
plt.style.use('ggplot')
x = np.linspace(-1, 3, 100)

f = lambda x: np.exp(x) # Función original

P0 = lambda x: np.ones_like(x) # 
P1 = lambda x: 1 + x # 
P2 = lambda x: 1 + x + x**2/2 #
P3 = lambda x: 1 + x + x**2/2 + x**3/6 #
P4 = lambda x: 1 + x + x**2/2 + x**3/6 + x**4/24 #
P5 = lambda x: 1 + x + x**2/2 + x**3/6 + x**4/24 + x**5/120 #

# Graficar
plt.figure(figsize=(12, 8))
plt.plot(x, f(x), 'b', linewidth=2, label='f(x) = exp(x)')
plt.plot(x, P0(x), '--', linewidth=2, label='y = P0(x)')
plt.plot(x, P1(x), '--', linewidth=2, label='y = P1(x)')
plt.plot(x, P2(x), '--', linewidth=2, label='y = P2(x)')
plt.plot(x, P3(x), '--', linewidth=2, label='y = P3(x)')
plt.plot(x, P4(x), '--', linewidth=2, label='y = P4(x)')
plt.plot(x, P5(x), '--', linewidth=2, label='y = P5(x)')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.grid(True, alpha=0.3)
plt.axis('tight')
plt.legend()
plt.show()
../_images/9d57c990e88959402f467147f808de049d64e18a21bc9aa5347bdc96afbf4dc6.png

Ejemplo 2. Utilice polinomios de Taylor de diversos grados para \(f(x) = 1/x\), en torno a \(x_{0} = 1\), para aproximar \(f(3) = 1/3\). Entonces, calculamos

\[ f(x) = x^{-1}, \quad f'(x) = -x^{-2}, \quad f''(x) = (-1)^{2}~2\cdot x^{-3}, \]

o de forma general

\[ f^{(k)}(x) = (-1)^{k}~k!~x^{-k-1}, \]

los polinomios de Taylor son

\[ P_{n}(x) = \sum_{k=0}^{n} \frac{f^{(k)}(1)}{k!} (x - 1)^{k} = \sum_{k=0}^{n} (-1)^{k}(x-1)^{k}. \]