Matlab fmincon函数用法

Matlab fmincon函数用法原文地址:fmincon函数用法”>Matlab fmincon函数用法作者:长笛人倚楼Gloria这个函数在之前优化工具箱一文中已经介绍过,由于其应用广泛,所以这里通过实例单独整理一下其用法。一、基本介绍求解问题的标准型为minF(X)s.tAXAeqX=beqG(x)Ceq(X)=0VLB 其中X为n维变元向量,G(x)与Ceq(X)均为非线性函数组成的

大家好,又见面了,我是你们的朋友全栈君。

原文地址:长笛人倚楼Gloria
这个函数在之前优化工具箱一文中已经介绍过,由于其应用广泛,所以这里通过实例单独整理一下其用法。
一、基本介绍
求解问题的标准型为
min F(X)
s.t
AX <= b
AeqX = beq
G(x) <= 0
Ceq(X) = 0
VLB <= X <= VUB
 
其中X为n维变元向量,G(x)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划,二次规划中相同,用Matlab求解上述问题,基本步骤分为三步:
1. 首先建立M文件fun.m定义目标函数F(X):
function f = fun(X);
f = F(X)
 
2. 若约束条件中有非线性约束:G(x) <= 0 或 Ceq(x) = 0,则建立M文件nonlcon.m定义函数G(X)和Ceq(X);
function [G, Ceq] = nonlcon(X)
G = …
Ceq = …
 
3. 建立主程序,非线性规划求解的函数时fmincon,命令的基本格式如下:
 
2. 第二种方法,通过函数设置边界
例2: min f(x) = exp(x1) * (4*x1^2 + 2*x2^2 + 4*x1*x2 + 2*x2 + 1)
x1 + x2 = 0
1.5 + x1 * x2 – x1 – x2 
<= 0
-x1*x2 – 10 <= 0
function youh3
clc;
x0 [-1, 1];
[];b [];
Aeq []; beq [];
vlb []; vub [];
[x, fval] fmincon(@fun4, x0, A, b, Aeq, beq, vlb, vub, @mycon)
 
function fun4(x);
exp(x(1)) (4*x(1)^2 2*x(2)^2 4*x(1)*x(2) 2*x(2) 1);
 
function [g, ceq] mycon(x)
[1.5 x(1)*x(2) – x(1) – x(2); -x(1)*x(2) – 10];
ceq [x(1) x(2)];
 
3. 进阶用法,增加梯度以及传递参数
这里用无约束优化函数fminunc做示例,对于fmincon方法相同,只需将边界项设为空即可。
(1)定义目标函数
function [J, grad] costFunction(theta, X, y)
%COSTFUNCTION Compute cost and gradient for logistic regression
  COSTFUNCTION(theta, X, y) computes the cost of using theta as the
  parameter for logistic regression and the gradient of the cost
  w.r.t. to the parameters.
 
Initialize some useful values
length(y); number of training examples
 
You need to return the following variables correctly 
0;
grad zeros(size(theta));
 
====================== YOUR CODE HERE ======================
Instructions: Compute the cost of particular choice of theta.
              You should set to the cost.
              Compute the partial derivatives and set grad to the partial
              derivatives of the cost w.r.t. each parameter in theta
%
Note: grad should have the same dimensions as theta
%
 
theta;
hx ./ (1 exp(-z));
1/m sum([-y’ log(hx) – (1 – y)’ log(1 – hx)]);
 
for  1: length(theta)
    grad(j) 1/m sum((hx – y)’ X(:,j));
end
 
 
=============================================================
 
end
 
(2)优化求极小值
 Set options for fminunc
options optimset(‘GradObj’‘on’‘MaxIter’400);
 
 Run fminunc to obtain the optimal theta
 This function will return theta and the cost 
[theta, cost] 
    fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
 
[theta, cost] 
  fminunc(@(t)(costFunction(t, X, y)), initial_theta);
Print theta to screen
fprintf(‘Cost at theta found by fminunc: %fn’cost);
fprintf(‘theta: n’);
fprintf(‘ %f n’theta);
 
 
 
 
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150533.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java实习生面试题分享

    Java实习生面试题分享1 Java 有那些基本数据类型 String 是不是基本数据类型 他们有何区别 Java 语言提供了八种基本类型 六种数字类型 四个整数型 两个浮点型 字节型 byte8 位短整型 short16 位整型 int32 位长整型 long64 位单精度 float32 位双精度 double64 位一种字符类

    2025年7月30日
    5
  • 字典序输出_按姓名字典序排序

    字典序输出_按姓名字典序排序这一类的题目在面试中的算法是比较常见的,这里也自己做一个总结1.输入一个数字n,输出从1~n组成的数字的全排列,每个排列占一行,输出按照数值升序排列https://blog.csdn.net/desirepath/article/details/50447712从数组的末尾开始,首先找到第一个升序的数字对,然后交换这个数字对,然后从这个数字对开始,按照生序交换后面的所有数字。2…将1~…

    2025年7月5日
    4
  • laravel 多个项目共享SESSION

    laravel 多个项目共享SESSION

    2021年11月7日
    47
  • SQL Server 数据库学习「建议收藏」

    SQL Server 数据库学习「建议收藏」一、认识数据库1、数据库的基本概念2、数据库常用对象3、数据库的组成数据库主要由文件和文件组组成。数据库中所有的数据和对象都被存储在文件中。二、创建数据库1、创建数据库对象资源管理器—数据库——右击——新建数据库三、操作数据表与视图1、创建数据表空值:表示数据未知。非空值:数据列不允许空值。(1)选择一个数据库——展开表——…

    2022年8月20日
    6
  • 朴素贝叶斯分类器_sklearn朴素贝叶斯分类器

    朴素贝叶斯分类器_sklearn朴素贝叶斯分类器所谓分类,就是根据事物的特征(Feature)对其归类(Class)特征的数据特点有两种可能:1.离散/标签2.连续/浮点数(大样本/小样本)下面我们分别来看一、离散/标签这是一个病人

    2022年8月3日
    12
  • linux下的录屏软件_Linux离线安装录屏

    linux下的录屏软件_Linux离线安装录屏在ubuntu和kalilinux下我测试了几款录屏软件,比较好用的是RecordMyDesktop。mac下录屏软件朋友介绍使用screenflow.按键显示工具keycastr。不过目前没有测试过。

    2022年9月14日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号