【MATLAB】求解约束条件下的目标函数最值(fmincon用法解析)

  • 一、简介
  • 二、fmincon()的基本形式与参数
  • 三、约束条件类型与参数写法
    • 1.线性不等式约束(参数写法)
    • 2.线性等式约束(参数写法)
    • 3.非线性约束(参数写法)
  • 四、例题
    • (1)线性不等式约束下求最值示例
    • (2)线性不等式和等式约束条件下求最值示例
    • (3)非线性约束下求最值示例
  • 五、总结

一、简介

Matlab 的函数 fmincon 用来求最小约束非线性多变量函数,是一个非线性编程求解器,算出指定的问题的最小值。

注: fmincon 同样可以用来求约束条件下的最大值,主要将目标函数取反(前面加一个负号)即可。

二、fmincon()的基本形式与参数

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

输入参数:

  1. fun 是目标函数,注意需要单引号,或者@,(即写为符号函数);
  2. x0函数fun参数值的初始化;
  3. 参数值的线性不等式约束 A, b;(A * x <= b)
  4. 参数值的等式线性约束 Aeq, beq; (Aeq * x = beq)
  5. 参数值的下界和上界 lb, ub
  6. 使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。
  7. 非线性约束nonlcon,其参数值一般为约束函数。如果没有非线性不等式或等式约束,请设置 nonlcon = []。

输出参数:

  1. X 输出最优参数值
  2. Fval 输出 fun 在X参数的值
  3. Exitflag 输出fmincon额外条件值

fmincon 求解函数的基本形式:

三、约束条件类型与参数写法

约束条件下的函数极值有是三种情况
(1)线性不等式约束;
(2)线性等式约束;
(3)非线性不等式和等式约束;

1.线性不等式约束(参数写法)

线性不等式约束条件如下:


将不等式化为矩阵形式:

fmincon函数的参数可以确定为:

A = [1,2; 3,4; 5,6];
b = [10; 20; 30];

2.线性等式约束(参数写法)

线性等式约束条件如下:

同理转换为矩阵后,可知约束参数为:

Aeq = [1,2,3; 2,4,1];
beq = [10; 20];

3.非线性约束(参数写法)


非线性约束条件如下:

确认为参数时,需要设置为函数形式、。

function [c,ceq]=mycon(x)
c=-x(1)^2+x(2);  %此处不要忘记将不等式改成不等式<=0的标准形式
ceq=-x(1)-x(2)^2+2;

注:函数调用时,nonlcon 参数值为 ‘函数名’

四、例题

(1)线性不等式约束下求最值示例

以上是关于求目标函数

f=100∗(x2−x1)2+(1−x1)2f=100 *(x_2-x_1)^2+(1-x_1)^2f=100∗(x2​−x1​)2+(1−x1​)2

在线性约束 x1+2x2≤1x_1+2x_2\le1x1​+2x2​≤1 条件下的最小值,结果如下:

目标函数:

function f = fminx(x)f = 100 * (x(2) - x(1)).^2 + (1-x(1)).^2;
end

fmincon函数的使用:

[x,fval,exitflag] = fmincon(@(x) fminx(x),[0,0],[1,2],[1])

结果:

x =0.3363    0.3319fval =0.4425exitflag =1

注:结果含义为 在x1=0.3363,x2=0.3319时,取最小值:y=0.4425x_1=0.3363, x_2=0.3319时,取最小值:y=0.4425x1​=0.3363,x2​=0.3319时,取最小值:y=0.4425

(2)线性不等式和等式约束条件下求最值示例

目标函数: f=100∗(x2−x1)2+(1−x1)2f=100 *(x_2-x_1)^2+(1-x_1)^2f=100∗(x2​−x1​)2+(1−x1​)2
约束条件:

这次使用目标函数为匿名函数的方式,一步到位:

fun=@(x)100*(x(2)-x(1))^2+(1-x(1))^2;
x0=[0,0];
A=[1,2];
b=10;
Aeq=[3,4];
beq=20;
[x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq)

结果为:

x =2.8511    2.8617fval =3.4378exitflag =1

(3)非线性约束下求最值示例

上面两题只有目标函数是非线性的,如果其约束条件也是非线性的,我们又该怎么办呢?

示例1:

目标函数求值代码:

fun=@(x)x(1)^2+x(2)^2+12;
x0=rand(2,1);
A=[];
Aeq=[];
b=[];
beq=[];
lb=[0,0];
ub=[];
exitflag=1;
[x,fval,exitflag]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,'mycon')

非线性约束条件:

function [c,ceq]=mycon(x)
c=x(1)^2+2*x(2);
ceq=5*x(1)-4*x(2)^2-20;

结果为:

x =1.24710.0000fval =13.5552exitflag =-2

示例2:

目标函数为: fun=100∗(x2−x1)2+(1−x1)2fun = 100*(x_2-x_1)^2 +(1-x_1)^2fun=100∗(x2​−x1​)2+(1−x1​)2

约束条件:在以(1/3,1/3)(1/3,1/3)(1/3,1/3)为圆心,1/3 为半径,0≤x1≤0.5,0.2≤x2≤0.80 ≤ x _1 ≤ 0.5 , 0.2≤x_2≤0.80≤x1​≤0.5,0.2≤x2​≤0.8 的边界约束

