Matlab中fmincon函数的使用

  • 1. 介绍
  • 2. 语法
  • 3. 示例
    • 3.1 编写M函数fun1.m,定义目标函数
    • 3.2 编写M函数fun2.m,定义非线性约束条件
    • 3.3 编写主程序函数

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

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

1. 介绍

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

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

minf(x)s.t.{A⋅x≤bAeq⋅x=beqc(x)≤0ceq(x)=0lb≤x≤ubmin \; 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.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​A⋅x≤bAeq⋅x=beqc(x)≤0ceq(x)=0lb≤x≤ub​

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

2. 语法

Matlab求解命令为:
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=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. 示例

求下列非线性规划问题:
minf(x)=x12+x22+x32+8s.t.{x12−x2+x32≥0x12+x22+x32≤20−x12−x22+2=0x2+2x32=3x1,x2,x3≥0min \; 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.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​x12​−x2​+x32​≥0x12​+x22​+x32​≤20−x12​−x22​+2=0x2​+2x32​=3x1​,x2​,x3​≥0​

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为最优值:
x1=0.6312,x2=1.2656,x3=0.9312y=10.8672x_{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

Matlab求解非线性规划(fmincon函数的使用)相关推荐

  1. Matlab求解非线性规划,fmincon函数的用法总结

    Matlab求解非线性规划,fmincon函数的用法总结 1.简介 在matlab中,fmincon函数可以求解带约束的非线性多变量函数(Constrained nonlinear multivari ...

  2. Matlab求解非线性规划

    MATLAB求解非线性规划   (1) A.B.Aeq.Beq和线性规划一样.C.Ceq则是独特的非线性约束,其中C代表非线性不等式约束,Ceq代表非线性等式约束.由于非线性规划的目标函数可能为非线性 ...

  3. matlab优化问题约束不取等号6,matlab中fmincon函数中不含等号的边界值怎么设置?,matlab中的fmincon函数一直求不出为什么...

    导航:网站首页 > matlab中fmincon函数中不含等号的边界值怎么设置?,matlab中的fmincon函数一直求不出为什么 matlab中fmincon函数中不含等号的边界值怎么设置? ...

  4. matlab求解出来的函数,变成点乘,并且成为函数

    matlab求解出来的函数,变成点乘,并且成为函数 ****eval(['@(x,y)]',vectorize(Fun));** `

  5. MATLAB求解二元(多元)函数极值

    matlab求解二元函数极值 依然是机房中的R2010a版本 命令: 1.x=fminsearch(fun,x0)或x=fminunc(fun,x0)求极小值点x,初值选为x0 2.[x,fmin]= ...

  6. matlab fmincon 怎样停止,请教:matlab 中关于 fmincon 函数问题

    准备用matlab做一个求最优解的问题:准备用fmincon 函数.在写function的时候遇到问题,请帮忙指点.源代码如下: A = [1,1,1;-1,-1,-1;1,0,0;0,1,0;0,0 ...

  7. 利用matlab求解非线性规划问题

    一.无约束最优化问题 用于无约束最优化模型求解                                  函数:可以调用 matlab的的函数, fminsearch.fminunc. 调用格 ...

  8. Matlab求解方程或函数的根,root,fzero,solve,fsolve的区别

    1.引言 Matlab中有很多求解方程和方程组的函数,这些函数的使用可能有很多人都模棱两可,这里做一个简单的介绍,给个大方向,学会这些函数的基本使用场景.想要学习每个函数的更多细节和案例,Matlab ...

  9. matlab求解非线性规划问题

    一.无约束最优化问题 无约束最优化模型:min f(x) 函数调用:[x, fval] = fminsearch(fun, x0): [x, fval] = fminunc(fun,x0) 其中,fu ...

最新文章

  1. Codeforces Round #208 (Div. 2)D. Dima and Hares
  2. python3 sorted排序代码示例
  3. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】
  4. php审计学习:xdcms2.0.8注入
  5. SpringBoot RequestBody ajax提交对象
  6. linux显卡性能测试工具,Linux系统中A/N显卡通用计算性能测试
  7. mysql 5.5主从同步_MySQL 5.5主从同步
  8. 构建之法:第八次心得
  9. 网络安全-应急响应之入侵排查篇及相关工具
  10. 立体匹配算法(局部立体匹配 、全局立体匹配 、深度学习立体匹配 )
  11. 51单片机的超声波测距仪制作教程
  12. 贪吃蛇代码c语言100行,贪吃蛇代码-C语言.doc
  13. Time_wait为什么是2MSL的时间长度?
  14. Android开发-窗口跳转
  15. 如何辨别u盘是否为缩水,并恢复u盘真实容量
  16. - 模块“VPMC“启动失败,未能启动虚拟机?
  17. 计算机视觉中的双目立体视觉和体积度量
  18. 实用帖!分享5个素材丰富的资源网站
  19. 留良乡投资理财要合理配置资产
  20. JAR文件(文件格式)

热门文章

  1. cn域名注册公司哪家好?企业注册cn域名有什么意义?
  2. slf4j Failed to load class “org.slf4j.impl.StaticLoggerBinder“ 错误 源码解析
  3. 机器视觉行业实践技巧 -- OpenCV技巧与方法:避坑指南
  4. 物联网快速改变各行业,物联网软件开发过程中,主要面临哪些挑战?
  5. C# EF将两条数据集合成一条(根据falg取值)
  6. idea彻底卸载安装及配置笔记
  7. 【ESP32 WiFi篇(三)】ESP32 TCP服务端、客户端
  8. Windows服务的安装与卸载
  9. 拼多多、vipkid编程题
  10. qduoj-这个是道数学题(线段树+整数分解的应用)