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