matlab中fmincon函数求解非线性规划问题
Matlab求解非线性规划,fmincon函数的用法总结
1.简介
在matlab中,fmincon函数可以求解带约束的非线性多变量函数(Constrained nonlinear multivariable function)的最小值,即可以用来求解非线性规划问题
matlab中,非线性规划模型的写法如下

2.基本语法
[x,fval]=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.实例一
示例,求下列非线性规划:

(1)编写M函数fun1.m 定义目标函数:
function f=fun1(x);
f=x(1).^2+x(2).^2+x(3).^2+8;
(2)编写M函数fun2.m定义非线性约束条件:
function [g,h]=fun2(x);
g=[-x(1).^2+x(2)-x(3).^2
x(1)+x(2).^2+x(3).^3-20]; %非线性约束部分小于0的式子
h=[-x(1)-x(2).^2+2
x(2)+2*x(3).^2-3]; %非线性部分等于0的部分
(3)编写主程序函数
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')
所得结果为:
4.实例二:
用著名的Rosenbrock's banana函数做例子吧,当然这个例子也是matlab文档里面改过来的的
我们给出如下的约束条件:
1、
2、
3、 在以(1/3,1/3)为圆心,1/3为半径的圆内 ,就是:
4、
5、
然后,求 的最小值
然后,我们用fmincon解决
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
也就是说,我们的目标函数长这个样子:
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
线性约束部分:
lb = [0,0.2];
ub = [0.5,0.8];
A=[1,1;1,2];
b=[2;3];
非线性约束部分:
function [c,ceq] = circlecon(x)
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2; % 默认为小于等于0
ceq = []; % 不存在等式限制
在可行域内选一个点作为迭代起始点:
x0 = [1/4,1/4];
然后开始求解:
nonlcon = @circlecon;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
最后得到
x = 0.5000 0.2500
也就是 ,
matlab中fmincon函数求解非线性规划问题的更多相关文章
- 『转载』Matlab中fmincon函数获取乘子
Matlab中fmincon函数获取乘子 一.输出结构 [x,fval,exitflag,output,lambda] = fmincon(......) 二.结构说明 lambda结构 说 ...
- matlab中patch函数的用法
http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...
- matlab中subplot函数的功能
转载自http://wenku.baidu.com/link?url=UkbSbQd3cxpT7sFrDw7_BO8zJDCUvPKrmsrbITk-7n7fP8g0Vhvq3QTC0DrwwrXfa ...
- 【原创】Matlab中plot函数全功能解析
[原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...
- matlab 中max函数用法
Matlab中max函数在矩阵中求函数大小的实例如下:(1)C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的 ...
- Matlab中plot函数全功能解析
Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...
- matlab中cumsum函数
matlab中cumsum函数通常用于计算一个数组各行的累加值.在matlab的命令窗口中输入doc cumsum或者help cumsum即可获得该函数的帮助信息. 格式一:B = cumsum(A ...
- matlab中norm函数的用法
格式:n=norm(A,p) 功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数 以下是Matlab中help norm 的解释 NORM Matrix or vecto ...
- matlab中fprintf函数的具体使用方法
matlab中fprintf函数的具体使用方法实例如下: fprintf函数可以将数据按指定格式写入到文本文件中.其调用格式为: 数据的格式化输出:fprintf(fid, format, varia ...
随机推荐
- bool? int?等可为空的数值类型的运算 三值逻辑
算术运算:(+,-,*,/)时,只要一个为null,则结果为null. 比较运算符: <.>.<= 和 >=,也是如此.如果一个或全部两个操作数都为 null,则结果为 fal ...
- 图解CPU缓存一致性问题
产生背景 CPU的读取速度比内存的快,一个快一个慢,就会有矛盾,就会有人想要解决这个矛盾,所以就提出多级缓存来解决,如下图所示. L1级缓存:分为数据域和程序域. L2级缓存:二级缓存. L3级缓存 ...
- C#中String StringBuilder
String和StringBuilder和StringBuffer,这三个都是值得深究一翻的,可能很多人会说,实在不行的话,都全部用StringBuilder,啥事没有,我不能说你的想法事不正确的,但 ...
- oracle 11g rac修改监听端口(远程监听和本地监听)
转至:https://www.cnblogs.com/yj411511/p/12459533.html 目录 1.修改远程监听端口 1.1 查看远程监听状态 1.2 修改SCAN listener端口 ...
- Netty与Spring Boot的整合
最近有朋友向我询问一些Netty与SpringBoot整合的相关问题,这里,我就总结了一下基本整合流程,也就是说,这篇文章 ,默认大家是对netty与Spring,SpringMVC的整合是没有什 ...
- Leaflet:控件Control相关
Leaflet官方文档中只给出了4种控件:Zoom.Attribution.Layers.Scale:它们都是继承自Control类,具体可以参考Control. Control Zoom.Scale ...
- mysql-8.0.12 安装使用教程
Microsoft Windows [版本 10.0.15063] (c) 2017 Microsoft Corporation.保留所有权利. C:\WINDOWS\system32>D: D ...
- python hex转flaot
在使用树莓派 modbus-tk 读取寄存器值后,得到的4byte值存为了元组,想将该数据转化为float,习惯了c的用法,转到python时,数据转换这一块一头雾水,经过多次尝试最终实现.记录一下: ...
- Appium+ios环境搭建
appium 环境搭建 安装homebrew(Mac OSX上的软件包管理工具) $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubuse ...
- 关于电脑上已安装SqlServer2005再安装SqlServer23008r2的处理情况
安装SqlServer2008r2可参考这个回答,带图很详细 https://xinzhi.wenda.so.com/a/1518683577611182 1.先修改2005注册表.win+R打开运 ...