Polinomios de Legendre
Ecuación diferencial | |
---|---|
Fórmula de Rodríguez | |
Relación de recurrencia |
Los primeros polinomios de Legendre son.
Utilizamos la función
>> syms x; >> for n=1:7 legendreP(n,x) end ans =x ans =(3*x^2)/2 - 1/2 ans =(5*x^3)/2 - (3*x)/2 ans =(35*x^4)/8 - (15*x^2)/4 + 3/8 ans =(63*x^5)/8 - (35*x^3)/4 + (15*x)/8 ans =(231*x^6)/16 - (315*x^4)/16 + (105*x^2)/16 - 5/16 ans =(429*x^7)/16 - (693*x^5)/16 + (315*x^3)/16 - (35*x)/16
Mediante del comando
>> syms x; >> n=4; >> P4=diff((x^2-1)^n,n)/(2^n*factorial(n)); >> P4=simplify(P4) P4 =(35*x^4)/8 - (15*x^2)/4 + 3/8 >> n=5; >> P5=diff((x^2-1)^n,n)/(2^n*factorial(n)); >> P5=simplify(P5) P5 =(x*(63*x^4 - 70*x^2 + 15))/8
Definimos la función
function p=legendre_p(n) p1=1; p2=[1,0]; if n==0 p=p1; %P0 elseif n==1 p=p2; %P1 else for i=2:n p=((2*(i-1)+1)*[p2,0]-(i-1)*[0,0,p1])/i; p1=p2; p2=p; end end end
Generamos los polinomios de Legendre y comprobamos sus propiedades, etc. La función
>> syms x; >> P4=poly2sym(legendre_p(4)) P4 =(35*x^4)/8 - (15*x^2)/4 + 3/8 >> P5=poly2sym(legendre_p(5)) P5 =(63*x^5)/8 - (35*x^3)/4 + (15*x)/8
Creamos la función recursiva
function res=legendre_r(n,x) if n==0 res=ones(1,length(x)); elseif n==1 res=x; else res=((2*(n-1)+1)*x.*legendre_r(n-1,x)-(n-1)*legendre_r(n-2,x))/n; end end
Las llamadas a las funciones
>> x=0.5; >> legendre_r(4,x) ans = -0.2891 >> polyval(legendre_p(4),x) ans = -0.2891 >> legendreP(4,x) ans = -0.2891
producen los mismos resultados.
Representamos gráficamente los polinomios de P1(x) a P6(x) empleando el comando
hold on for n=1:6 %f=@(x) polyval(legendre_p(n),x); %f=@(x) legendre_r(n,x); f=@(x) legendreP(n,x); fplot(f,[-1,1]); end xlabel('x') ylabel('P_n(x)') title('Polinomios de Legendre') grid on hold off
Propiedades
En la gráfica vemos que
Comprobamos numéricamente mediante la función
integral que el área bajo Pn(x) es nula, para n>1
Pn(1)=1
Pn(-1)=(-1)n
Si n es impar Pn(x)=-Pn(-x), de modo que Pn(0)=0
>> syms x; >> for n=1:4 int(legendreP(n,x),x,-1,1) end ans =0 ans =0 ans =0 ans =0
Ortogonalidad
>> syms x; >> int(legendreP(3,x)*legendreP(4,x),x,-1,1) ans =0 >> int(legendreP(4,x)*legendreP(4,x),x,-1,1) ans =2/9
Derivadas
>> syms x; >> diff(legendreP(3,x)) ans =(15*x^2)/2 - 3/2 >> 3*legendreP(2,x)+x*diff(legendreP(2,x)) ans =(15*x^2)/2 - 3/2
Aproximación de una función mediante los polinomios de Legendre
Polinomio p(x) de grado N
Un polinomio de grado N se puede expresar como una combinación lineal de N+1 polinomios de Legendre Pn(x), n=0, 1,2...N, utilizando las relaciones de ortogonalidad
Por ejemplo, P2(x) es una función simétrica y f(x)=x3 es una función antisimétrica, entonces
Por ejemplo, P3(x) es una función antisimétrica y f(x)=x2 es una función simétrica, entonces
x3 es una combinación de polinomios de Legendre de índice impar y x2 es una combinación de polinomios de Legendre de índice par
Sea el polinomio, f(x)=8x4-8x2+1=c0P0(x)+c1P1(x)+c2P2(x)+c3P3(x)+c4P4(x)
Elaboramos un script para calcular los coeficientes c0, c1, c2, c3 y c4
syms x; p=[8,0,-8,0,1]; %coeficientes del polinomio pol=poly2sym(p); %polinomio for n=0:length(p)-1 P=poly2sym(legendre_p(n)); c=(2*n+1)*int(pol*P,x,-1,1)/2; %coeficientes disp([n,c]) end
[ 0, -1/15] [ 1, 0] [ 2, -16/21] [ 3, 0] [ 4, 64/35]
Comprobación
>> 64*poly2sym(legendre_p(4))/35-16*poly2sym(legendre_p(2))/21-1/15 ans =8*x^4 - 8*x^2 + 1
Utilizando la función
syms x; p=[8,0,-8,0,1]; %coeficientes del polinomio pol=poly2sym(p); %polinomio for n=0:length(p)-1 c=(2*n+1)*int(pol*legendreP(n,x),x,-1,1)/2; %coeficientes disp([n,c]) end
Comprobación
>> 64*legendreP(4,x)/35-16*legendreP(2,x)/21-1/15 ans =8*x^4 - 8*x^2 + 1
Función f(x)
Aproximamos la función f(x) mediante la serie

