Matlab求解非线性规划(fmincon函数的使用)[通俗易懂]

Matlab求解非线性规划(fmincon函数的使用)[通俗易懂]最近写文章需要用到fmincon函数(寻找约束非线性多变量函数的最小值)做优化,于是抽空学习一下;按照惯例,继续开个博文记录一下学习的过程。

大家好,又见面了,我是你们的朋友全栈君。

最近写文章需要用到fmincon函数做优化,于是抽空学习一下;按照惯例,继续开个博文记录一下学习的过程

参考资料:
[寻找约束非线性多变量函数的最小值 – MathWorks]
[Matlab求解非线性规划,fmincon函数的用法总结 – 博客园]
[Matlab非线性规划 – 博客园]

1. 介绍

在Matlab中,fmincon 函数可以求解带约束的非线性多变量函数(Constrained nonlinear multivariable function)的最小值,即可以用来求解非线性规划问题

matlab中,非线性规划模型的写法如下

m i n    f ( x ) s . t . { A ⋅ x ≤ b A e q ⋅ x = b e q c ( x ) ≤ 0 c e q ( x ) = 0 l b ≤ x ≤ u b min \; f(x) \\ s.t. \begin{cases} A·x ≤b \\ Aeq·x = beq \\ c(x)≤0\\ ceq(x) = 0\\ lb≤x≤ub \end{cases} minf(x)s.t.AxbAeqx=beqc(x)0ceq(x)=0lbxub

  • A、Aeq 为线性约束对应的矩阵
  • b、beq 为线性约束对应的向量
  • C(x),Ceq(x) 为非线性约束(返回向量的函数)
  • f(x) 为目标函数(返回标量的函数)

2. 语法

Matlab求解命令为:
x = f m i n c o n ( f u n , x 0 , A , b , A e q , b e q , l b , u b , n o n l c o n , o p t i o n s ) x = fmincon(fun,x0,A, b,Aeq,beq,lb,ub,nonlcon,options) x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

  • x的返回值是决策向量x的取值,fval的返回值是目标函数f(x)的取值
  • fun是用M文件定义的函数f(x),代表了(非)线性目标函数
  • x0是x的初始值
  • A, b, Aeq, beq定义了线性约束,如果没有线性约束,则A=[], b=[], Aeq=[], beq=[]
  • lb和ub是变量x的下界和上界,如果下界和上界没有约束,则lb=[], ub=[], 也可以写成lb的各分量都为 -inf, ub的各分量都为inf
  • nonlcon是用M文件定义的非线性向量函数约束
  • options定义了优化参数,不填写表示使用Matlab默认的参数设置

3. 示例

求下列非线性规划问题:
m i n    f ( x ) = x 1 2 + x 2 2 + x 3 2 + 8 s . t . { x 1 2 − x 2 + x 3 2 ≥ 0 x 1 2 + x 2 2 + x 3 2 ≤ 20 − x 1 2 − x 2 2 + 2 = 0 x 2 + 2 x 3 2 = 3 x 1 , x 2 , x 3 ≥ 0 min \; f(x) = x_{1}^2 + x_{2}^2+x_{3}^2+8 \\ s.t. \begin{cases} x_{1}^2-x_{2} +x_{3}^2≥0 \\ x_{1}^2+x_{2}^2 +x_{3}^2≤20 \\ -x_{1}^2-x_{2}^2 +2=0\\ x_{2} +2x_{3}^2=3\\ x_{1}, x_{2} ,x_{3}≥0 \end{cases} minf(x)=x12+x22+x32+8s.t.x12x2+x320x12+x22+x3220x12x22+2=0x2+2x32=3x1,x2,x30

3.1 编写M函数fun1.m,定义目标函数

function f = fun1(x)
f = x(1).^2 + x(2).^2 + x(3).^2 + 8;
end

3.2 编写M函数fun2.m,定义非线性约束条件

function [g,h] = fun2(x)
g(1) = - x(1).^2 + x(2) - x(3).^2;
g(2) = x(1) + x(2).^2 + x(3).^3 - 20;
% g代表不等式约束,Matlab中默认g<=0,所以这里取相反数
h(1) = - x(1).^2 - x(2).^2 + 2;
h(2) = x(2) + 2 * x(3).^2 - 3;
% h代表等式约束        
end

3.3 编写主程序函数

options = optimset;
[x, y] = fmincon('fun1', rand(3, 1), [], [], [], [], zeros(3, 1), [], 'fun2', options)
% 'fun1'代表目标函数,rand(3, 1)随机给了x初值,zeros(3, 1)代表下限为0,即x1, x2, x3>=0, 'fun2'即刚才写的约束条件

所得结果,x为最优解,y为最优值:
x 1 = 0.6312 , x 2 = 1.2656 , x 3 = 0.9312 y = 10.8672 x_{1}=0.6312,x_{2}=1.2656,x_{3}=0.9312\\ y=10.8672 x1=0.6312,x2=1.2656,x3=0.9312y=10.8672

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138937.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于Hmily实现TCC分布式事务解决方案[通俗易懂]

    基于Hmily实现TCC分布式事务解决方案[通俗易懂]前言在上一篇中,我们大致讲述了TCC事务的来源以及执行原理,并使用seata提供的解决方案完成了一个简单案例的整合与代码演示,本篇我们将采用Hmily的方式实现TCC事务的解决方案与演示业务描述有一个银行转账的场景,用户A需要向用户B转1块钱,如果大家使用的是同一个数据库,就不存在分布式事务的问题,现实中大家都各自使用自己的库,就产生了分布式事务可以理解为,两个账户分别在不同的银行(用户…

    2022年5月21日
    36
  • gdb调试命令的使用及总结_大锅安装调试指南

    gdb调试命令的使用及总结_大锅安装调试指南写这篇文档的目的是对前面GDB的知识做一次总览,本文为GDB调试指南,参考GDB调试手册,目前已有的篇目:启动调试断点设置查看源码单步调试查看变量前言GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、objective-c、PHP等语言。对于一名Linux下工作的c/c++程序员,GDB是必不可少的工具,本篇以C语言来调试。GDB简介U…

    2022年10月24日
    0
  • 计算机二级考试数据结构与算法知识点_计算机二级算法与数据结构视频

    计算机二级考试数据结构与算法知识点_计算机二级算法与数据结构视频按照自己的理解写的解题思路,如有错误希望指正。1.算法的复杂度: ①时间复杂度:执行算法所需的计算工作量(又叫:基本运算次数) ②空间复杂度:执行算法所需的内存 它们是没有任何关系的!!!2.求二叉树序列类题目 要点:前序—根左右 中序—左根右 后序—左右根 例1:已知前序ABCDE,中序BCADE,求后序;同类型,已知任意两个求第三个 解题思路: 由前序知道A是根,结合中序,CB是左子树,DE…

    2022年8月18日
    5
  • ajax实例教程_creo实例教程

    ajax实例教程_creo实例教程一、什么是Ajax?Ajax=Javascript和xml。Ajax是一种创建快速动态网页的技术。通过在后台与服务器进行少量的数据交换,Ajax可以使网页进行异步刷新,这意味着可以在不加载整个页面的情况下局部更新网页的某个部分。这么好的友好后台交互方式使Ajax技术迅速的流行起来。传统的页面如果不使用Ajax需要重新加载整个页面来实现更新内容。二、Ajax的语法步骤。

    2022年8月16日
    3
  • 少年群侠传服务器维护时间,少年群侠传————【维护】7月6日更新维护公告…

    少年群侠传服务器维护时间,少年群侠传————【维护】7月6日更新维护公告…亲爱的玩家:大家好!为了更新游戏内容,提升游戏体验,7k7k《少年群侠传》将于7月6日7:00-10:00对所有服务器进行更新维护,维护期间无法登陆游戏,维护时间预计3小时。如果在维护期间无法完成维护相关事宜,开机时间将继续顺延,如果提前解决问题,也将提前开放服务器。请各位玩家相互转告,并留意游戏开放时间。对于停机期间给您带来的不便,敬请见谅。7k7k《少年群侠传》运营团队感谢所有玩家的支持和配合…

    2022年5月12日
    32
  • SharePoint2007中的WCM

    SharePoint2007中的WCM

    2021年7月29日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号