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
posted @   北极星!  阅读(3957)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
>>博客统计:随笔 -615  文章 -0  评论 -50 
点击右上角即可分享
微信分享提示