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

下载本文档

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

文档简介

非线性曲线拟合回归的操作步骤:(1)根据图形(实际点),选配一条恰当的函数形式(类型)---需要数学理论与基础和经验。(并写出该函数表达式的一般形式,含待定系数)(2)选用某条回归命令求出所有的待定系数所以可以说,回归就是求待定系数的过程(需确定函数的形式)非线性曲线拟合回归的操作步骤:(1)根据图形(实际点),选配非线性曲线拟合配曲线的一般方法是:(一)先对两个变量x和y作n次试验观察得(xi,yi),i=1,2,…,n画出散点图。(二)根据散点图确定须配曲线的类型。通常选择的六类曲线如下:(1)双曲线

1/y=a+b/x(2)幂函数曲线y=axb,其中x>0,a>0(3)指数曲线y=aebx其中参数a>0.(4)倒指数曲线y=aeb/x

其中a>0,(5)对数曲线y=a+blogx,x>0(6)S型曲线

y=1/(a+be-x)(三)然后由n对试验数据确定每一类曲线的未知参数a和b。非线性曲线拟合配曲线的一般方法是:(一)先对两个变量x和y非线性曲线拟合一、一元多次拟合:

polyfit(x,y,n)二、多元非线性回归

regress、

nlinfit、

lsqcurvefit、

fminsearchlsqnonlin、求解线性方程组’/’格式为:p=polyfit(x,y,n)其中x和y为原始的样本点构成的向量n为选定的多项式阶次p为多项式系数按降幂排列得出的行向量

Y=polyval(p,x)

求polyfit所得的回归多项式在x处的预测值Y

非线性曲线拟合一、一元多次拟合:polyfit(x,y,n非线性曲线拟合‘\’命令已知某函数的线性组合为: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=A\y非线性曲线拟合‘\’命令已知某函数的线性组合为:g(x)=c非线性曲线拟合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非线性曲线拟合xi00.20.40.70.90.920.99非线性曲线拟合使用格式:

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之下,来考虑检验原假设是否正确非线性曲线拟合使用格式:---命令中是先y后x,b为回归系非线性曲线拟合1)相关系数r2越接近1,说明回归方程越显著;(r2越大越接近1越好)2)F越大,说明回归方程越显著;(F越大越好)与F对应的概率p越小越好,一定要P<a时拒绝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);程序非线性曲线拟合1)相关系数r2越接近1,说明回归方程越显著;非线性曲线拟合运行结果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非线性曲线拟合运行结果b=brint=r=rint=非线性曲线拟合使用格式:

beta=nlinfit(x,y,‘程序名’,beta0)[beta,r,J]=nlinfit(X,y,fun,beta0)X给定的自变量数据,Y给定的因变量数据,fun要拟合的函数模型(句柄函数或者内联函数形式),

beta0函数模型中待定系数估计初值(即程序的初始实参)beta返回拟合后的待定系数其中beta为估计出的回归系数;

r为残差;

J为Jacobian矩阵

可以拟合成任意函数,最通用的,万能的命令.非线性曲线拟合使用格式:

bet非线性曲线拟合结果要看残差的大小和是否有警告信息,如有警告则换一个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.^2

end法二、>>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非线性曲线拟合functionyy=myfun(bet非线性曲线拟合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(向量),使得

非线性曲线拟合lsqcurvefit和lsqnonlin为两非线性曲线拟合输入格式为: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)-ydatai下面是拟合的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=lsqcurvefit(非线性曲线拟合x=lsqnonlin(‘fun’,x0,options)fun是一个事先建立的定义函数f(x)的M-文件,自变量为x迭代初值选项见无约束优化例2用下面一组数据拟合中的参数a,b,k该问题即解最优化问题:非线性曲线拟合x=lsqnonlin(‘fun’,x0,非线性曲线拟合1)编写M-文件curvefun1.m

functionf=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非线性曲线拟合1)编写M-文件curvefun1.m2)输非线性曲线拟合解法2

用命令lsqnonlin

f(x)=F(x,tdata,ctada)=x=(a,b,k)1)编写M-文件curvefun2.m

functionf=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)-cdata

end2)输入命令:

x0=[0.2,0.05,0.05];x=lsqnonlin('curvefun2',x0)f=curvefun2(x)非线性曲线拟合解法2用命令lsqnonlin1)非线性曲线拟合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.25424)结论:即拟合得a=0.0063b=-0.0034k=0.2542可以看出,两个命令的计算结果是相同的.非线性曲线拟合3)运算结果为4)结论:即拟合得a=0.006非线性曲线拟合比较以上几种非线性拟合函数适用的条件和注意事项:1)Regress函数和‘\’命令:1)首先要确定要拟合的函数形式,然后确定待定的系数从常数项开始排列,须构造矩阵(每列对应于函数中的一项,剔除待定系数)2)适用于多元(可通过变形而适用于任意函数)。y为列向量;x为矩阵,第一列为全1列(即对应于常数项),其余每一列对应于一个变量(或一个含变量的项),即x要配成目标函数的形式(常数项在最前)3)regress只能用于函数中的每一项只能有一个待定系数的情况,不能用于aebx等的情况,且必须有常数项的情况(且每项只有一个待定系数,即项数与待定系数数目相同)非线性曲线拟合比较以上几种非线性拟合函数适用的条件和注意事项非线性曲线拟合2)nlinfit、

