非线性矩阵 matlab程序,科学网—非线性拟合方法的MATLAB实现 - 王福昌的博文

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

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

1. 多项式拟合

p  = polyfit(x,y,n)  完成数据的多项式拟合,得到多项式系数 p,按降幂排列,其中参数 x,y 是数据 $(x_i,y_i)(i=1,2,\cdots,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

即拟合方程为

$$y = 0.5053{}x -2.5421.$$

多项式拟合可以化为线性拟合问题求解,但是非线性拟合问题大多数情形不能化为线性拟合问题,需要直接使用求解非线性最小二乘算法,下面给出几个。

2. lsqnonlin() 函数

lsqnonlin() 函数是求解非线性最小二乘问题$\|\boldsymbol{f}(\boldsymbol{x})\|_2^2 = \sum\limits_{i=1}^{m}[f_i(\boldsymbol{x})]^2$, 使用格式为

[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 矩阵.

例如:

解非线性方程组

$\begin{cases}

f_1(\textbfsymbol{x}) = x_1^2 + x_2^2 - 1=0.\\

f_2(\textbfsymbol{x}) = x_1^3-x_2=0.\\

\end{cases}$ , 取初始点~$\boldsymbol{x}^{(0)}=[-0.8,\,0.6]^T$.

>> 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.

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 矩阵.

例如

已知数据

$\begin{array}{c|cccccc}

\hline

x_i&0.02& 0.02&0.06&0.06&0.11 &0.11\\

y_i&76& 47&97&107&123&139\\ \hline

\hline

x_i&0.22&0.22&0.56&0.56&1.10&1.10 \\

y_i&159&152&191&201&207&200\\

\hline

\end{array}$

满足Michaelis-Menten方程

$y = \dfrac{\,p_1x\,}{p_2+x}$, 求参数 $p_1,p_2$.

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

即拟合函数为$$y = \dfrac{\,212.6836x\,}{0.0641+x}.$$

4. nlinfit() 函数

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

[beta,r,J,Sigma,mse] = nlinfit(X,y,fun,beta0)

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

例如

已知数据

$\begin{array}{c|cccccc}

\hline

x_i&0.02& 0.02&0.06&0.06&0.11 &0.11\\

y_i&76& 47&97&107&123&139\\ \hline

\hline

x_i&0.22&0.22&0.56&0.56&1.10&1.10 \\

y_i&159&152&191&201&207&200\\

\hline

\end{array}$

满足Michaelis-Menten方程

$ y = \dfrac{\,p_1x\,}{p_2+x}$, 求参数$p_1,p_2$.

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

即拟合函数为$$y = \dfrac{\,212.6836x\,}{0.0641+x}.$$

转载本文请联系原作者获取授权,同时请注明本文来自王福昌科学网博客。

链接地址:http://blog.sciencenet.cn/blog-292361-1011057.html

上一篇:Newton 插值及其MATLAB实现

下一篇:一个数列极限

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值