《基于MATLAB实现最小二乘曲线拟合(共9页).doc》由会员分享,可在线阅读,更多相关《基于MATLAB实现最小二乘曲线拟合(共9页).doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上MATLAB语言课程论文基于MATLAB实现最小二乘曲线拟合姓 名:杜枷玮 学 号: 专 业:通信工程班 级:一班指导老师:汤全武 学 院:物理电气信息学院完成日期:2011年12月12日 基于matlab实现最小二乘曲线拟合(杜枷玮 10级通信工程)摘要物理量之间的函数关系在实际研究工作有很重要的作用。本文首先介绍了最小二乘原理。其次介绍了用Matlab实现曲线拟合以得到函数关系的方法和步骤。最后举例比较了采用不同方法进行拟合得到的结果。关键词Matlab;最小二乘法;曲线拟合一、问题的提出在现代科学研究中,物理量之间的相互关系通常是用函数来描述的。有些函数关系是由
2、经典理论分析推导得出的,这些函数关系不仅为我们进一步的分析研究工作提供了物理的理论基础,也们可以十分方便的运用丰富的数学知识来解决物理问题。在现实的物理研究过程中,有一些问题很难由经典物理理论推导出物理量的函数表达式,或者推导出的表达式十分复杂,不利于进一步的分析。但由于研究需要,又很希望能得到这些量之间的函数关系,这时就可以利用曲线拟合的方法,用实验数据结合数学方法得到物理量之间的近似函数表达式。二曲线拟合的基本原理曲线拟合就是拟合测量数据曲线。有时所选择的曲线通过数据点,但在其他点上,曲线接近它们而不必通过它们。在大多数情况下,选择曲线使得数据点的平方误差和最小。这种选择就是最小二乘曲线拟
3、合。可用一系列基函数进行最小二乘曲线拟合,直接而通用的做法是用多项式,即线性拟合;另外还可以选择其他基函数,这种做法称之为非线性拟合。下面简要介绍一下最小二乘法的基本原理:在数据处理中应用的最小二乘法原理是算术平均值原理的推广。即多次等精度独立测得 以上就是最小二乘法的基本原理,用它可以解决两个量之间关系的问题。例如:现有一组( xi,yi),i=1,2n,要建立和Y之间的函数关系。设X和Y之间的函数关系为y=f(x),则满足Q=yi一f(xi) =min的f(x)即为所求。三最小二乘法实现曲线拟合首先介绍用最小二乘法实现曲线拟合时常用的经验公式及选取适公式的方法:在工作中,通常情况是找出两个
4、量之间的关系。此时需要对两个量的多组对应数据用经验公式表示出来,因为经验公式形式紧凑,便于从理论上进一步分析。对表征(xi,yi),i= l,2n的关系Y=f( x;a,b,C),式中a,b,C为参数,因自变量x已知时y已测得,故类型f决定后,由误差方程f(xi;a,b,C)=yi+vi ,i= l,2,n就可用最小二乘法决定经验公式中参数a,b,C。下面我们就来介绍经验公式类型的选取。经验公式类型的选取主要靠专业知识来决定,从数学方面去决定两个量的经验公式主要有三种方法:观察法、近似法、严格计算法。这三种方法中,观察法简单、直观,相对来说近似法和严格计算法比较精确,但比较繁琐。对于大多数情况
5、,都可以采用观察法来确定经验公式,所以下面主要介绍观察法。观察法就是将数据( xi,yi)作图,与典型图l比较,看所作图形与典型图中何种类似,就取该类型为(xi ,yi)经验公式类型。例 基线基准尺是由殷钢合金制成的,研究表明,殷钢尺的长度随时间变化而增长,越往后增长得越慢,这种殷钢随时间而变长的现象称作合金时效。殷钢尺长度变化的规律经研究可用l=alg(1+bt)来描述,其中l为长度变化值,t为变化时间,a、b为常数。基准尺尺长的实际变化如表l。t(日)0 657449496100271754618384194041986020225 l(u)0 60.771.475.379.479.980
6、.982.082.8表1今用l=alg(1+bt)逼近l,即由最小二乘法在Q(a,6)=lalg(1+bt)2 =min条件下求啊a,b。由Q(a,b)=min,按 由物理判断0b1,经计算得b取不同值时的a及Q(a,b)如表2。b aQ(a,b)baQ(a,b)0.0010064149.20.0069938.2769331.790.002704851.50.0070038.2652631.790.002854748.00.0070138.2536231.790.003504540.40.0071038.15031.810.005004133.40.010003632.00/0056040.1
7、6432.030.050002761.40.0069838.2886131.790.100002477.0表2由上表可知Q(a,b)在b=000699,a=3827693时取极小值,此时Q(ab)=31.7917,故基线基准尺用alg(1+bt)的最小二乘法逼近结果为 l=38281g(1+000699t)四几种常用的matlab工具1曲线拟合工具箱提供了很多拟合函数,对大样本场合比较有效!2“”命令(1)假设要拟合的多项式是:y=a+b*x+c*x2.首先建立设计矩阵X:X=ones(size(x) x x2;执行:para=Xypara中包含了三个参数:para(1)=a;para(2)=
8、b;para(3)=c;这种方法对于系数是线性的模型也适应。(2)假设要拟合:y=a+b*exp(x)+cx*exp(x2)设计矩阵X为X=ones(size(x) exp(x) x.*exp(x.2);para=Xy(3)多重回归(乘积回归)设要拟合:y=a+b*x+c*t,其中x和t是预测变量,y是响应变量。设计矩阵为X=ones(size(x) x t %注意x,t大小相等!para=Xy3.polyfit函数polyfit函数不需要输入设计矩阵,在参数估计中,polyfit会根据输入的数据生成设计矩阵。(1)假设要拟合的多项式是:y=a+b*x+c*x2p=polyfit(x,y,2)
9、然后可以使用polyval在t处预测:y_hat=polyval(p,t)polyfit函数可以给出置信区间。p S=polyfit(x,y,2) %S中包含了标准差y_fit,delta = polyval(p,t,S) %按照拟合模型在t处预测在每个t处的95%CI为:(y_fit-1.96*delta, y_fit+1.96*delta)(2)指数模型也适应假设要拟合:y = a+b*exp(x)+c*exp(x.?2)p=polyfit(x,log(y),2)4.fminsearch函数fminsearch是优化工具箱的极小化函数。LS问题的基本思想就是残差的平方和(一种范数,由此,L
10、S产生了许多应用)最小,因此可以利用fminsearch函数进行曲线拟合。假设要拟合:y = a+b*exp(x)+c*exp(x.?2)首先建立函数,可以通过m文件或函数句柄建立:x=.;y=.;f=(p,x) p(1)+p(2)*exp(x)+p(3)*exp(x.?2) %注意向量化:p(1)=a;p(2)=b;p(3)=c;%可以根据需要选择是否优化参数%opt=options()p0=ones(3,1);%初值para=fminsearch(p) (y-f(p,x).2,p0) %可以输出Hessian矩阵res=y-f(para,x)%拟合残差5.非线性拟合nlinfit函数cle
11、ar all;x1=0.4292 0.4269 0.381 0.4015 0.4117 0.3017;x2=0.00014 0.00059 0.0126 0.0061 0.00425 0.0443;x=x1 x2;y=0.517 0.509 0.44 0.466 0.479 0.309;f=(p,x) 2.*p(1)*(1-1/p(2)*(1-(1-x(:,1).(1/p(2).p(2).2.*(x(:,1).(-1/p(2)-1).(-p(2).*x(:,1).(-1/p(2)-0.5).*x(:,2);p0=8 0.5;opt=optimset(TolFun,1e-3,TolX,1e-3)
12、;%p R=nlinfit(x,y,f,p0,opt) 五用Matlab实现曲线拟合Matlab是一种功能强大的系统分析和仿真工具,我们选用它作为实现曲线拟合的软件工具。用Matlab语言编程实现最小二乘法的思路:(1)输入各参量X、y的测量值(以数组形式输入,这样便于在计算过程中引用);(2)用Matlab语言中的plot函数x,y的曲线关系图,以此图对比典型曲线图,选择合适的经验公式;(3)按照上例中的方法,选一个系数a,求Q(a,b)对它的偏导数,求出其计算表达式;(4)编写Matlab的M函数,用来完成经验公式中待定系数口的计算,该函数输入量为x、y、b,输出量为a、Q,按照由最小二乘
13、法推导出的公式代人数值由 x、y、b计算a、Q;(5)改变b的取值,多次调用该M函数,比较结果中的Q值,最小的Q值所对应的口、b值即为所求。“改变b的取值”这部分工作也可编一个循环函数,输入b可能取的区间,计算不同b对应的Q,再进行比较,保留使Q最小的b及对应的a。但通常b的改变对Q的影响不是线性的。另外,Matlab语言提供了一个函数,可以完成线性曲线拟合,这就是函数polyfit。函数polyfit的输入量为 、Y、n,其中 、Y即为需要建立相互关系的两个量的测量值,以数组的形式输入,n为多项式的次数;输出的是多项式系数的行向量,而得到的多项式是降幂的。六举例说明以下通过例子来说明:表3给
14、定的是乌鲁木齐最近1个月早晨7:00左右(新疆时间)的天气预报所得到的温度数据表,按照数据找出任意次曲线拟合方程和它的图像。(2008年10月2611月26)天数12345678910温度910111213141312119天数11121314151617181920温度101112131412111098天数21222324252627282930温度78911976531 表3 下面应用Matlab编程对上述数据进行最小二乘拟合(1)Matlab程序代码:x=1:1:30;y=9,10,11,12,13,14,13,12,11,9,10,11,12,13,14,12,11,10,9,8,7
15、,8,9,11,9,7,6,5,3,1;a1=polyfit(x,y,3) %三次多项式拟合%a2= polyfit(x,y,9) %九次多项式拟合%a3= polyfit(x,y,15) %十五次多项式拟合%b1= polyval(a1,x)b2= polyval(a2,x)b3= polyval(a3,x)r1= sum(y-b1).2) %三次多项式误差平方和%r2= sum(y-b2).2) %九次次多项式误差平方和%r3= sum(y-b3).2) %十五次多项式误差平方和%plot(x,y,*) %用*画出x,y图像%hold onplot(x,b1, r) %用红色线画出x,b1
16、图像%hold onplot(x,b2, g) %用绿色线画出x,b2图像%hold onplot(x,b3, b:o) %用蓝色o线画出x,b3图像%(2)、数值结果:不同次数多项式拟和误差平方和为:r1 = 67.6659r2 = 20.1060r3 = 3.7952r1、r2、r3分别表示三次、九次、十五次多项式误差平方和。拟和曲线如图2: 图2上图中*代表原始数据,红色曲线代表三次多项式拟合曲线,绿色曲线代表九次多项式拟合曲线,蓝色o线代表十五次多项式拟合曲线。六、结束语最小二乘法原理在很多领域都有着广泛的应用,利用MATLAB求解非常方便,但一定要注意问题的类型,尤其是对非线形问题,
17、最终得到的结果要保证收敛并且在有效的误差范围内。如果不能满足上述要求,则要根据具体问题的要求,依据最小二乘法原理去重新编写程序。上面的结果可以看到用最小二乘拟合来求解问题时,有时候他的结果很接近实际情况,有时候跟实际情况里的太远,因为所求得多项式次数太小时数据点之间差别很大,次数最大时误差最小但是有时后不符合实际情况,所以用最小二乘法时次数要取合适一点。上面的拟合中也可以得到多项式拟合误差平方和随着拟合多项式次数的增加而逐渐减小,拟合的曲线更靠近实际数据,拟合更准确。参考文献1 刘卫国.MATLAB程序设计与应用(第二版)M.北京:高等教育出版社,2006.2 刘智敏误差与数据处理M北京:原子能出版社,19813 Hanselman D,Littefield B ,李人厚张平安等校译精通MATLAB 5综合辅导与指南M西安:交通大学出版社,20014同济大学应用数学系高等数学M北京:高等教育出版社,2002:6771专心-专注-专业