lsqcurvefit、

lsqnonlin函数1)x,y顺序,x不需要任何加工,直接用原始数据。(也不需要全1列)---所编的程序一定是两个形参(待定系数/向量,自变量/矩阵:每一列为一个自变量)2)结果要看残差的大小和是否有警告信息,如有警告则换一个b0初始向量再重新计算3)多元任意函数,(自己任意设计函数,再求待定系数)4)存在的问题:不同的beta0,则会产生不同的结果,如何给待定系数的初值以及如何分析结果的好坏因为拟合本来就是近似的,可能有多个结果。在利用MATLAB进行非线性拟合时的初值,最好根据参数的物理意义进行确定,可能的话可根据已有的经验值对参数进行赋值1)尽可能将模型线性化,如进行取变量的倒数、对数等数学变换,关系式的微分-积分线性化变换,分段线性化。根据专业理论简化模型(如忽略小量)等,将非线性拟合问题转化为线性拟合问题.

非线性曲线拟合2)nlinfit、lsqcurvefit、请赵老师、大家批评指教!请赵老师、大家批评指教!非线性曲线拟合回归的操作步骤:(1)根据图形(实际点),选配一条恰当的函数形式(类型)---需要数学理论与基础和经验。(并写出该函数表达式的一般形式,含待定系数)(2)选用某条回归命令求出所有的待定系数所以可以说,回归就是求待定系数的过程(需确定函数的形式)非线性曲线拟合回归的操作步骤:(1)根据图形(实际点),选配非线性曲线拟合配曲线的一般方法是:(一)先对两个变量x和y作n次试验观察得(xi,yi),i=1,2,…,n画出散点图。(二)根据散点图确定须配曲线的类型。通常选择的六类曲线如下:(1)双曲线

1/y=a+b/x(2)幂函数曲线y=axb,其中x>0,a>0(3)指数曲线y=aebx其中参数a>0.(4)倒指数曲线y=aeb/x

其中a>0,(5)对数曲线y=a+blogx,x>0(6)S型曲线

y=1/(a+be-x)(三)然后由n对试验数据确定每一类曲线的未知参数a和b。非线性曲线拟合配曲线的一般方法是:(一)先对两个变量x和y非线性曲线拟合一、一元多次拟合:

polyfit(x,y,n)二、多元非线性回归

regress、

nlinfit、

lsqcurvefit、

fminsearchlsqnonlin、求解线性方程组’/’格式为:p=polyfit(x,y,n)其中x和y为原始的样本点构成的向量n为选定的多项式阶次p为多项式系数按降幂排列得出的行向量

Y=polyval(p,x)

求polyfit所得的回归多项式在x处的预测值Y

非线性曲线拟合一、一元多次拟合:polyfit(x,y,n非线性曲线拟合‘\’命令已知某函数的线性组合为: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=A\y非线性曲线拟合‘\’命令已知某函数的线性组合为:g(x)=c非线性曲线拟合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非线性曲线拟合xi00.20.40.70.90.920.99非线性曲线拟合使用格式:

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之下,来考虑检验原假设是否正确非线性曲线拟合使用格式:---命令中是先y后x,b为回归系非线性曲线拟合1)相关系数r2越接近1,说明回归方程越显著;(r2越大越接近1越好)2)F越大,说明回归方程越显著;(F越大越好)与F对应的概率p越小越好,一定要P<a时拒绝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);程序非线性曲线拟合1)相关系数r2越接近1,说明回归方程越显著;非线性曲线拟合运行结果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非线性曲线拟合运行结果b=brint=r=rint=非线性曲线拟合使用格式:

beta=nlinfit(x,y,‘程序名’,beta0)[beta,r,J]=nlinfit(X,y,fun,beta0)X给定的自变量数据,Y给定的因变量数据,fun要拟合的函数模型(句柄函数或者内联函数形式),

beta0函数模型中待定系数估计初值(即程序的初始实参)beta返回拟合后的待定系数其中beta为估计出的回归系数;

r为残差;

J为Jacobian矩阵

可以拟合成任意函数,最通用的,万能的命令.非线性曲线拟合使用格式:

bet非线性曲线拟合结果要看残差的大小和是否有警告信息,如有警告则换一个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.^2

end法二、>>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非线性曲线拟合functionyy=myfun(bet非线性曲线拟合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(向量),使得

非线性曲线拟合lsqcurvefit和lsqnonlin为两非线性曲线拟合输入格式为: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)-ydatai下面是拟合的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=lsqcurvefit(非线性曲线拟合x=lsqnonlin(‘fun’,x0,options)fun是一个事先建立的定义函数f(x)的M-文件,自变量为x迭代初值选项见无约束优化例2用下面一组数据拟合中的参数a,b,k该问题即解最优化问题:非线性曲线拟合x=lsqnonlin(‘fun’,x0,非线性曲线拟合1)编写M-文件curvefun1.m

functionf=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非线性曲线拟合1)编写M

温馨提示

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

评论

0/150

提交评论