我这有一个关于勒让德多项式作为基函数最小二乘拟合的程序,但拟合后怎么判断误差啊我用的最佳平方误差来判断,结果每个数据的误差都很大,一般书上的误差值只有0.005左右,而我的误差很大,是不是程序写错了?有没有对正交多项式做最小二乘拟合比较熟悉的朋友,请有兴趣的帮忙看看我的程序,需要哪些地方完善
functionp=Legendre(xx,yy,w,n)
%xx为拟合的横坐标数据
%yy为拟合的纵坐标数据
%w为权函数,可为数据出现的次数
%n为要拟合的最高次数,最高次数小于横坐标个数
ifn>length(xx)-1
disp('n过大,超出规定');
return
end
symsx;
p=cell(1,n+1);%存放勒让德多项式函数
l=cell(1,n+1);%存放勒让德多项式关于自变量的的函数值的和
a=cell(1,n+1);%系数a1a2a3...
%求解勒让德多项式
p(1)={1+0*x};
p(2)={x};
fori=1:n-1
p(i+2)={((2*i+1)*x*p{i+1}-i*p{i})/(i+1)};
end
%求解勒让德多项式关于自变量的函数值的和
fori=1:n+1
l(i)={sum([polyval(sym2poly(p{i}),xx)]')};
end
%求解系数a
forj=1:n+1
fori=1:length(xx)
a(j)={(w(i)*yy(i)*l{j})/(w(i)*l{j}*l{j})};
end
end
%求最终多项式
F=0;
fori=1:n+1
F=F+a{i}*p{i};
end
p=[sym2poly(F)]';%多项式由高到低的系数
plot(xx,yy,'o');holdon;
plot(xx,polyval(p,xx));holdon;
YY=polyval(p,xx);%多项式在各数据的拟合值
N=0;
fori=1:length(xx)
N=N+(YY(i)-yy(i))^2;%平方误差的判断
end
N