Los polinomios de Hermite fueron introducidos por el matemático francés Charles Hermite en el siglo XIX, mientras estudiaba problemas de interpolación y ecuaciones diferenciales. Aunque su uso moderno se enfoca mucho en análisis numérico, probabilidades y física cuántica, en sus inicios surgieron como herramientas para interpolar funciones cuando se conocen tanto los valores como las derivadas en ciertos puntos. Desde entonces, han sido muy utilizados en matemática aplicada y estadística.
El interpolante de Hermite es un polinomio que no solo coincide con una función en ciertos puntos, sino que también iguala sus derivadas en esos puntos. Esto lo diferencia de la interpolación de Lagrange, que solo usa los valores. Se construye usando productos de polinomios base multiplicados por diferencias divididas, incorporando derivadas para asegurar una mejor aproximación local. Es especialmente útil para funciones suaves donde se requiere que el polinomio interpolante conserve también la pendiente.
Se usa en interpolación numérica cuando se conocen tanto los valores como las derivadas de una función en ciertos puntos. Es muy útil en análisis de señales, gráficos por computadora y dinámica de partículas, donde se requiere continuidad en posición y velocidad. También aparece en ecuaciones diferenciales, física cuántica (oscilador armónico) y en métodos numéricos para aproximar funciones con mayor precisión en regiones locales.
.
function H = hermite_interpol(x, f, df)
n = length(x);
z = zeros(1, 2*n);
Q = zeros(2*n, 2*n);
% Asignar valores duplicados de x y f(x)
for i = 1:n
z(2*i-1) = x(i);
z(2*i) = x(i);
Q(2*i-1, 1) = f(i);
Q(2*i, 1) = f(i);
Q(2*i, 2) = df(i);
if i ~= 1
Q(2*i-1, 2) = (Q(2*i-1, 1) - Q(2*i-2, 1)) / (z(2*i-1) - z(2*i-2));
end
end
% Calcular diferencias divididas
for j = 3:2*n
for i = j:2*n
Q(i, j) = (Q(i, j-1) - Q(i-1, j-1)) / (z(i) - z(i-j+1));
end
end
% Mostrar tabla de diferencias (opcional)
disp('Tabla de diferencias divididas:')
disp(Q)
% Construir el polinomio de Hermite
syms X
H = Q(1,1);
prod_term = 1;
for i = 2:2*n
prod_term = prod_term * (X - z(i-1));
H = H + Q(i,i) * prod_term;
end
disp('Polinomio de Hermite:')
disp(expand(H))
end