matlab非线性拟合汇总

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

非线性曲线拟合回归的操作步骤:(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)则可以建立如下线性方程。其中)()()()()()()(...)()(212222111211MnMMnnxfxfxfxfxfxfxfxfxfAMyyyy21Tncccc21该方程的最小二乘解为c=A\y非线性曲线拟合xi00.20.40.70.90.920.991.21.41.481.5yi2.882.261.971.932.092.112.22.542.963.163.21例:假设测出一组(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=A\y;c1=c'c1=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越小越好,一定要Pa时拒绝H0而接受H1,即回归模型成立。3)(残差)标准差(RMSE)越小越好注:例题同前例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];[b,brint,r,rint,stats]=regress(y,A);程序非线性曲线拟合运行结果b=1.26861.6356-0.02890.9268brint=1.05341.48381.40821.8631-0.11820.06050.58771.2659r=-0.02420.03540.0283-0.0068-0.0156-0.0183-0.0154-0.00570.00270.01020.0094rint=-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.0503stats=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(向量),使得最小)),((21niiiydataxdataxF非线性曲线拟合输入格式为:x=lsqcurvefit(‘fun’,x0,xdata,ydata,options)fun是一个事先建立的定义函数F(x,xdata)的M-文件,自变量为x和xdata迭代初值已知数据点选项见无约束优化2.lsqnonlinlsqnonlin用以求含参量x(向量)的向量值函数f(x)=(f1(x),f2(x),…,fn(x))T中的参量x,使得最小。其中fi(x)=f(x,xdatai,ydatai)=F(x,xdatai)-ydatai22221)()()()()(xfxfxfxfxfnT下面是拟合的option设置(1)Display:结果显示方式。off不显示,iter显示每次迭代的信息,final为最终结果,notify只有当求解不收敛的时候才显示结果(2)MaxFunEvals:允许函数计算的最大次数,取值为正整数(3)MaxIter:允许迭代的最大次数,正整数(4)TolFun:函数值(计算结果)精度,正整数(5)TolX:自变量的精度,正整数。使用方法如下option=optimset('MaxFunEvals',2^12,'MaxIter',2^14,'TolX',1e-8,'TolFun',1e-8);非线性曲线拟合x=lsqnonlin(‘fun’,x0,options)fun是一个事先建立的定义函数f(x)的M-文件,自变量为x迭代初值选项见无约束优化例2用下面一组数据拟合中的参数a,b,kktbeatc2.0.0)(10020030040050060070080090010004.544.995.355.655.906.106.266.396.506.59该问题即解最优化问题:210102.0][),,(minjjktcbeakbaFjjt310jc非线性曲线拟合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;end2)输入命令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)Tktktcbeacbea),,(102.0102.0101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)-cdataend2)输入命令:x0=[0.2,0.05,0.05];x=lsqnonlin('curvefun2',x0)f=curvefun2(x)非线性曲线拟合3)运算结果为f=1.0e-003*(0.2322

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功