最小二乘法曲线拟合原理及matlab实现_第1页
最小二乘法曲线拟合原理及matlab实现_第2页
最小二乘法曲线拟合原理及matlab实现_第3页
最小二乘法曲线拟合原理及matlab实现_第4页
免费预览已结束,剩余1页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、曲线拟合( curve-fitting ): 工程实践中,用测量到的一些离散的数据( X, yj,i 0,1,2,.m求一个近似的函数(x)来拟合这组数据,要求所得的拟合曲 线能最好的反映数据的基本趋势(即使 (x)最好地逼近f x,而不必满足插值 原则。因此没必要取 (X)=yi,只要使i (Xi) yi尽可能地小)。原理:给定数据点 ( xi,yi),i0 ,1 , 2, . . . m 。求近似曲线 ( x) 。并且使得近似曲线与 f x 的偏差最小。近似曲线在该点处的偏差 i(xi ) yi , i=1,2,.,m 。常见的曲线拟合方法:1. 使偏差绝对值之和最小2. 使偏差绝对值最大

2、的最小3. 使偏差平方和最小最小二乘法:按偏差平方和最小的原则选取拟合曲线, 并且采取二项式方程为拟合曲线的方法 ,称为最小 二乘法。推导过程:1. 设拟合多项式为:2. 各点到这条曲线的距离之和,即偏差平方和如下:3问题转化为求待定系数 a0.ak对等式右边求 q偏导数,因而我们得到了:4、把这些等式化简并表示成矩阵的形式,就可以得到下面的矩阵:5. 将这个范德蒙得矩阵化简后可得到 :6. 也就是说 X*A=Y ,那么 A = (X*X)-1*X*Y ,便得到了系数矩阵 A ,同时,我们也就得 到了拟合曲线。MATLAB 实现:MATLAB 提供了 polyfit ()函数命令进行最小二乘曲

3、线拟合。调用格式: p=polyfit(x,y,n)p,s= polyfit(x,y,n)p,s,mu=polyfit(x,y,n)x,y 为数据点, n 为多项式阶数,返回 p 为幂次从高到低的多项式系数向量 p。 x 必须是单调的。矩阵s包括R (对x进行QR分解的三角元素)、df(自由度)、 normr(残差)用于生成预测值的误差估计。p,s,mu=polyfit(x,y,n) 在拟合过程中,首先对 x 进行数据标准化处理,以在拟合 中消除量纲等影响,mu包含标准化处理过程中使用的x的均值和标准差。 polyval( ) 为多项式曲线求值函数,调用格式 : y=polyval(p,x)y

4、,DELTA=polyval(p,x,s) y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。y,DELTA=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计丫 DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。 则 丫 DELTA 将至少包含 50%的预测值。如下给定数据的拟合曲线: x=0.5,1.0,1.5,2.0,2.5,3.0, y=1.75,2.45,3.81,4.80,7.00,8.60。 解: MATLAB 程序如下: x=0.5,1.0,1.5,2.0,2.5,3.0;y=1.75,2.45,3.

5、81,4.80,7.00,8.60;p=polyfit(x,y,2) x1=0.5:0.05:3.0;y1=polyval(p,x1); plot(x,y,*r,x1,y1,-b) 运行结果如图 1 计算结果为: p =0.5614 0.8287 1.1560 即所得多项式为 y=0.5614xA2+0.08287x+1.15560图1 最小二乘法曲线拟合示例 对比检验拟合的有效性: 例:在0, n区间上对正弦函数进行拟合,然后在0,2 n区间画出图形,比较拟合 区间和非拟合区间的图形,考察拟合的有效性。在 MATLAB 中输入如下代码:clearx=0:0.1:pi; y=sin(x);p,

6、mu=polyfit(x,y,9) x1=0:0.1:2*pi;y1=sin(x1);% 实际曲线y2=polyval(p,x1);%根据由区间0到pi上进行拟合得到的多项式计算 0到2pi上 的函数值,%需要注意的是polyval ()返回的函数值在pi到2pi上并 没有进行拟合plot(x1,y2,k*,x1,y1,k-)运行结果:p =0.0000 0.0000 -0.0003 0.0002 0.0080 0.0002 -0.1668 0.0000 1.0000 0.0000mu =R: 10x10 doubledf: 22 normr: 1.6178e-07MATLAB 的最优化工具箱

7、还提供了 lsqcurvefit ()函数命令进行最小二乘曲线 拟合(Solve non li near curve-fitti ng (data-fitti ng) problems in least-squares sense)。调用格式:x = lsqcurvefit(fun,x0,xdata,ydata)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)x = lsqcurvefit(problem)x,resnorm = lsqcurvefit(.)x,r

