【转】利用matlab实现非线性拟合(三维、高维、参数方程)

利用matlab实现非线性拟合[三维、高维、参数方程]

0 前言

一般而言,通过已有的数据点去推导其它数据点,常见的方法有插值和拟合。插值适用性较广,尤其是线性插值或样条插值已被广泛的应用。但是通过已知的函数去拟合数据,是连接理论与实验重要的桥梁,这一点是插值无法替代的。

日常学习工作中,经常会遇到下面这种问题:想要用某个具体函数去拟合自己的数据,明明知道这个函数的具体形式,却不知道其中的参数怎么选取。本文就简单介绍一下matlab环境下,如何进行非线性拟合。

1 线性拟合

1.1 多项式拟合

多项式拟合就是利用下面形式的方程去拟合数据:
y = a + b x + c x 2 + d x 3 + ⋯ y=a+bx+cx^2+dx^3+\cdots y=a+bx+cx2+dx3+
matlab中可以用 polyfit() 函数进行多项式拟合。下面举一个小例子:

对于已有的数据点,我们采用4阶多项式拟合。其中已知函数的的表达式为

y = 0.03 x^4 - 0.5 x^3 + 2 x^2 - 4

在此基础上添加了一些噪声点。拟合曲线依然采用 4 阶进行拟合,结果如下。
在这里插入图片描述
可以看到拟合曲线与理论曲线基本一致,说明这种方法能够较好的拟合出原始数据的趋势

对于多项式拟合,不是阶数越多越好。

比如还是这个上面这个例子,阶数越多,曲线越能够穿过每一个点,但是曲线的形状与理论曲线偏离越大。所以选择最适合的才是最好的。

在这里插入图片描述

2 一维非线性拟合

2.1 简单的线性拟合

前面介绍了线性的拟合方法。如果一个非线性方程,可以化为上面线性方程中公式中给出的样子,那么我们也可以套用线性的方法去求解。

比如下面的方程:
y = a ∗ e x p ( − b x ) y=a*exp(-bx) y=aexp(bx)
经过取对数变换,可以变为下面等效的线性形式:
l g ( y ) = l g ( a ) + b ∗ ( − x ) lg(y)=lg(a)+b*(-x) lg(y)=lg(a)+b(x)
这样求出来之后,再反变换回去,就可以得到原方程的系数了。
在这里插入图片描述

2.2 matlab中Curve Fitting App

matlab 自带了一个 Curve Fitting App,它在 matlab 集成的 App 里面。

界面里常用的拟合方式都有,而且直接展示拟合效果,非常方便。非常适合鼠标直接拖拖拽拽点点点的操作方式。

2.3 matlab中非线性拟合的实现

2.3.1 fit()函数

matlab中,fit()函数是一个比较通用的用于函数拟合的函数。

对于非线性拟合,可以使用 fit() 函数中的 Nonlinear Least Squares 方法。其大概原理为,首先确定一个初始的点,计算该点的雅可比矩阵 J,来近似线性化的判断该点周围的趋势,并将这个点向更小的方向移动。

  • 优缺点
    • 优点:它的优点就是非常的全面,可以用于各种种类的拟合。
    • 缺点:这个方法的一个缺点在于,对于初始点的选取非常敏感,最终结果只能在初始点附近的局部最小值点上,而不能保证全局最小值。
2.3.2 nlinfit()函数

相比于前面的fit()函数,nlinfit()函数是matlab专门的非线性拟合函数。对于非稳健估计,采用的是Levenberg-Marquardt(LM)方法,也叫阻尼最小二乘法。

对于稳健估计,采用的是Iteratively Reweighted Least Squares方法,也就是在Least Squares基础上,对每一个拟合点的权重进行调整的一种方法。这两者方法也都是基于雅克比矩阵的方法。

2.3.3 lsqnonlin()函数和lsqcurvefit()函数

lsqnonlin() 也是 matlab 中自带的一个非线性拟合函数。它给出了两种计算非线性拟合的方法,一种是比较经典之前介绍过的 LM 方法,一种是信赖域方法。

信赖域法(trust region reflective)是通过Hessian 矩阵,逐步试探邻域内的最小化,来求解问题的。相比较之前的那些雅克比相关的方法,信赖域法会占用更多内存和速度,所以适用于中小规模的矩阵。

lsqcurvefit()函数和lsqnonlin()内容上相似,只是引用格式上有所不同。

2.3.4 fsolve()函数

这也是一个求解非线性方程的函数,可以求解方程组或者矩阵形式,功能非常强大。默认的算法为trust-region-dogleg,俗称狗腿法,属于信赖域法。这里用到的功能比较基础,所以也不过多介绍了。

2.3.5 粒子群算法

说了那么多,发现逐渐从如何非线性拟合,陷入到了最优化的深坑里。

而且前面的那么多方法,很多都解决不了陷入到局部最优解的问题。实际上,这种问题如果进入了最优化领域,很多智能算法也可以被考虑进来。所以我也把粒子群PSO算法加入到了里面,尝试将结果收敛到全局最优解。

参考资料

[1] https://blog.csdn.net/weixin_42943114/article/details/116803379

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当前非线性拟合和多元拟合的工具较少,这是针对常用的拟合算法开发的一款数据拟合为主的软件。包括线性拟合的各种算法非线性拟合的各种算法,以及多元拟合的各种算法。其中提供了很多非线性方程的模型,以满足不同的需求,也可以制定自己所需要的指定非线性方程模型的,采用最先进的初始值估算算法,无需初始值就可以拟合自己想要的非线性方程模型各个模块的介绍如下。 1.线性拟合算法模块 根据最小二乘拟合算法,对输入的数据进行变量指定次方的拟合。同时可对自变量或因变量进行自然对数和常用对数的换后再拟合。根据实际情况,开发了单调性拟合以针对各种定量分析的用途。同时开发了,针对一组数据,得到最高相关系数的自动拟合功能,由程序自动选择拟合次数以及自变量和因变量的数据格式。 2.非线性拟合算法模块 根据非线性方程的特点,开发了最先进的智能初始值估算算法,配合LM迭代算法,进行非线性方程的拟合。只需要输入自变量和因变量,就可以拟合出所需要的非线性方程。拟合相关系数高,方便快捷。并借助微粒群算法开发了基于微粒群的智能非线性拟合算法,拟合出方程的相关系数相当高,甚至会出现过拟合现象。 3.多元拟合算法模块 根据最小二乘算法的原理开发了多元线性拟合算法,同时开发了能够指定变元次数的高次多元线性拟合。由于多元变量的情况下函数关系复杂,采用高次多元线性拟合能有效提高拟合效果而不会出现过拟合现象。同时针对每个变元可能最合适的拟合次数不一定都一样,开发了自适应高次多元拟合算法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值