matlab非线性拟合汇总_第1页
matlab非线性拟合汇总_第2页
matlab非线性拟合汇总_第3页
matlab非线性拟合汇总_第4页
matlab非线性拟合汇总_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

,非线性曲线拟合,回归的操作步骤:,(1)根据图形(实际点),选配一条恰当的函数形式(类型)-需要数学理论与基础和经验。(并写出该函数表达式的一般形式,含待定系数)(2)选用某条回归命令求出所有的待定系数,所以可以说,回归就是求待定系数的过程(需确定函数的形式),非线性曲线拟合,配曲线的一般方法是:,(一)先对两个变量x和y作n次试验观察得(xi,yi),i=1,2,n画出散点图。(二)根据散点图确定须配曲线的类型。通常选择的六类曲线如下:(1)双曲线1/y=a+b/x(2)幂函数曲线y=axb,其中x0,a0(3)指数曲线y=aebx其中参数a0.(4)倒指数曲线y=aeb/x其中a0,(5)对数曲线y=a+blogx,x0(6)S型曲线y=1/(a+be-x)(三)然后由n对试验数据确定每一类曲线的未知参数a和b。,非线性曲线拟合,一、一元多次拟合:polyfit(x,y,n)二、多元非线性回归,regress、nlinfit、lsqcurvefit、fminsearchlsqnonlin、求解线性方程组/,格式为:p=polyfit(x,y,n)其中x和y为原始的样本点构成的向量n为选定的多项式阶次p为多项式系数按降幂排列得出的行向量,Y=polyval(p,x)求polyfit所得的回归多项式在x处的预测值Y,非线性曲线拟合,命令,已知某函数的线性组合为:g(x)=c1f1(x)+c2f2(x)+c3f3(x)+cnfn(x)其中f1(x),f2(x),fn(x)为已知函数,c1,c2,cn为待定系数。假设已经测出(x1,y1),(x2,y2),.,(xm,ym)则可以建立如下线性方程。其中,该方程的最小二乘解为c=Ay,非线性曲线拟合,例:假设测出一组(xi,yi),已知函数原型为y(x)=c1+c2e-3x+c3cos(-2x)e-4x+c4x2用已知数据求出待定系数ci的值。,程序运行过程:,x=00.20.40.70.90.920.991.21.41.481.5;y=2.882.261.971.932.092.112.22.542.963.163.21;A=ones(size(x),exp(-3*x),cos(-2*x).*(-4*x),x.2;c=Ay;c1=cc1=1.26861.6356-0.02890.9268,非线性曲线拟合,使用格式:b=或b,bint,r,rint,stats=regress(y,x)或regress(y,x,alpha),-命令中是先y后x,-须构造好矩阵x(x中的每列与目标函数的一项对应)-并且x要在最前面额外添加全1列/对应于常数项-y必须是列向量-结果是从常数项开始-与polyfit的不同。),b为回归系数的估计值(第一个为常数项)bint为回归系数的区间估计r:残差rint:残差的置信区间stats:用于检验回归模型的统计量,有四个数值:相关系数r2、F值、与F对应的概率p和残差的方差(前两个越大越好,后两个越小越好)alpha:显著性水平(缺省时为0.05,即置信水平为95%),其中:,显著性(Significance)首次由Fisher在假设性实验中提出.假设检验中有两种错误:拒真和纳伪.显著性检验仅考虑发生拒真错误的概率,也就是考虑原假设的Significance的程度,把拒真的概率控制在提前所给定的阈值alpha之下,来考虑检验原假设是否正确,非线性曲线拟合,1)相关系数r2越接近1,说明回归方程越显著;(r2越大越接近1越好)2)F越大,说明回归方程越显著;(F越大越好)与F对应的概率p越小越好,一定要Px=00.20.40.70.90.920.991.21.41.481.5;y=2.882.261.971.932.092.112.22.542.963.163.21;A=ones(size(x),exp(-3*x),cos(-2*x).*(-4*x),x.2;b,brint,r,rint,stats=regress(y,A);,程序,非线性曲线拟合,运行结果,b=1.26861.6356-0.02890.9268,brint=1.05341.48381.40821.8631-0.11820.06050.58771.2659,r=-0.02420.03540.0283-0.0068-0.0156-0.0183-0.0154-0.00570.00270.01020.0094,rint=-0.0329-0.01560.00010.0707-0.01500.0716-0.05130.0378-0.06700.0357-0.06920.0326-0.06700.0362-0.04610.0347-0.04600.0513-0.03590.0562-0.03150.0503,stats=1.0e+03*0.00101.47740.00000.0000,非线性曲线拟合,使用格式:beta=nlinfit(x,y,程序名,beta0)beta,r,J=nlinfit(X,y,fun,beta0),X给定的自变量数据,Y给定的因变量数据,fun要拟合的函数模型(句柄函数或者内联函数形式),beta0函数模型中待定系数估计初值(即程序的初始实参)beta返回拟合后的待定系数其中beta为估计出的回归系数;r为残差;J为Jacobian矩阵,可以拟合成任意函数,最通用的,万能的命令.,非线性曲线拟合,结果要看残差的大小和是否有警告信息,如有警告则换一个b0初始向量再重新计算,例题同前例,假设测出一组(xi,yi),已知函数原型为y(x)=c1+c2e-3x+c3cos(-2x)e-4x+c4x2用已知数据求出待定系数ci的值。,x=00.20.40.70.90.920.991.21.41.481.5;y=2.882.261.971.932.092.112.22.542.963.163.21;myfunc=inline(beta(1)+beta(2)*exp(-3*x)+beta(3)*cos(-2*x).*exp(-4*x)+beta(4)*x.2,beta,x);beta0=0.2,0.2,0.2,0.2;beta=nlinfit(x,y,myfunc,beta0)beta=1.21862.3652-0.70400.8716,非线性曲线拟合,functionyy=myfun(beta,x)yy=beta(1)+beta(2)*exp(-3*x)+beta(3)*cos(-2*x).*exp(-4*x)+beta(4)*x.2end,法二、,x=00.20.40.70.90.920.991.21.41.481.5;y=2.882.261.971.932.092.112.22.542.963.163.21;beta0=1,1,1,1;beta=nlinfit(x,y,myfun,beta0)beta=1.21862.3652-0.70400.8716,非线性曲线拟合,lsqcurvefit和lsqnonlin为两个求非线性最小二乘拟合的函数两个命令都要先建立M-文件fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同的,1.lsqcurvefit已知数据点:xdata=(xdata1,xdata2,xdatan),ydata=(ydata1,ydata2,ydatan)lsqcurvefit用以求含参量x(向量)的向量值函数F(x,xdata)=(F(x,xdata1),F(x,xdatan)T中的参变量x(向量),使得,非线性曲线拟合,输入格式为:,x=lsqcurvefit(fun,x0,xdata,ydata,options),fun是一个事先建立的定义函数F(x,xdata)的M-文件,自变量为x和xdata,迭代初值,已知数据点,选项见无约束优化,2.lsqnonlin,lsqnonlin用以求含参量x(向量)的向量值函数f(x)=(f1(x),f2(x),fn(x)T中的参量x,使得最小。其中fi(x)=f(x,xdatai,ydatai)=F(x,xdatai)-ydatai,下面是拟合的option设置(1)Display:结果显示方式。off不显示,iter显示每次迭代的信息,final为最终结果,notify只有当求解不收敛的时候才显示结果(2)MaxFunEvals:允许函数计算的最大次数,取值为正整数(3)MaxIter:允许迭代的最大次数,正整数(4)TolFun:函数值(计算结果)精度,正整数(5)TolX:自变量的精度,正整数。使用方法如下option=optimset(MaxFunEvals,212,MaxIter,214,TolX,1e-8,TolFun,1e-8);,非线性曲线拟合,x=lsqnonlin(fun,x0,options),fun是一个事先建立的定义函数f(x)的M-文件,自变量为x,迭代初值,选项见无约束优化,例2用下面一组数据拟合中的参数a,b,k,该问题即解最优化问题:,非线性曲线拟合,1)编写M-文件curvefun1.mfunctionf=curvefun1(x,tdata)f=x(1)+x(2)*exp(-0.02*x(3)*tdata)%其中x(1)=a;x(2)=b;x(3)=k;end,2)输入命令tdata=100:100:1000;cdata=1e-03*4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59;x0=0.2,0.05,0.05;x=lsqcurvefit(curvefun1,x0,tdata,cdata)f=curvefun1(x,tdata),3)运算结果为:f=0.00430.00510.00560.00590.00610.00620.00620.00630.00630.0063x=0.0063-0.00340.2542,非线性曲线拟合,解法2用命令lsqnonlinf(x)=F(x,tdata,ctada)=x=(a,b,k),1)编写M-文件curvefun2.mfunctionf=curvefun2(x)tdata=100:100:1000;cdata=1e-03*4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59;f=x(1)+x(2)*exp(-0.02*x(3)*tdata)-cdataend,2)输入命令:x0=0.2,0.05,0.05;x=lsqnonlin(curvefun2,x0)f=curvefun2(x),非线性曲线拟合,3)运算结果为f=1.0e-003*(0.2322-0.1243-0.2495-0.2413-0.1668-0.07240.02410.11590.20300.2792x=0.0063-0.00340.2542,4)结论:即拟合得a=0.0063b=-0.0034k=0.2542,可以看出,两个命令的计算结果是相同的.,非线性曲线拟合,比较以上几种非线性拟合函数适用的条件和注意事项:,1)Regress函数和命令:,1)首先要确定要拟合的函数形式,然后确定待定的系数从常数项开始排列,须构造矩阵(每列对应于函数中的一项,剔除待定系数)2)适用于多元(可通过变形而适用于任意函数)。y为列向量;x为矩阵,第一列为全1列(即对应于常数项),其余每一列对应于一个变量(或一个含变量的项),即x要配成目标函数的形式(常数项在最前)3)regress只能用于函数中的每一项只能有一个待定系数的情况,不能用于aebx等的情况,且必须有常数项的情况(且每项只有一个待定系数,即项数与待定系数数目相同),非线性曲线拟合,2)nlinfit、lsqcurvefit、lsqnonlin函数,1)x,y顺序,x不需要任何加工,直接用原始数据。(也不需要全1列)-所编的程序一定是两个形参(待定系数/向量,自变量/矩阵:每一列为一个自变量)2)结果要看残差的大小和是否有警告信息,如有警告则换一个b0

温馨提示

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

评论

0/150

提交评论