马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
对测量数据的拟合在科学研究和工程中具有广泛的应用,下面给出几种常用的拟合方法,及其如何在MATLAB环境中实现。
在MATLAB中有用于拟合的命令polyfit、lsqcurvefit、nlinfit和曲线拟合工具cftool,解决一般的工程拟合问题足够了。下面给出几个常用函数。
1、多项式拟合
p=polyfit(x,y,n) 完成数据的多项式拟合,得到多项式系数p,按降幂排列,其中参数x,y是数据(xi,yi)(i=1,2,⋯,n) 构成的向量,n 为多项式次数。例如
x=[1, 3, 4, 6, 7]; y = [-2.1,-0.9,-0.6, 0.6, 0.9] ; p = polyfit(x,y,1) p = 0.5053 -2.5421
即拟合方程为
多项式拟合可以化为线性拟合问题求解,但是非线性拟合问题大多数情形不能化为线性拟合问题,需要直接使用求解非线性最小二乘算法,下面给出几个。
2、lsqnonlin() 函数
lsqnonlin() 函数是求解非线性最小二乘问题
使用格式为
[x, resnorm, residual, exitflag, output, lambda, jacobian] = 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)[x(1)^2+x(2)^2-1; x(1)^3-x(2)]; x0 = [-0.8;0.6]; [x, resnorm, residual, exitflag, output, lambda, jacobian] = lsqnonlin(equs,x0) Local minimum found. Optimization completed because the size of the gradient is less than the default value of the function tolerance. <stopping criteria details> x = -0.8260 -0.5636 resnorm = 5.7708e-27 residual = 1.0e-13 * 0.3397 -0.6795 exitflag = 1 output = firstorderopt: 1.9521e-13 iterations: 9 funcCount: 30 cgiterations: 0 algorithm: 'trust-region-reflective' stepsize: 1.7483e-07 message: 'Local minimum found.…' lambda = lower: [2x1 double] upper: [2x1 double] jacobian = (1,1) -1.6521 (2,1) 2.0470 (1,2) -1.1272 (2,2) -1.0000
3、lsqcurvefit() 函数
lsqnonlin() 是非线性最小二乘拟合函数,使用格式为
[x, resnorm, residual, exitflag, output, lambda, jacobian] = 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 = [0.02, 0.02,0.06,0.06,0.11 ,0.11,0.22,0.22,0.56,0.56,1.10,1.10 ]; ydata = [76, 47,97,107,123,139,159,152,191,201,207,200]; fun = @(p,xdata)(p(1)*xdata./(p(2)+xdata)); x0 = [200;0.1]; p = lsqcurvefit(fun,x0,xdata,ydata)
运行后可得
p = 212.6836 0.0641
即拟合函数为
4、nlinfit() 函数
nlinfit() 是非线性回归函数,使用格式为
[beta,r,J,Sigma,mse] = nlinfit(X,y,fun,beta0)
参数X为设计矩阵;y为响应变量;fun为回归(拟合)函数;beta0为初始参数;beta为最优回归参数;r为残差;J为Jacobi矩阵;SIGMA为参数的协方差矩阵;mse为均方误差。
例如:已知数据
满足Michaelis-Menten方程
求参数p1,p2。
x = [0.02, 0.02,0.06,0.06,0.11 ,0.11,0.22,0.22,0.56,0.56,1.10,1.10 ]; y = [76, 47,97,107,123,139,159,152,191,201,207,200]; fun = @(beta,x)(beta(1)*x./(beta(2)+x)); beta0 = [200;0.1]; beta = nlinfit(x,y,fun,beta0) beta = 212.6836 0.0641
即拟合函数为
来源:本文来自王福昌科学网博客,作者:王福昌。
|