1、 试修改参考程序,使用正交多项式作为基底
考虑使用勒让德多项式,修改程序如下:
function S=square(a,b,n) %定义逼近函
global i j
if nargin<3
n=1;
end
X=zeros(n+1);
for i=0:n
for j=0:n
X(i+1,j+1)=quad(@rho_phi,a,b); %求rho_phi积分
end
end
Y=zeros(n+1,1);
for i=0:n
Y(i+1)=quad(@fun_phi,a,b); %求fun_phi积分
end
S=X\Y;
function y=rho_phi(x)
global i j
y=(rho(x).*phi_k(x,i)).*phi_k(x,j);
function y=fun_phi(x)
global i;
y=(rho(x).*phi_k(x,i)).*obj(x);
function y=rho(x) %权函数
y=1;
function y=phi_k(x,k); %多项式函数
if k==0
y=ones(size(x));
elseif k==1 %勒让德多项式
y=x;
elseif k==2
y=(3.*x.^2-1)/2;
elseif k==3
y=1/2.*(5.*x.^3-3*x);
end
function y=obj(x) %被逼近函数
y=exp(x);
主函数:
fplot(@(x)exp(x),[-1,5]);
hold on
c2=square(-1,5,2);
x=-1:0.1:5;
y2=polyval(flipud(c2),x);
c3=square(-1,5,3);
y3=polyval(c3,x);
plot(x,y2,x,y3);
legend('原函数','2次最佳平方逼近','3次最佳平方逼近');