当前位置:   article > 正文

Matlab非线性优化函数fmincon

matlab非线性优化函数

Matlab优化工具箱提供 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(___)

其中fun是待优化函数的函数文件;x0为初始值;A,b分别为非线性不等式的系数;Aeq,beq分别为非线性等式的系数;lb,ub分别为自变量的下界和上界;options是参数设置,可通过函数设置边界。

例如我们要求如下函数的最优值:

  1. clc;clear all
  2. [x,y]=fmincon("fun1",rand(3,1),[],[],[],[],zeros(3,1),[inf,inf,inf],"fun2")

其中fun1是待优化的函数文件,fun2是约束函数文件。由于题目没有给定三个自变量的初始值,我们可以生成三个随机数当作其初始值。如果对随机数抱有质疑可以多次运行代码对比结果。fun1和fun2的函数文件设置如下所示:

  1. function f = fun1(x);
  2. f = sum(x.^2)+8;
  3. end
  1. function [g,h] = fun2(x);
  2. g = [-x(1)^2+x(2)-x(3)^2;
  3. x(1)+x(2)^2+x(3)^2-20];
  4. h = [-x(1)-x(2)^2+2;
  5. x(2)+2*x(3)^2-3];
  6. end

注意:

①如果要求最大值,可以在fun1中添加负号。在求函数值的时候再添加负号输出。

②在fun2中,g代表非线性不等式约束,h代表非线性等式约束。变量的声明和定义要一一对应。

代码运行结果如下:

 可见在约束条件下,x1、x2、x3分别取0.5522 1.2033 0.9478的时候,目标函数有最小值10.6511

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/350629
推荐阅读
相关标签
  

闽ICP备14008679号