function f=fun1(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2;
endfunction [g,h]=fun2(x)
g=(x(1)-1/3)^2+(x(2)-1/3)^2-1/9;
h=[];
end[x,y]=fmincon('fun1',[1/3,1/3],[],[],[],[],lb,ub,'fun2')

结果如下:

x =0.5000    0.2500
y =0.2500

五、总结

非线性规划求最值的fmincon函数其实和线性规划的improg大同小异,关键是对非线性约束条件的把握,即nonlcon,以及option(一般情况下我们不用管,默认值就可以了,有需求具体查阅使用即可)。

参考博客|:

https://blog.csdn.net/qq_52753078/article/details/121244164

https://blog.csdn.net/qq_36932020/article/details/98670486

【MATLAB】求解约束条件下的目标函数最值(fmincon用法解析)相关推荐

  1. 求解多变量非线性全局最优解_一种求解约束条件下多变量非线性函数所有全局最优解的区间算法...

    收稿日期: 20021120 基金项目: 国家自然科学基金项目(49904001) ;高等学校骨干教师资助计划资助(2123) 作者简介: 李 爽(19712) ,女 ,博士生 ,现从事大地测量地球物 ...

  2. 求解多变量非线性全局最优解_约束条件下多变量非线性函数的区间算法.doc

    约束条件下多变量非线性函数的区间算法.doc 一种求解约束条件下多变量非线性函数所有全局最优解的区间算法李爽,许才军,王新洲(武汉大学测绘学院,湖北,武汉,430079)摘要研究和实践中经常会遇到附有 ...

  3. 多约束条件求最优值matlab,[MATLAB数学相关] 请教,约束条件下多元函数最小值的求解...

    请教,约束条件下多元函数最小值的求解 请假各位高手,我的代码的第二个函数,就是那个二元函数g,目前的求解是没有任何约束的,我要在进行求解时,加入约束t1和t2都大于零,并且t1小于t2来进行求解,之前 ...

  4. matlab微分方程组边值,matlab求解常微分方程边值问题的方法

    matlab求解常微分方程边值问题的方法 Matlab 求解常微分方程边值问题的方法:bvp4c 函数 常微分方程的边值问题,即 boundary value problems ,简称 BVP 问题, ...

  5. MATLAB求解峰值、均值、平均幅值、方差、均方根、方根幅值、最值、峭度、斜度、裕度指标、波形指标、脉冲指标、峰值指标、峭度指标

    MATLAB求解峰值.均值.平均幅值.方差.均方根.方根幅值.最值.峭度.斜度.裕度指标.波形指标.脉冲指标.峰值指标.峭度指标 朋友给了份文档,要求计算标题上的这些值,原本计划用Python计算,奈 ...

  6. matlab 约束条件下三元函数的图像问题

    题目:绘制z=x+y,0<x<1,0<y<1,0.5<x+y<1(0.5<z)约束条件下的图像 代码: clc; clear; x=0:0.01:1; y=0 ...

  7. 最小覆盖模型matlab_数学规划模型的matlab求解 非线性最小二乘lsqnonlin

    数学规划模型是优化模型的一种,包括线性规划模型(目标函数和约束条件都是线性函数的优化问题); 非线性规划模型(目标函数或者约束条件是非线性的函数); 整数规划(决策变量是整数值得规划问题); 多目标规 ...

  8. 非线性规划(二): Matlab 求解约束极值问题

    非线性规划(一):定义与数值优化方法(梯度法.牛顿法.拟牛顿法.变尺度法) 非线性规划(二): Matlab 求解约束极值问题 目录 约束极值问题 1  二次规划         2  罚函数法 3 ...

  9. MATLAB数学建模-规划模型总结| MATLAB求解

    目录 1 线性规划问题(LP) 风格1 风格2 2 非线性规划 3 动态规划 A星算法 基于dijkstra的概率路线图 4 多目标规划 帕累托最优 支配(Dominace) 不可支配解集 帕累托最优 ...

最新文章

  1. Extjs4 actioncolumn只能显示图标,不能显示文字的暂时解决方法
  2. 【机器学习】HOG+SVM进行车辆检测的流程及源码
  3. 【项目管理】敏捷原则
  4. oracle11g导入错误,oracle 11g导入到10g引起的错误
  5. 使用selenium框架的Python爬虫被检测到的 解决方法
  6. python records库_Python Records库使用举例
  7. python控制excel选择区域_python操作excel常用的方法
  8. java json 合并_java中,怎么把两个jsonObject合并成一个?
  9. 小甲鱼windows程序设计(50讲)
  10. ENVI的下载和安装
  11. 贝叶斯算法详解和拉普拉斯平滑
  12. 蓝桥杯算法题--跑步锻炼(java实现)
  13. 计算机应用情话,2018最新版情话大全浪漫情话 好听感人的情话
  14. dreamweaver网页制作,主题呼吁人们保护动物
  15. MySQL 升级--1
  16. Algorithm Review 7 数学相关
  17. Proteus仿真运行流水灯程序
  18. rhino android js,android rhino
  19. 分析Google Analytics中的流量来源
  20. Camtasia配置-最低占用空间

热门文章

  1. 少儿编程之Scratch入门
  2. C语言中带负数的除法
  3. Java并发插件_五分钟,轻松掌握Java并发编程!
  4. 【NVMe2.0b 13】NVMe 标准数据结构
  5. 常见的加密算法以及加密协议
  6. GitLab CI 介绍
  7. 15.6课后习题(Java Web程序设计)
  8. 线性稳压电源和开关稳压电源
  9. 关于线性回归和逻辑回归一些深入的思考
  10. 门禁系统远程无线联网解决方案