回顾一下数据拟合过程,我们有一组数据,并且知道一般表达式,以及表达式中参数的粗略值,也就是拟合参数的初始值,最后一般都能拟合出精确的参数值。
但是,如果表达式中参数个数较多,各个参数的粗略值估计不准,用一般的方法很容易找到一个局域最优解,而我们需要的是全局最优解。
接下来,我们通过一个简单的例子,来介绍利用 MATLAB 自带的
遗传算法工具箱 (
ga) 来进行数据拟合。
遗传算法数据拟合
创建一组数据,并加上随机噪声,其代码和图像如下。
x
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iMllTNmFmYjlzMjV2MyQWYyUTOzczMzEzMiZ2MhVzMh9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
数据点满足的一般表达式写成
为了拟合出参数值,写出最重要的
适应度函数。
function
设置各个参数的大致范围
LB
用 ga 函数拟合
ObjectiveFunction
最后得到结果
得到的结果和其表达式 (
) 中准确的参数 (
) 还是挺相近的,偏差 (fval) 来自于加上的噪声。将拟合曲线和数据点画在同一张图中。
用 ga 拟合的优点
对表达式参数的初值要求不高,适合多参数的拟合过程,最重要的是,不用自己写遗传算法真好。
在我的公众号后台回复
GAfit即可获得源码。