遗传算法求解非线性方程组优化(MATLAB实现)

解决的问题

在进行数学建模的时候,经常遇到一些优化问题,但是,在平常论讲座中,往往偏重理论,而缺乏了在工程中的实践。为此,特地整理出来使用matlab求解非线性方程组的方法。

写在开头

这篇不打算对遗传算法的具体原理进行探讨,而主要是实际中的应用。在求解一些不是很复杂的非线性方程组的时候,我们在matlab使用的时候也往往不需要自己写很复杂的代码,而是借助ga工具箱,一般情况下,打开ga工具箱只要

>> gatool

加回车就行,但是我的matlab不知为何不行,这里给大家另一种打开方式:

optimtool('ga')

结果如下:
在这里插入图片描述

实现

OK,说完了前期准备,我们来进行一些实践
这里,假如我有以下要求的方程组:
在这里插入图片描述
那么,我就可以定义一个新的函数,将它们三个的值平法求和,那么平方和的最小值,就是这个方程组的根

function G=simple(var)

    f1=var(1)+var(2)-3*var(3);
    f2=var(1)*sin(var(2));
    f3=var(1)+2.0*var(2)+var(3)-24.0; 
    G=f1.^2+f2.^2+f3.^2;%构造目标函数
end

将这个函数命名为simple,接着使用命令

options=gaoptimset('PopulationSize',500,'Generations',1000,'StallGenLimit',1000,'TolFun',1e-100)

定义我们的遗传算法的相关要求,最后:

[v fval]=ga(@simple,3,options)

(记住在使用ga工具箱的时候,一定要在所求的simple函数文件夹下使用命令),结果:
v =

1.5170    9.4193    3.6454

fval = 7.0466e-05
因为这里的var是一个向量,实际上var(1)var(2)var(3)就是xyz

相关资料

受到这个启发
有更深入的使用教程
很不错的原理讲解
非线性约束情况下的使用
原理讲解

  • 12
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值