matlab中fmincon函数求解非线性规划问题
本文总字数:1592,阅读预计需要:4分钟
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')
所得结果为:
x1=0.5522,x2=1.2033,x3=0.9478
最小值y=10.651
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
也就是 ,
转自:https://www.cnblogs.com/goodtwo/p/11146540.html
链接:https://www.zhihu.com/question/57557247/answer/332589995
我们向往远方,却忽略了此刻的美丽
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