%
% Legendre 多项式
%
clear; clc; 
close all;

n=5;  % 计算到 n 次 Legendre 多项式
pp=zeros(n+1,n+1);       % 存放 Legendre 多项式的系数
pp(1,n+1)=1;             % 0 次 Legendre 多项式
pp(2,n+1)=0; pp(2,n)=1;  % 1 次 Legendre 多项式

fprintf(' P0 = 1\n P1 = x \n'); %　输出 P0 和 P1

% 计算 k 次 Legendre 多项式
for k = 2 : n
    pp(k+1,n+1-k:n+1) = conv([2*k-1,0],pp(k,n+2-k:n+1)) - (k-1)*pp(k-1,n+1-k:n+1);
    pp(k+1,:) = pp(k+1,:) / k;
    fprintf(' P%d = %s\n', k, char(poly2sym(pp(k+1,:))));
end

% 绘图
hold on
grid on  
x = -1:0.01:1; 
for k = 1 : n+1
    plot(x,polyval(pp(k,:),x),'LineWidth',2);
    axis([-1,1, -1,1]);
    title(['P',num2str(k-1)]); 
    pause(0.5)
end
hold off

