对测量数据的拟合在科学研究和工程中具有广泛的应用,下面给出几种常用的拟合方法,及其如何在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 即拟合函数为 来源:本文来自王福昌科学网博客,作者:王福昌。 |
GMT+8, 2024-12-18 13:28 , Processed in 0.046619 second(s), 24 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.