我这有一个关于勒让德多项式作为基函数最小二乘拟合的程序,但拟-查字典问答网
分类选择

来自陈轩的问题

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

1回答
2020-07-29 16:44
我要回答
请先登录
唐新桥

  没有对xx做数据归一化,而且有些地方有错,改成这样了function[p,a,F]=Legendre(xx,yy,w,n)%xx为拟合的横坐标数据%yy为拟合的纵坐标数据%w为权函数,可为数据出现的次数%n为要拟合的最高次数,最高次数小于横坐标个数if...

2020-07-29 16:45:08

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •