Los Polinomios de Laguerre son las soluciones a la ecuación diferencial:
$$xy'' + (1 - x)y' + ny = 0$$donde n es un entero positivo (para obtener soluciones no singulares). Alternativamente, se define con la ecuación $$L_n(x) = \frac{e^x}{n!} \frac{d^n(x^ne^{-x})}{dx^n} \text{ con } n = 0, 1, 2, 3...$$
Donde cada $L_n$ es un polinomio de Laguerre y una de las soluciones a la ecuación diferencial arriba descrita. Los primeros polinomios de Laguerre son:
$$\begin{array}{rl} L_0 &= 0 \\ L_1 &= -x + 1 \\ L_2 &= \frac{1}{2}(x^2-4x+2) \\ L_3 &= \frac{1}{6}(-x^3+9x^2-18x+6) \\ L_4 &= \frac{1}{24}(x^4 -16x^3+72x^2-96x+24) \end{array}$$Los polinomios de Laguerre son ortogonales en el rango $(0, \infty)$ con la función de peso $e^{-x}$. Es decir:
$$ \int\limits_0^\infty e^{ – x}L_m(x) L_n(x) dx = \begin{cases} 0, & \text{si } m \ne n \\ 1, & \text{si } m = n \end{cases} $$Sean $p(x)$ y $q(x)$ polinomios definidos en el intervalo $[a, b]$. Estos polinomios son ortogonales si cumplen
$$ \int\limits_a^b p(x) \: q(x) \: w(x) \: dx = 0 $$Donde $w(x)$ es una función de peso.
Función de peso, definición informal:
Una función de peso es una herramienta matemática usada al ejecutar una suma, integración o promedio para darle a algunos elementos más peso o influencia sobre el resultado que otros elementos del mismo conjunto. El resultado de la aplicación de dicha función de peso es una suma ponderada o promedio ponderado.
In [2]:
# Ejemplo tomado de:
# http://www.physics.nyu.edu/pine/pymanual/html/chap9/chap9_scipy.html
import numpy as np
import matplotlib.pyplot as plt
import scipy.special # Note to self: leer documentación
fig = plt.figure(1, figsize=(25,14))
x = np.linspace(-5, 8, 256) # Crea un vector de 256 elementos entre -5 y 8
# numpy.polyval genera un polinomio con valores específicos
#
# For example, if
# p = [2.0, 5.0, 1.0]
# polyval(p, x) generates the following quadratic polynomial:
# 2x^2 + 5x +1
#
# SciPy’s special.legendre(n) and special.laguerre(n) functions
# output the coefficients p needed in polyval to produce the
# n-th-order Legendre and Laguerre polynomials, respectively.
#
# Documentación completa de numpy.polyval
# https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyval.html#numpy.polyval
lg0 = np.polyval(scipy.special.laguerre(0),x)
lg1 = np.polyval(scipy.special.laguerre(1),x)
lg2 = np.polyval(scipy.special.laguerre(2),x)
lg3 = np.polyval(scipy.special.laguerre(3),x)
ax6 = fig.add_subplot(326)
ax6.plot(x,lg0, x,lg1, x,lg2, x,lg3)
ax6.axhline(color="grey", ls="--", zorder=-1)
ax6.axvline(color="grey", ls="--", zorder=-1)
ax6.set_xlim(-5,8)
ax6.set_ylim(-5,10)
ax6.text(0.5, 0.9,'Polinomios de Laguerre', ha='center', va='top',
transform = ax6.transAxes)
ax6.text(7.0, 1.7, 'L0', ha='right', va='top')
ax6.text(4.0, -2.0, 'L1', ha='right', va='top', rotation=-20)
ax6.text(6.0, 6.0, 'L2', ha='right', va='top', rotation=45)
ax6.text(4.0, 3.0, 'L3', ha='right', va='top', rotation=20)
plt.show()