我这有一个关于勒让德多项式作为基函数最小二乘拟合的程序,但拟合后怎么判断误差啊 我用的最佳平方误差来判断,结果每个数据的误差都很大,一般书上的误差值只有0.005左右,而我的误差很
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 13:58:50
我这有一个关于勒让德多项式作为基函数最小二乘拟合的程序,但拟合后怎么判断误差啊 我用的最佳平方误差来判断,结果每个数据的误差都很大,一般书上的误差值只有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
我这有一个关于勒让德多项式作为基函数最小二乘拟合的程序,但拟合后怎么判断误差啊 我用的最佳平方误差来判断,结果每个数据的误差都很大,一般书上的误差值只有0.005左右,而我的误差很
没有对xx做数据归一化,而且有些地方有错,改成这样了
function [p,a,F]=Legendre(xx,yy,w,n)
%xx为拟合的横坐标数据
%yy为拟合的纵坐标数据
%w为权函数,可为数据出现的次数
%n为要拟合的最高次数,最高次数小于横坐标个数
if n>=length(xx)
disp('n过大,超出规定');
p=0;
return;
end
syms x;
xx=(xx*2-(max(xx)+min(xx)))/(max(xx)-min(xx));%归一化到[-1,1]
p=cell(1,n+1); %存放勒让德多项式函数
a=zeros(1,n+1); %系数a1 a2 a3...
%求解勒让德多项式
p(1)={1+0*x};
p(2)={x};
for i=2:n
p(i+1)={((2*i+1)*x*p{i}-i*p{i-1})/(i+1)};
end
%求解系数a
for k=1:n+1
temp1=0;
temp2=0;
for i=1:length(xx)
temp1=temp1+(w(i)*yy(i)*polyval(sym2poly(p{k}),xx(i)));
temp2=temp2+(w(i)*polyval(sym2poly(p{k}),xx(i))^2);
end
a(k)=temp1/temp2;
end
%求最终多项式
F=0;
for i=1:n+1
F=F+a(i)*p{i};
end
F=inline(F);
plot(xx,yy,'-*');hold on;
YY=F(xx); %多项式在各数据的拟合值
plot(xx,YY,'-..');hold on;
N=0;
for i=1:length(xx)
N=N+(YY(i)-yy(i))^2; %平方误差的判断
end
end
这个真心不太会啊,勒让德函数挺麻烦的说,还要编程...,这是<计算方法>中的问题么,还是数理方程中的啊.