weixin 发表于 2022-6-24 15:29

非线性拟合方法的MATLAB实现

对测量数据的拟合在科学研究和工程中具有广泛的应用,下面给出几种常用的拟合方法,及其如何在MATLAB环境中实现。

在MATLAB中有用于拟合的命令polyfit、lsqcurvefit、nlinfit和曲线拟合工具cftool,解决一般的工程拟合问题足够了。下面给出几个常用函数。

1、多项式拟合

p=polyfit(x,y,n) 完成数据的多项式拟合,得到多项式系数p,按降幂排列,其中参数x,y是数据(xi,yi)(i=1,2,⋯,n) 构成的向量,n 为多项式次数。例如

x=;y = [-2.1,-0.9,-0.6, 0.6, 0.9] ;p = polyfit(x,y,1)p =0.5053   -2.5421
即拟合方程为
多项式拟合可以化为线性拟合问题求解,但是非线性拟合问题大多数情形不能化为线性拟合问题,需要直接使用求解非线性最小二乘算法,下面给出几个。

2、lsqnonlin() 函数

lsqnonlin() 函数是求解非线性最小二乘问题
使用格式为

= lsqnonlin(fun,x0,lb,ub,options)


fun为向量函数;x0为初始点;lb,ub分别为变量的下界和上界;options为参数的选择项,由函数optimset设置。因变量~x为非线性最小二乘问题的极小点;resnorm为x处的残差平方和;residual为x处的残差值;exitflag为退出条件;output为输出求解信息;lambda为上下界约束的Lagrange乘子;Jacobian为x 处的Jacobi矩阵。

例如:解非线性方程组
取初始点
>> equs = @(x); x0 = [-0.8;0.6]; = lsqnonlin(equs,x0)Local minimum found.Optimization completed because the size of the gradient is less thanthe default value of the function tolerance.<stopping criteria details>x =-0.8260-0.5636resnorm =5.7708e-27residual =1.0e-13 *0.3397-0.6795exitflag =1output =firstorderopt: 1.9521e-13iterations: 9funcCount: 30cgiterations: 0algorithm: 'trust-region-reflective'stepsize: 1.7483e-07message: 'Local minimum found.…'lambda =lower: upper: jacobian =(1,1)      -1.6521(2,1)       2.0470(1,2)      -1.1272(2,2)      -1.0000
3、lsqcurvefit() 函数

lsqnonlin() 是非线性最小二乘拟合函数,使用格式为

= lsqnonlin(fun,x0,xdata,ydata,lb,ub,options)


fun为向量函数;x0为初始点;xdata,ydata是拟合点;lb,ub分别为变量的下界和上界;options为参数的选择项,由函数optimset设置。因变量x为非线性最小二乘问题的极小点;resnorm为x处的残差平方和;residual为x处的残差值;exitflag为退出条件;output为输出求解信息;lambda为上下界约束的 Lagrange乘子;Jacobian为~x处的~Jacobi矩阵。

例如:已知数据
满足Michaelis-Menten方程
求参数p1,p2。

xdata = ;ydata = ;fun = @(p,xdata)(p(1)*xdata./(p(2)+xdata)); x0 = ;p = lsqcurvefit(fun,x0,xdata,ydata)
运行后可得

p =212.68360.0641
即拟合函数为

4、nlinfit() 函数

nlinfit() 是非线性回归函数,使用格式为

= nlinfit(X,y,fun,beta0)


参数X为设计矩阵;y为响应变量;fun为回归(拟合)函数;beta0为初始参数;beta为最优回归参数;r为残差;J为Jacobi矩阵;SIGMA为参数的协方差矩阵;mse为均方误差。

例如:已知数据
满足Michaelis-Menten方程
求参数p1,p2。

x = ;y   = ;fun = @(beta,x)(beta(1)*x./(beta(2)+x)); beta0 = ;beta = nlinfit(x,y,fun,beta0)beta =212.68360.0641
即拟合函数为
来源:本文来自王福昌科学网博客,作者:王福昌。

tonan_888@163.c 发表于 2023-11-7 15:10

{:3_53:}{:3_53:}{:3_53:}
页: [1]
查看完整版本: 非线性拟合方法的MATLAB实现