Vamos a aproximar la función f(x)=sgn(x) (función signo de MATLAB) de la figura a la combinación lineal de los N+1 primeros polinomios de Legendre
Para calcular cada uno de los coeficientes cn (n=0...N) utilizamos la función
Primero, calculamos los coeficientes cn y después, la aproximación a la función f(x)
N=10; c=zeros(1,N+1); for n=0:N c(n+1)=integral(@(x)sign(x).*legendreP(n,x),-1,1)*(n+1/2); end x=-1:0.02:1; y=zeros(1,length(x)); for n=0:N y=y+c(n+1)*legendreP(n,x); end hold on line([-1,0],[-1,-1]) line([0,1],[1,1]) plot(x,y,'r') hold off xlabel('x') ylabel('f(x)') title('Aproximación mediante polinomios de Legendre') grid on
En color azul se dibuja la función f(x) y en color rojo la aproximación mediante la combinación lineal de los N+1=11 primeros polinomios de Legendre.
Polinomios asociados de Legendre
La ecuación diferencial y su solución, los polinomios asociados de Legendre, son
Los primeros polinomios asociados de Legendre son
syms x; for n=0:4 for m=0:n y=(1-x^2)^(m/2)*diff(legendreP(n,x),m); disp([n,m]) y=simplify(y) end end
0 0 y =1 1 0 y =x 1 1 y =(1 - x^2)^(1/2) 2 0 y =(3*x^2)/2 - 1/2 2 1 y =3*x*(1 - x^2)^(1/2) 2 2 y =3 - 3*x^2 3 0 y =(x*(5*x^2 - 3))/2 3 1 y =(1 - x^2)^(1/2)*((15*x^2)/2 - 3/2) 3 2 y =-15*x*(x^2 - 1) 3 3 y =15*(1 - x^2)^(3/2) 4 0 y =(35*x^4)/8 - (15*x^2)/4 + 3/8 4 1 y =(5*x*(1 - x^2)^(1/2)*(7*x^2 - 3))/2 4 2 y =-(x^2 - 1)*((105*x^2)/2 - 15/2) 4 3 y =105*x*(1 - x^2)^(3/2) 4 4 y =105*(x^2 - 1)^2
Relaciones de ortogonalidad
Comprobamos la primera integral. Sea n=3, k=2 y m=2
>> syms x; >> int(45*x*(1-x^2)^2,x,-1,1) ans =0
Comprobamos la segunda integral. Sea n=3 y m=3
>> int(15^2*(1-x^2)^3,x,-1,1) ans =1440/7 >> format rat >> 2*factorial(6)/7 ans = 1440/7
Ejemplos en el curso de Física
La ecuación de Laplace, coordenadas esféricas
Esfera conductora y esfera dieléctrica en un campo eléctrico uniforme
La ecuación de Laplace, varilla y semiesfera cargada
La ecuación de Laplace, anillo y disco cargado
Vibraciones de una cuerda en rotación
La ecuación de Schrödinger en coordenadas esféricas (I)
Potencial de Morse y potencial de Pöschl–Teller
Referencias
Alan Jeffrey, Hui-Hui Dai. Handbook of Mathematical Formulas and Integrals. Elsevier (2008). págs. 310-313