MATLAB的Format和fmincon优化函数

Format和fmincon优化函数

近来在学习利用matlab书写的优化算法,其中用到了format和fmincon函数,正好之前没有对这两个函数有所了解过,所以就趁这个机会学习一下两个函数的使用方法。

  • format函数(设置命令行窗口的输出显示格式)

    • 通过官方的帮助文档可以看到有以下使用语法:

      format(style)
      fmt = format
      fmt = format(style)
      
    • 针对以上的语法

      % 第一个语法 format(style) 的使用,是事先指定接下来所使用的变量的数据格式
      format ("long")  % 或者
      format long
      a = 0.1234850   
      a;% 此时若是在matlab中进行输入,得到的结果将会是后面补零的共 16 位的数据。
      b = format;  % 此时会输出当前工作空间中数据的具体数据格式
      c = format("short"); % 会将当前的数据格式设置为short,并把上一个设置的数据格式信息存进c中
      format(b); % 会把b的数据格式重新加载进工作空间中
      a;  
      c;
      

      上述代码运行的结果如下图:

    请添加图片描述

    • 上述语法中的style的类型有以下几种,比较常用的也就前面两种。
      请添加图片描述
  • fmincon函数

    官方解读:寻找约束非线性多变量函数的最小值

    % 语法格式
    x = fmincon(fun,x0,A,b)
    x = fmincon(fun,x0,A,b,Aeq,beq)
    x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
    x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
    x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
    x = fmincon(problem)
    [x,fval] = fmincon(___)
    [x,fval,exitflag,output] = fmincon(___)
    [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)
    
    • 针对以上语法需要注意的是该优化函数使用时候的通式

请添加图片描述

图中主要是优化函数的大体格式,其中  
​$A*x<=b$ 和 $Aeq*x=beq$ 这俩公式是线性等式和不等式的约束。  
​$lb<=x<=ub$ 是优化条件中的上下边界。  
​$C(x)<=0 和 Ceq(x) = 0$ 是非线性等式和不等式约束,一般在设置nonlcon中实现。  
​$f(x)$ 则表示优化的函数。  
如若没有对应的约束条件,则只需要将相应的位置**设置为空**矩阵即可。

针对以上的参数,举例说明:

```matlab
fun = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;   %设置目标函数,属于匿名函数
lb = [0,0.2];   
ub = [0.5,0.8];    % x1和x2的最佳值在[0,0.5]及[0.2,0.8]范围内寻找,相当于上文提到的边界值
A = [];      
b = [];
Aeq = [];
beq = [];          % 无线性约束,上面四个参数设置为空
x0 = [1/4,1/4];    % 定义初始值
nonlcon = @circlecon   % 设置非线性约束的函数
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon); % 调用优化函数

function [c,ceq] = circlecon(x)   % 该函数应用时,理应单独设置一个文件
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2
ceq = [];
```
  • 除上外,在官方提供的语法里,还有个参数是:options——该参数为非默认参数,也就是说可以不设置。

    • option选项的语法是以下的格式:

      option = optimoptions('fmincon','display','iter','Algorithm','sqp'); 
      % 上段语法中包含了算法的计算显示和算法选择两个参数。对于有梯度的目标函数优化,可以进行以下的代码设置
      option = optimoptions('fmincon','SpecifyObjectiveGradient','ture');
      

      具体的可以参考optimoptions参数设置。

  • 有了输入就要有输出,针对fmincon函数的输出,从函数的语法结构上最后一个可以看到共有以下的几种输出参数。

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

    其中:官网参数释义参考

    • x:表示优化的函数的最优解,x(1)、x(2)、x(3)…等
    • fval:表示优化后的函数值
    • exitflag:该值为1的话,表示fval值为该优化的的局部最小值,并不是最小值。
    • output:该参数是一个结构体,其中可以参考的有,iterations——迭代次数;funcCount——函数计算次数;constrviolation——表示可行性。
    • lambda:也是一个结构体,一般用不到。
    • grad:表示在解 x 处的目标函数梯度值。
    • hessian:逼近黑塞矩阵。(不太懂,可参考Hessian矩阵输出
  • 针对fmincon函数的具体使用基本就是上面的这些,如果需要再深入研究可以参考官方文档:fmincon函数

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
fmincon是Matlab中的一个优化工具箱函数,可以用于求解多种类型的约束最优化问题。其主要功能是通过对给定的目标函数进行求导,找到最小或最大化目标函数的最优解。 在使用fmincon时,需要定义目标函数、约束条件以及初始值等参数,其中目标函数可以是线性或非线性函数,约束条件可以是线性或非线性等式或不等式约束。另外,还需要指定优化算法优化精度等参数。 以下是一个简单的例子,演示如何使用fmincon来求解一个非线性约束最优化问题: ``` % 定义目标函数及初始值 fun = @(x) 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2; x0 = [-1.2, 1]; % 定义约束条件 A = []; b = []; Aeq = []; beq = []; lb = [-Inf, 0]; ub = [Inf, Inf]; nonlcon = @(x)deal([], [x(1) + x(2)^2 - 1]); % 调用fmincon函数进行求解 options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'sqp'); [x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options); ``` 在上述代码中,我们定义了一个非线性目标函数fun,以及初始点x0。约束条件包括一个非线性等式约束和一个非线性不等式约束,其中通过nonlcon函数将非线性等式约束转化为了两个输出参数的形式。最后,我们调用fmincon函数,使用sqp算法进行求解,并设置了迭代过程的输出信息。 需要注意的是,在使用fmincon时,需要根据具体问题进行参数的设置和调整,以获得最优的求解结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值