问题标题:
我这有一个关于勒让德多项式作为基函数最小二乘拟合的程序,但拟合后怎么判断误差啊我用的最佳平方误差来判断,结果每个数据的误差都很大,一般书上的误差值只有0.005左右,而我的误差很
问题描述:

我这有一个关于勒让德多项式作为基函数最小二乘拟合的程序,但拟合后怎么判断误差啊我用的最佳平方误差来判断,结果每个数据的误差都很大,一般书上的误差值只有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

唐新桥回答:
  没有对xx做数据归一化,而且有些地方有错,改成这样了function[p,a,F]=Legendre(xx,yy,w,n)%xx为拟合的横坐标数据%yy为拟合的纵坐标数据%w为权函数,可为数据出现的次数%n为要拟合的最高次数,最高次数小于横坐标个数if...
查看更多
数学推荐
热门数学推荐