function p = legendre(t,n)
%求勒让德多项式的函数
%计算勒让德多项式中的x^2-1
f = ( t * t - 1)^n;
%对f多项式进行n阶求导
y = diff( f , n);
%求n得阶乘
str = prod(1 : n);
%勒让德多项式的一般表示式
l = (1 / (2^n * str))*y;
%对求出的勒让德多项式进行合并同类项
p = collect(l);
end
%求勒让德多项式的函数
%计算勒让德多项式中的x^2-1
f = ( t * t - 1)^n;
%对f多项式进行n阶求导
y = diff( f , n);
%求n得阶乘
str = prod(1 : n);
%勒让德多项式的一般表示式
l = (1 / (2^n * str))*y;
%对求出的勒让德多项式进行合并同类项
p = collect(l);
end
%利用勒让德多项式求解函数逼近的脚本
%初始化定义区间[a,b]
a = 0;
b = 1;
%定义符号变量x
syms x ;
%定义多项式中的n
n = 4;
h=1;
%定义多项式中的中间变量t
t =(2 * x - b - a)/(b - a );
%以为MATLAB中定义的collect函数不适用于0,所以要把当n = 0 是单独写出来。
p = 1
%从1开始依次打印出区间[a,b]上的正交多项式
data=[];
for i = 1 : 1 :n
%p/(2^i)因为此时t=2*x-1在进行求导的过程中由p函数对t求导转变为对x的求导,t=2*x-1两边同时求导dt=2*dx
%所以在最后根据求导的次数要进行相应的除以2^i
p = legendre(t,i)/(2^i);
s = p*p;
h=int(s,0,1);
d=h*p;
data = [data;d];
end
m=sum(data);
vpa(m)