Matlab fmincon函数

article/2025/8/17 7:06:34

文章目录

        • 函数功能
        • 函数表达及用法
          • ==**trust-region-reflective算法的说明 (梯度)**==
          • **==Hessian矩阵应用说明==**
        • 返回值

函数功能

获取约束的非线性多变量函数的最小值
样式:

其中,c(x), ceq(x) 分别表示非线性的约束条件,而A, Aeq表示的是线性约束。

函数表达及用法

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
  1. fun
    minimizes fun
  2. 初始值
    starts at x0,x0 can be a scalar, vector, or matrix.
  3. 线性约束
    attempts to find a minimizer x of the function described in fun subject to the linear inequalities Ax ≤ b,Aeqx = beq,and the range lb ≤ x ≤ ub
  4. 非线性约束
    the nonlinear inequalities c(x) or equalities ceq(x) defined in nonlcon
    For example,
    x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
    where mycon is a MATLAB function such as
    function [c,ceq] = mycon(x)
    c = ...     % Compute nonlinear inequalities at x.
    ceq = ...   % Compute nonlinear equalities at x.
    
  5. 选项
    Optimization options, specified as the output of optimoptions or a structure such as optimset returns
    在这里插入图片描述
trust-region-reflective算法的说明 (梯度)

针对SpecialObjectiveGradient 将梯度计算加入目标函数中,以实现更快或更可靠的计算。将梯度计算作为条件化输出包含在目标函数文件中
在这里插入图片描述

function [f,g] = rosenbrockwithgrad(x)
% Calculate objective f
f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;if nargout > 1 % gradient requiredg = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));200*(x(2)-x(1)^2)];
end

注:
1.目标函数(标量)作为第一个输出,梯度(向量)作为第二个输出(应该是默认的)
2.使用 optimoptions 将 SpecifyObjectiveGradient 选项设置为 true。如果有的化,也将 SpecifyConstraintGradient 选项设置为 true。

fun = @rosenbrockwithgrad;
x0 = [-1,2];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [-2,-2];
ub = [2,2];
nonlcon = [];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

调用

options = optimoptions('fmincon','SpecifyObjectiveGradient',true);输出结果
Local minimum found that satisfies the constraints.Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.x =1.0000    1.0000

在这里插入图片描述
在这里插入图片描述

Hessian矩阵应用说明

上例代码修改为

function [f, g, H] = rosenboth(x)
% Calculate objective f
f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;if nargout > 1 % gradient requiredg = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));200*(x(2)-x(1)^2)];if nargout > 2 % Hessian requiredH = [1200*x(1)^2-400*x(2)+2, -400*x(1);-400*x(1), 200];  endend

注:
1.使用 fmincon ‘trust-region-reflective’ 和 ‘interior-point’ 算法以及 fminunc ‘trust-region’ 算法来包含二阶导数。根据信息的类型和算法,可通过几种方法来包括 Hessian 矩阵信息。
2. 您还必须包含梯度(将 SpecifyObjectiveGradient 设置为 true,如果适用,还必须将 SpecifyConstraintGradient 设置为 true)以便包含 Hessian 矩阵

调用:

options = optimoptions('fminunc','Algorithm','trust-region',...'SpecifyObjectiveGradient',true,'HessianFcn','objective');

适用于 fmincon 内点算法的 Hessian 矩阵. 该 Hessian 矩阵是拉格朗日函数的 Hessian 矩阵,其中 L(x,λ) 是
在这里插入图片描述
g 和 h 是向量函数,分别表示所有不等式和等式约束(指有界、线性和非线性约束),因此最小化问题的公式为
在这里插入图片描述
拉格朗日方程的 Hessian 矩阵公式为:
在这里插入图片描述
ssian 是 n×n 矩阵(稀疏或稠密),其中 n 是变量的数目。如果 hessian 很大并且非零项相对较少,请将 hessian 表示为稀疏矩阵,以节省运行时间和内存。lambda 是具有与非线性约束相关联的拉格朗日乘数向量的结构体:

lambda.ineqnonlin
lambda.eqnonlin
fmincon 计算结构体 lambda,并将其传递给您的 Hessian 函数。hessianfcn 必须计算上式中的总和。通过设置以下选项表明您提供了 Hessian 函数:

ptions = optimoptions('fmincon','Algorithm','interior-point',...'SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true,...'HessianFcn',@hessianfcn);

在这里插入图片描述

function Hout = hessianfcn(x,lambda)
% Hessian of objective
H = [1200*x(1)^2-400*x(2)+2, -400*x(1);-400*x(1), 200];
% Hessian of nonlinear inequality constraint
Hg = 2*eye(2);
Hout = H + lambda.ineqnonlin*Hg;

将 hessianfcn 保存到 MATLAB 路径。为了完成此示例,包含梯度的约束函数为

function [c,ceq,gc,gceq] = unitdisk2(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [ ];if nargout > 2gc = [2*x(1);2*x(2)];gceq = [];
end

调用:

fun = @rosenboth;
nonlcon = @unitdisk2;
x0 = [-1;2];
options = optimoptions('fmincon','Algorithm','interior-point',...'SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true,...'HessianFcn',@hessianfcn);
[x,fval,exitflag,output] = fmincon(fun,x0,[],[],[],[],[],[],@unitdisk2,options);

在这里插入图片描述
在这里插入图片描述

  1. Algorithm

返回值

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___) additionally returns:

x— variable
fval— the value of the objective function fun
exitflag— describes the exit condition of fmincon,
output— a structure output with information about the optimization process.
lambda — Structure with fields containing the Lagrange multipliers at the solution x.
grad — Gradient of fun at the solution x.
hessian — Hessian of fun at the solution x. See fmincon Hessian.

有关拉格朗日算子到底是啥,可参考:如何理解拉格朗日乘子法?
梯度和海森矩阵请参考:牛顿法与拟牛顿法学习笔记

  1. exitflag
    在这里插入图片描述
  2. output
    在这里插入图片描述
  3. lambda
    在这里插入图片描述
  4. Hessian
    在这里插入图片描述

http://chatgpt.dhexx.cn/article/X7hUrUhA.shtml

相关文章

MATLAB fmincon函数 进阶资料(磕盐记录)

说明: 阅读本文前,请先阅读 参考网址1-基础使用 中的案例,本文适用于运行过 fmincon函数 案例的读者!!! 一、fmincon函数:算法介绍 fmincon函数中,可以调用五种算法(具…

通过matlab自带的fmincon工具箱函数实现多维目标优化仿真

目录 一、理论基础 二、核心程序 三、仿真结论 一、理论基础 fmincon是matlab自带的优化工具箱函数之一,用于求解具有约束条件的多维目标优化问题。本文将详细介绍fmincon的用法,包括函数参数、优化模型的构建、约束条件的处理、求解结果的分析等。 …

MATLAB优化函数fmincon的简介

1 需要解决的问题 能效优化问题: 优化目标为找到最小化J对应的u、v。 时间为从零点开始的24小时,每隔20分钟取一次值,不同时间段的u、v不同,最后得到的u、v为72维的向量。 2 fmincon函数 fmincon解决的是形如下面问题的最优化…

Matlab非线性规划之fmincon()函数

关于非线性规划 非线性规划问题是指目标函数或者约束条件中包含非线性函数的规划问题。 前面我们学到的线性规划更多的是理想状况或者说只有在习题中,为了便于我们理解,引导我们进入规划模型的一种情况。相比之下,非线性规划会更加贴近实际的…

OpenJDK各平台版本下载

开源清华大学镜像 https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/ https://share.weiyun.com/pggTSFlP

如何下载OpenJDK安装版本

进入OpenJDK 官网: 选择需要的版本即可下载。

OpenJDK windows下安装过程

Windows下安装OpenJDK,需要额外配置系统环境变量(这和n年以前安装OracleJDK一样。。。) 下载OpenJDK12,并解压至任意文件夹 地址:http://jdk.java.net/12/ 配置环境变量 1.设置JAVA_HOME,指向openJDK目录 2.新建系统变量CLASS…

windows下载openjdk1.8

下载页:http://jdk.java.net/ openjdk8下载地址:https://jdk.java.net/java-se-ri/8-MR3(注意是32位的,官网64位没找到) 如图: 然后,1.添加环境变量:JAVA_HOMEF:\java-se-8-ri\bin…

windows jdk安装;windows openjdk安装

因为最近重新装了系统,要安装jdk环境。以前都是安装的oracle jdk,所以今天尝试安装下open jdk安装。 1. 下载openjdk ,我这里选择jdk8;jdk常用的几个版本 8 ;11;18;下载的文件为zip解压版; 下载…

openJDK源码下载及阅读

完全来源于:openJDK源码下载 1、打开openjdk网站 打开链接:http://hg.openjdk.java.net/ 2、点击想要下载的jdk的版本,如jdk8u 3、在新页面中找到jdk8u然后点击下面的jdk连接 4、然后出现了一个我们看不懂的页面,不要着急&…

windows下载openjdk8(附赠安装包)

openjdk下载地址:https://jdk.java.net/ (文末已经为大家下好了,放在网盘里) 进去后点8,win。 安装好后,使用java -version命令如下: 成功安装openjdk! 为大家提供网盘(…

openJDK下载教程

引用自:https://my.oschina.net/u/2518341/blog/1931088 直接从这个链接进http://hg.openjdk.java.net/ 附:下载链接https://adoptopenjdk.net/releases.html openJDK百度云链接: 链接:https://pan.baidu.com/s/1kPhgdhCRntkav…

openjdk1.8的下载与安装

需求场景: 之前使用的是jdk1.8,在对接企业微信开发中,对企业微信回传的好友信息进行解密校验的时候,显示如下异常:然后同样的分支在同事那边可以正常运行,排除一下后,确定是jdk版本的问题,换上了…

openJDK 源码下载

登录官网,找到openJDK的github地址: OpenJDK GitHubOpenJDK has 96 repositories available. Follow their code on GitHub.https://github.com/openjdk 进一步在tag页,查找需要的版本,比如这里下载 jdk8的最后一个版本&#xf…

Linux——安装JDK和OpenJDK【多种方法】

目录 一、Linux安装OpenJDK 1、查看系统是否有自带的版本 2、删除OpenJDK 3、本地下载OpenJDK 4、无法本地下载,也可以使用命令下载(方法1) 4、无法本地下载,也可以使用命令下载(方法2) 5、拓展 三…

openJDK 17.0.1 的下载与安装

openJDK 17.0.1 的下载与安装 下载安装 下载 我的安装环境为win10 下载地址:https://developers.redhat.com/products/openjdk/download 安装 下载好后,解压出来 可以进入bin目录中,测试是否完整,如图 然后配置好环境变量即…

openJDK 官方二进制下载

前言 由于Oracle的jdk收费license,JDK8 201~221开始不免费了,目前有最近的JDK17 LTS明确免费了,但是不确定什么时候会修改协议,而且升级jdk也不能从jdk8升级到jdk17吧,LTS版本有8/11/17,目前即使升级也先升…

OpenJDK各版本下载

开源清华大学镜像 清华大学开源软件镜像站 | Tsinghua Open Source Mirror清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。http…

OpenJDK源码下载

OpenJDK源码地址: https://openjdk.org/ 找到github地址 https://github.com/openjdk/ 点击JDK 选择你想下载的任何一个版本 选择版本 这里选择jdk最后更新的一个版本 git clone Download ZIP 我这里现在失败了,就Download ZIP吧

JDK 下载与安装

首先下载 jdk 最新版本。可以去 http://java.sun.com/j2se/1.4.2/download.html 版本一:适合 win7oracle 版本 java 下载最新的 jdk 版本, 打开界面后。选择 J2SE v 1.4.2_08 SDK 拦目下面的 Download J2SE SDK, 然后选择 Accept License…