8、esnorm,residual = lsqcurvefit(.)x,resnorm,residual,exitflag = lsqcurvefit(.)x,resnorm,residual,exitflag,output = lsqcurvefit(.) x,resnorm,residual,exitflag,output,lambda = lsqcurvefit(.) x,resnorm,residual,exitflag,output,lambda,jacobian = x0 为初始解向量 ;xdata , ydata 为满足关系 ydata=F(x, xdata) 的数据 ;lb、ub为

9、解向量的下界和上界,若没有指定界,则lb= , ub=;options 为指定的优化参数 ;fun 为拟合函数,其定义方式为 :x = lsqcurvefit(myfun,x0,xdata,ydata) , 其中 myfun 已定义为 function F = myfun(x,xdata)F =%计算x处拟合函数值fun的用法与前面相同;resnorm=sum (fun(x,xdata)-ydataF2),即在 x 处残差的平方和; residual=fun(x,xdata)-ydata ,即在 x 处的残差 ;exitflag 为终止迭代的条件 ;output 为输出的优化信息 ;lambd

10、a 为解 x 处的 Lagrange 乘子 ;jacobian 为解 x 处拟合函数 fun 的 jacobian 矩阵。例: lsqcurvefit() 优化程序Data = .0.00005.89550.10003.56390.20002.51730.30001.97900.40001.89900.50001.39380.60001.13590.70001.00960.80001.03430.90000.84351.00000.68561.10000.61001.20000.53921.30000.39461.40000.39031.50000.54741.60000.34591.7000

11、0.13701.80000.22111.90000.17042.00000.2636;t = Data(:,1);y = Data(:,2);% axis(0 2 -0.5 6)plot(t,y,ro)title(Data points)%We would like to fit the function y = c(1)*exp(-lam(1)*t) + c(2)*exp(-lam(2)*t) to the data %The lsqcurvefit function solves this type of problem easily.%To begin, define the param

12、eters in terms of one variable x:%x(1) = c(1)%x(2) = lam(1)%x(3) = c(2)%x(4) = lam(2)%Then define the curve as a function of the parameters x and the data t:F = (x,xdata)x(1)*exp(-x(2)*xdata) + x(3)*exp(-x(4)*xdata);x0 = 1 1 1 0;x,resnorm,exitflag,output = lsqcurvefit(F,x0,t,y)hold onplot(t,F(x,t)ho

13、ld offFsumsquares = (x)sum(F(x,t) - y).A2);opts = optimset(LargeScale,off);xunc,ressquared,eflag,outputu = .fminunc(Fsumsquares,x0,opts)fprintf(There were %d iterations using fminunc, . and %d using lsqcurvefit.n, .outputu.iterations,output.iterations)fprintf(There were %d function evaluations using

14、 fminunc, . and %d using lsqcurvefit., .outputu.funcCount,output.funcCount)type fitvectorx02 = 1 0;F2 = (x,t) fitvector(x,t,y);x2,resnorm2,exitflag2,output2 = lsqcurvefit(F2,x02,t,y)fprintf(There were %d function evaluations using the 2-d .formulation, and %d using the 4-d formulation., . output2.fu

15、ncCount,output.funcCount)x0bad = 5 1 1 0;xbad,resnormbad,exitflagbad,outputbad = .lsqcurvefit(F,x0bad,t,y)hold onplot(t,F(xbad,t),g)legend(Data,Global fit,Bad local fit,Location,NE)hold offfpri ntf(The residual norm at the good ending point is %f, .and the residual norm at the bad ending point is %f., .res no rm,res no rmbad)displayE ndOfDemoMessage(mfile name)拟合效果如下:直线的最小二乘拟合:y= a+bx式中有两个待定参数,a代表截距,b代表斜率。对于等精度测量所得到的 N组数据(xi,yi),i = 1, 2,N, xi值被认为是准确的,所有的误差只联 系着yi。下面利用最小二乘法把观测数据拟合为直线。用最小二乘法估计参数时,要求观测值yi的偏差的加权平方和为最小。对于等精度观测值的直线拟合来说,可使下式的值最小:上式分别对a、b求偏导得:整理后得到方程组:解上述方程组便可求得直线参数a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论