function s= fapprox(x,f,n)
% 本次实验我写的是勒让德多项式逼近已知函数
% 逼近点的x坐标 x,已知函数 f,n 所需项数
if nargin<3
n=5;
end
% xa右端点,xb左端点
xa=x(1);xb=x(end);
% 创建一个空的 n*1的cell矩阵
base=cell(n,1);
% a=-1;b=1;rho=@(x)ones(1,length(x));
% base{1}=@(x)ones(1,length(x));
% for k=2:n
% base{k}=@(x)x.*base{k-1}(x);
% end
% 初始化定义区间
a=-1;b=1;
% 构造矩阵 1行 ,length(x) 列
rho=@(x)ones(1,length(x));
% 规定前两项为base{1},base{2}
base{1}=@(x)ones(1,length(x));
base{2}=@(x)x;
% 从第三项开始,求3到n的项数
for k=3:n
base{k}=@(x)(2*k-3)/(k-1)*x.*base{k-1}(x)-(k-2)/(k-1)*base{k-2}(x);
end
% 区间转换
g0=@(x,xa,xb)(xb-xa)/(b-a)*(x-a)+xa;
g1=@(x,xa,xb)(b-a)/(xb-xa)*(x-xa)+a;
% 积分
iprod=@(x,y)integral(@(t)rho(t).*x(t).*y(t),a,b);
f=@(x)f(g0(x,xa,xb));
% 创建一个 n行1 列的全0 矩阵,存储值
c=zeros(n,1);
% 求系数,存储在数组c中
for i=1:n
c(i)=iprod(base{i},f)/iprod(base{i},base{i});
end
% 构造矩阵 1行 ,length(x) 列 ,存储
s=@(x)zeros(1,length(x));
% 存储项
for k=1:n
s=@(x)s(x)+c(k)*base{k}(x);
end
s=@(x)s(g1(x,xa,xb));
end
fapprox
最新推荐文章于 2023-10-23 10:33:20 发布