matlab进阶:求解在约束条件下的多元目标函数最值(fmincon函数详解)

这篇具有很好参考价值的文章主要介绍了matlab进阶:求解在约束条件下的多元目标函数最值(fmincon函数详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌅*🔹** φ(゜▽゜*)♪ **🔹*🌅

欢迎来到馒头侠的博客,该类目主要讲数学建模的知识,大家一起学习,联系最后的横幅!
喜欢的朋友可以关注下,私信下次更新不迷路!

资源链接:点击这里获取众多源码、数模资料、思路精讲、论文模板latex和word、学习书籍等


💧 fmincon函数说明

Matlab 的 fmincon 函数:寻找约束非线性多变量函数的最小值

适用于:

  • 线性函数
  • 非线性函数
  • 线性等式和不等式约束
  • 非线性等式和不等式约束

目标优化问题的基本形式

min ⁡ f ( x ) \min f(x) minf(x)

s . t . { A ⋅ x ≤ b A e q ⋅ x = B e q l b ≤ x ≤ u b c ( x ) ≤ 0 c e q ( x ) = 0 s.t. \begin{cases} A \cdot x \leq b \\ Aeq \cdot x = Beq \\ lb \leq x \leq ub \\ c(x) \leq 0 \\ ceq(x) = 0 \end{cases} s.t. AxbAeqx=Beqlbxubc(x)0ceq(x)=0

fmincon语法和参数

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

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

输出参数:

  • x:输出最优参数值
  • fval:输出 fun 在X参数的值
  • exitflag: 输出fmincon额外条件值
  • lambda :结构体,其字段包含解 x 处的拉格朗日乘数。
  • grad:fun 在解 x 处的梯度。
  • hessian:fun 在解 x 处的黑塞矩阵。请参阅fmincon Hessian 矩阵。

💧 算例实战

算例都是比较简单的,希望大家好好理解,单元和多元区别不大,进阶的话重点是关于fmincon求解结果的分析,目标函数属于凸函数还是非凸,是否全局最优还是局部最优,还得考虑fmincon求解的约束容限等。

初始解x0的设定

初始解的设定也很重要,得结合你所选用的算法。下面我都是直接设定x0=rand(2,1),大家可以尝试修改初始解,看看结果有什么不同。

线性等式和不等式约束

min ⁡ f ( x ) = 3 ⋅ x 1 + 5 ⋅ x 2 \min f(x)=3 \cdot x_1 +5 \cdot x_2 minf(x)=3x1+5x2

s . t . { x 1 + 3 x 2 ≤ 20 2 x 1 + x 2 ≤ 30 x 1 + x 2 = 10 0 ≤ x 1 ≤ 10 3 ≤ x 2 ≤ 8 s.t. \begin{cases} x_1+3 x_2 \leq 20 \\ 2 x_1+x_2 \leq 30 \\ x_1+x_2 = 10 \\ 0 \leq x_1 \leq 10 \\ 3 \leq x_2 \leq 8 \\ \end{cases} s.t. x1+3x2202x1+x230x1+x2=100x1103x28

将其与前面目标规划问题的基本形式对照即可,代码如下:

clc
clear
close all
fun=@(x) 3*x(1)+ 5*x(2);
x0=rand(1,2);
A=[1,3;2,1];
b=[20;30];
Aeq=[1,1];
beq=[10];
lb=[0,3];
ub=[10,8];
[x,fval,exitflag]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

非线性等式和不等式约束

这里注意非线性部分得移项成标准形式,即非线性部分≤0非线性部分=0的形式,下方换成上面形式得移向变号,大家看到负号别讶异。

min ⁡ f ( x ) = 3 ⋅ x 1 2 + 5 ⋅ x 2 2 \min f(x)=3 \cdot x_1^2 +5 \cdot x_2^2 minf(x)=3x12+5x22

s . t . { x 1 + 3 x 2 ≤ 20 2 x 1 + x 2 ≤ 30 x 1 + x 2 = 10 0 ≤ x 1 ≤ 10 3 ≤ x 2 ≤ 8 x 1 2 − x 2 ≥ 0 x 1 − x 2 2 + 1 = 0 s.t. \begin{cases} x_1+3 x_2 \leq 20 \\ 2 x_1+x_2 \leq 30 \\ x_1+x_2 = 10 \\ 0 \leq x_1 \leq 10 \\ 3 \leq x_2 \leq 8 \\ x_1^2-x_2 \geq 0 \\ x_1-x_2^2 + 1 = 0 \end{cases} s.t. x1+3x2202x1+x230x1+x2=100x1103x28x12x20x1x22+1=0
主函数:

clc
clear
close all
fun=@(x) 3*x(1)^2+ 5*x(2)^2;
x0=rand(1,2);
A=[1,3;2,1];
b=[20;30];
Aeq=[1,1];
beq=[10];
lb=[0,3];
ub=[10,8];
[x,fval,exitflag]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,'mycon')

新建mycon.m函数

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

含有求和公式目标函数

若目标函数含有求和公式,如何用代码表示呢?

min ⁡ f ( x ) = ∑ i 50 ( x i − 1 ) 2 \min f(x)= \sum_i^{50}(x_i-1)^2 minf(x)=i50(xi1)2

  • 其中x为自变量,c为已知量

则我们的目标函数为

function f = fun(x)
f = 0;
for i=1:50
	f = f + (x(i) - 1)^2
end

matlab求约束条件,数学建模无奖到国奖,matlab,数学建模,开发语言,算法,动态规划文章来源地址https://www.toymoban.com/news/detail-679281.html

到了这里,关于matlab进阶:求解在约束条件下的多元目标函数最值(fmincon函数详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MATLAB:梯度下降法求解一元和多元函数极小值和极大值

    梯度下降法,顾名思义即通过梯度下降的方法。对于一个函数而言,梯度是一个向量,方向是表示函数值增长最快的方向,而大小则表示该方向的导数。下面展示了用梯度下降法求解一元函数的MATLAB代码: syms x; y = @(x)((x-1).^2); % 定义一元函数 dy = diff(y,x); % 一元函数导数 x =

    2024年02月05日
    浏览(16)
  • 人工智能_机器学习065_SVM支持向量机KKT条件_深度理解KKT条件下的损失函数求解过程_公式详细推导_---人工智能工作笔记0105

    之前我们已经说了KKT条件,其实就是用来解决 如何实现对,不等式条件下的,目标函数的求解问题,之前我们说的拉格朗日乘数法,是用来对 等式条件下的目标函数进行求解. KKT条件是这样做的,添加了一个阿尔法平方对吧,这个阿尔法平方肯定是大于0的,那么 可以结合下面的文章去

    2024年02月04日
    浏览(14)
  • 带约束条件的运筹规划问题求解(模拟退火算法实现)

    超级简单的模拟退火算法实现ε٩(๑ ₃ )۶з搭配最简单的线性规划模型进行讲解!但是如果需要的话,可以直接修改程序求解非线性问题哦(´つヮ⊂︎) [max,f(x)=10x_1+9x_2] (s.t.) [6x_1+5x_2leq{60}tag{1}] [10x_1+20x_2leq{150}tag{2}] [0leq{x_1}leq{8}tag{3}] [0leq{x_2}leq{8}tag{4}] 对约束

    2023年04月18日
    浏览(15)
  • 【多目标规划问题求解】ε-约束算法

    TIME:2022/07/30 Author:雾雨霜星 Web:雾雨霜星的小站 小站原文链接:https://www.shuangxing.top/#/post?id=27 [1]Nima Amjady and Jamshid Aghaei and Heidar Ali Shayanfar. Stochastic Multiobjective Market Clearing of Joint Energy and Reserves Auctions Ensuring Power System Security[J]. IEEE Transactions on Power Systems, 2009, 24(4) : 1841-1854. [

    2024年02月05日
    浏览(63)
  • 约束优化求解之罚函数法

    罚函数法 本部分考虑约束优化问题: min ⁡ f ( x ) s . t . x ∈ χ (1) begin{aligned} min f(x) \\\\ s.t. xinchi end{aligned} tag{1} min f ( x ) s . t . x ∈ χ ​ ( 1 ) 这里 χ ⊂ R n chisubsetmathbb{R}^n χ ⊂ R n 为问题的可行域。与无约束问题不同,约束优化问题中自变量 x x x 不能任意取值,这导致

    2023年04月19日
    浏览(11)
  • 基于梯度下降算法的无约束函数极值问题求解

    导数(Derivative),也叫 导函数值 。又名 微商 ,是微积分中的重要基础概念。 导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率 。如果函数的自变量和取值都是实数的话,函数在某一点的导数就是该函数所代表的曲线在这一点上的切线

    2024年02月13日
    浏览(14)
  • MATLAB粒子群算法求解带容量约束的物流配送选址问题实例

    粒子群算法编程问题实例: MATLAB粒子群算法求解带容量约束物流配送中心选址问题代码实例 在经度范围为(116, 118),纬度范围为(38, 40)的矩形区域内,散布着37个需求点,各个需求点的坐标及需求量见表1。要求在该矩形区域内确定N个位置建立配送中心。已知各配送中心容量不

    2024年02月10日
    浏览(20)
  • 利用 MATLAB 编程实现乘子法求解约束最优化问题。 拟 Newton 法

    1、画出 PH 法的算法流程图; 2、MATLAB 编写 PH 法求解约束优化问题的函数,无约束子问题用精确一 维搜索的拟 Newton 法((函数式 M 文件,精度设为 epson 可调);编写程序(命 令式 M 文件),调用 PH 法,求解如下问题:   初始点取(10,10),按教材 P217,例 12 取不同的参

    2024年02月11日
    浏览(17)
  • 通用的改进遗传算法求解带约束的优化问题(MATLAB代码精讲、实际工程经验分享)

    在对多约束、非线性问题的求解上,传统线性规划等方法往往无法有效求解(求解时间过长、无法处理非线性约束等。 进化算法是一类强有力的工具,已经在多个领域有了较为成功的应用。然而,在利用遗传算法、粒子群等等进化算法求解实际的优化问题时,还存在许多困难

    2023年04月19日
    浏览(15)
  • Matlab多元非线性函数拟合

    看了多篇文章,觉得没有一篇比较全,且可以参照的多元非线性函数拟合,看了多篇文章后总结以下内容,主要以示例给出,希望能帮助到大家快速上手。 beta = nlinfit(X, Y, modelfun, beta0) X为你的自变量,Y是因变量,modelfun是你用inline定义的函数名字,beta0是模型参数的初始值。

    2024年02月07日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包