精华内容
下载资源
问答
  • Matlab非线性优化函数:fmincon();

    千次阅读 2018-11-08 20:50:00
    %定义目标函数; function f = myfun(x) ...%非线性约束; function [c, ceq] = nonlia(x) c = -x(1)^2 + x(2); %不等式约束; ceq = -x(1) - x(2)^2 + 2; %等式约束; end %在命令窗口输入: ...

    %定义目标函数;
    function f = myfun(x)
    f = x(1)^2 + x(2)^2 + 8;
    end
    

    %非线性约束; function [c, ceq] = nonlia(x) c = -x(1)^2 + x(2); %不等式约束; ceq = -x(1) - x(2)^2 + 2; %等式约束; end %在命令窗口输入: A = []; b = []; Aeq=[]; beq=[]; lb = [0; 0]; ub = []; x0 = [0; 0]; [x,fval,exitflag,output,lambda,grad,hessian] = fmincon('myfun',x0,A,b,Aeq,beq,lb,ub,'nonlia'); 得:x = 1.0000 1.0000 fval = 10.0000

     

    %目标函数;
    function f = myfun(x)
    f = -x(1) - 2*x(2) +0.5*x(1)^2 + 0.5*x(2)^2;
    end
    
    
    %非线性约束;
    function [c, ceq] = nonlia(x)
    c = 2*x(1) + 3*x(2)^2 - 6;       %不等式约束;
    ceq = []; %等式约束;
    end
    
    
    %在命令窗口输入:
    clc;
    clear all;
    A = [2 3; 1 4];  %线性不等式系数;
    b = [6;5];       
    Aeq = [];       
    beq = [];
    lb = [0; 0];
    ub = [];
    x0 = [0; 0];
    [x,fval,exitflag,output,lambda,grad,hessian] = fmincon('myfun',x0,A,b,Aeq,beq,lb,ub,'nonlia');
    
    得:x =
    
        0.7647
        1.0588
    
    >> fval
    
    fval =
    
       -2.0294
    

      

    注意这里是求最大值,目标函数需要取反;

    %目标函数;
    function f = myfun(x)
    f = -(log(x(1)) + log(x(2)));
    end
    
    
    %非线性约束;
    function [c, ceq] = nonlia(x)
    c = [];       %不等式约束;
    ceq = [];     %等式约束;
    end
    
    %在命令行输入:
    clc;
    clear all;
    A = [1 -1];
    b = 0;
    Aeq= [1 2];
    beq = 5;
    
    lb = [0; 0];
    ub = [];
    x0 = [0; 0];
    [x,fval,exitflag,output,lambda,grad,hessian] = fmincon('myfun',x0,A,b,Aeq,beq,lb,ub,'nonlia');
    
    得:x =
    
        1.6667
        1.6667
    
    >> fval
    
    fval =
    
       -1.0217
    

      

    %定义目标函数;
    function f = myfun(x)
    f = sqrt(x(2));
    end
    
    
    
    %非线性约束;
    function [c, ceq] = nonlia(x)
    c = [8*x(1)^3-x(2);(1-x(1))^3-x(2)];  %多个不等式约束情况; 
    ceq =[]; %等式约束;
    end
    
    
    
    %在窗口输入如下命令
    A = [];
    b = [];
    Aeq = [];
    beq = [];
    lb = [0,0];
    ub = [];
    x0 = [1.234; 5.678];
    [x,fval,exitflag,output,lambda,grad,hessian] = fmincon('myfun',x0,A,b,[],[],lb,[],'nonlia');
    
    
    
    得:
    x =
    
        0.3333
        0.2963
    
    >> fval
    
    fval =
    
        0.5443
    

      

    转载于:https://www.cnblogs.com/GuanghuiLiu/p/9931946.html

    展开全文
  • 最近在做方程组的非线性优化问题,用到了fgoalattain函数,总结一下: 意义 解决多目标的非线性优化问题 函数形式 函数表示形式如下: 上式中,weight, goal, b和beq 是向量(组),A 和Aeq 是矩阵, c(x), ceq(x)和F...

    最近在做方程组的非线性优化问题,用到了fgoalattain函数,总结一下:

    1. 意义
      解决多目标的非线性优化问题
    2. 函数形式
      函数表示形式如下:
      在这里插入图片描述
      上式中,weight, goal, b和beq 是向量(组),A 和Aeq 是矩阵, c(x), ceq(x)和F(x) 返回值为向量的函数,函数可以是非线性的,x, lb, ub 可以以向量或者矩阵的形式传递或者表示;
    3. 在不同场景下的语法形式
    x = fgoalattain(fun,x0,goal,weight)
    x = fgoalattain(fun,x0,goal,weight,A,b)
    x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
    x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
    x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 
    x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
    x = fgoalattain(problem)
    [x,fval] = fgoalattain(...)
    [x,fval,attainfactor] = fgoalattain(...) 
    [x,fval,attainfactor,exitflag] = fgoalattain(...)
    [x,fval,attainfactor,exitflag,output] = fgoalattain(...)
    [x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(...)
    
    1. 描述
    x = fgoalattain(fun,x0,goal,weight)  的作用是使函数fun提供的目标函数通过改变x的值来实现goal指定的目标,x的数值从x0开始,权重由weight指定;
    x = fgoalattain(fun,x0,goal,weight,A,b) 的作用是解决线性不等式A*x ≤ b的目标优化问题;
    x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq) 的作用是解决线性等式Aeq * x = beq的目标优化问题。 如果不存在不等式,则通过指定设置A = []和b = []的形式进行填充。
    x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub) 的作用是在以上式子的基础上,在x中的设计变量上定义了一组下限和上限,因此解决方案始终在lb≤x≤ub的范围内。
    x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 的作用是将目标优化问题置于nonlcon参数中定义的非线性不等式c(x)或非线性等式ceq(x)。 fgoalattain优化使得c(x)≤0且ceq(x)= 0.如果不存在边界,则设置lb = []或ub = [];
    x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)的作用是通过options中指定的优化选项进行最小化优化,选项设置可以使用optimoptions;
    x = fgoalattain(problem) 的作用是找到问题(problem)的最小值,其中问题是输入参数中描述的结构;其中我们可以通过从Optimization应用程序导出的问题来创建问题结构;
    [x,fval] = fgoalattain(...) 返回在解x的过程中fun计算的目标函数的值;
    [x,fval,attainfactor] = fgoalattain(...) 返回解x处的目标达到因子;
    [x,fval,attainfactor,exitflag] = fgoalattain(...)返回exitflag参数,描述计算的退出条件;
    [x,fval,attainfactor,exitflag,output] = fgoalattain(...)返回包含优化信息的输出参数output;
    [x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(...) 返回包含拉格朗日乘子的lambda参数。
    
    1. 函参详解
      <1>. fun:要进行优化的函数;
      fun是一个接受向量x并返回向量F的函数,在x处计算目标函数, fun可以通过函数文件的函数句柄进行指定;例如x = fgoalattain(@myfun,x0,goal,weight),其中,myfun就是MATLAB中的函数比如 :function F = myfun(x); F = ...,fun也可以是匿名函数的函数句柄,比如x = fgoalattain(@(x)sin(x.*x),x0,goal,weight),其中的sin函数就是匿名函数;如果x和F的用户定义值是数组,则系统会使用线性索引将它们转换为向量。
      为了使目标函数尽可能接近目标值(即,既不大于也不小于),使用优化将EqualityGoalCount选项设置为需要在目标值附近的目标数量。 必须将这些目标划分为fun返回的向量F的第一个元素。
      如果也可以计算目标函数的梯度,并且SpecifyObjectiveGradient选项为true,则设置为options = optimoptions('fgoalattain','SpecifyObjectiveGradient',true),那么函数fun必须在第二个输出参数中返回梯度值G,即x处的矩阵。 梯度由点x处的每个F的偏导数dF/dx组成。 如果F是长度为m且x长度为n的向量,其中n是x0的长度,则F(x)的梯度G是n×m矩阵,其中G(ij)是偏导数 F(j)相对于x(i)(即第j列的第j列是第j个目标函数F(j)的梯度)。
      <2>. goal:目标需要努力达到的向量的值。
      其中向量的长度与fun返回的目标向量F相同,fgoalattain尝试最小化向量F中的值以达到goal给出的目标值。
      <3>. nonlcon:计算约束条件中非线性不等式c(x)≤0和非线性等式ceq(x)= 0的函数;
      函数nonlcon接受向量x并返回两个向量c和ceq。 向量c包含在含有x的非线性不等式中,并且ceq包含在含有x的非线性等式中。 函数nonlcon可以通过函数句柄进行指定,比如x = fgoalattain(@myfun,x0,goal,weight,A,b,Aeq,beq,.. lb,ub,@mycon),其中mycon就是nonlcon的函数,示例如下:function [c,ceq] = mycon(x) c = ... % compute nonlinear inequalities at x. ceq = ... % compute nonlinear equalities at x.
      <4>. options: 提供选项值的功能特定详细信息。
      <5>. weight: 加权矢量用于控制fgoalattain中目标的相对不足或超额数值。 当目标值全部为非零时,为了确保活动目标的低于或超过相同百分比,将加权函数设置为abs(goal);
      当加权函数权重为正时,fgoalattain会尝试使目标小于目标值。 要使目标函数大于目标值,请将权重设置为负值而不是正值。 要使目标函数尽可能接近目标值,请使用EqualityGoalCount选项并将该目标作为fun返回的向量的第一个元素(请参阅前面的fun和options描述)。
      <6>. problem:
      目标:目标函数的向量;
      x0:x的初始点;
      goal:需要实现的目标;
      weight:目标的相对重要性因素;
      Aineq:线性不等式约束的矩阵;
      bineq:线性不等式约束的向量;
      Aeq:用于线性等式约束的矩阵;
      beq:线性等式约束的向量;
      lb:下界矢量;
      ub:上界矢量;
      nonlcon:非线性约束函数;
      solve:‘fgoalattain’;
      options:使用optimoptions创建的选项;

    2. 返回值详解
      <1>. attainfactor: 表征目标的过度或不足的程度。
      achiefactor包含解决方案中γ的值。 如果attainfactor是负的,那么设定的目标类似于过拟合; 如果attainfactor是正的,设定的目标便欠拟合。
      <2>. exitflag : 整数标识算法终止的原因。 以下列出了exitflag的值以及算法终止的相应原因。
      1:函数收敛到解x。
      4:搜索方向的幅度小于指定的容差和约束违规小于options.ConstraintTolerance
      5:方向导数的幅度小于指定的容差和约束违规小于options.ConstraintTolerance
      0:迭代次数超出options.MaxIterations或函数评估次数超出options.MaxFunctionEvaluations
      -1:由输出功能或绘图功能停止。
      -2:找不到可行点。
      <3>. lambda :在解x中包含拉格朗日乘数的结构(由约束类型分隔)。 结构的范围是:
      lower:下限lb
      upper:上限ub
      ineqlin:线性不等式
      eqlin:线性均衡
      ineqnonlin:非线性不等式
      eqnonlin:非线性等式
      <4>. output : 包含有关优化的信息的结构。 结构的范围是:
      iterations:迭代次数
      funcCount:函数评估的数量
      lssteplength:相对于搜索方向的最终行搜索步骤的大小
      stepize:x中的最终位移
      algorithm :使用的优化算法
      firstorderopt:一阶最优性的度量
      constrviolation:约束函数的最大值
      message :退出消息

    3. 应用案例
      某工厂因生产需要欲采购一种原材料,市场上的这种原料有两个等级,甲级单价2元/千克,乙级单价1元/千克。要求所花总费用不超过200元,购得原料总量不少于100千克,其中甲级原料不少于50千克,问如何确定最好的采购方案。
      设x1、x2分别为采购甲级和乙级原料的数量(千克),要求采购总费用尽量少,采购总重量尽量多,采购甲级原料尽量多。由题意可得:
      首先需要编写目标函数的M文件lwj.m,返回目标计算值:

    function f=myfun(x)
    f(1)=2*x(1)+ x(2); % f(1)表示的是原料采购总费用
    f(2)=-x(1)- x(2); % f(2)表示的是采购总重量
    f(3)=-x(1); % f(3)甲级原料的总质量
    

    给定目标,权重按目标比例确定,给出初值:
    在这里要注意的地方时,fgoalattain函数以最小优化为目的,所以目标函数的数值目标(也就是下边的goal)是≤的时候,系数为+,目标函数是≥的时候,系数为-;

        goal=[200 –100 -50]; %goal中的数据表示f(1),f(2),f(3)各自的目标数值;
        weight=[2040 –100 -50]; %权重中的数值意义同上
        x0=[55 55]; %初始值x0可自己随意按照符合条件的数值进行设定【不是真的随心所欲】,此处55和55符合条件;
    

    给出约束条件的系数:

    A=[2 1;-1 –1;-1 0]; % 此处3*2矩阵A中的数值是目标函数的系数矩阵
    b=[200 -100 -50]; % 目标函数结果的矩阵
    
    lb=zeros(2,1); %限定条件
    

    调用:

    [x,fval,attainfactor,exitflag] =fgoalattain(@lwj,x0,goal,weight,A,b,[],[],lb,[]);  % 函数调用
    

    输出计算结果:

    x =
        50    50
    fval =
       150  -100   -50
    attainfactor =
      1.3235e-023
    exitflag =
         1
    

    所以,最好的采购方案是采购甲级原料和乙级原料各50千克。此时采购总费用为150元,总重量为100千克,甲级原料总重量为50千克。

    如果觉得本文写的还不错的伙伴,可以给个关注一起交流进步,如果有在找工作且对阿里感兴趣的伙伴,也可以发简历给我进行内推:
    在这里插入图片描述

    展开全文
  • 本代码主要利用MATLAB工具实现MATLAB——求解无约束非线性函数的最小值,简单明了,易于理解
  • matlab非线性规划

    千次阅读 2021-06-18 22:05:05
    1.非线性规划基础

    1.非线性规划matlab函数

    非线性规划函数的约束函数和目标函数至少有一个是非线性函数。而对比于线性规划的区别也就一眼识别了。

    MATLAB中用于求解非线性规划的函数为fmincon,其调用格式如下:

    x= fmincon(f, x0,A, b)
    x= fmincon(f, x0,A, b, Aeq, beq)
    x= fmincon(f, x0, A, b, Aeg, beq, lb, ub)
    x= fmincon(f, x0,A, b, Aeq, beq, lb, ub, nonlcon)
    x= fmincon(f, x0, A, b, heq, beq, lb, ub, nonlcon, options)
    [x,fval]= fmincon( ...)
    [x, fval, exitflag]= fmincon( ...)
    [x, fval, exitflag, output]= fmincon(... )
    [x, fval, exitflag, output, lanbda] = fmincon( ... )
    
    

    其中,x0为初始点,A,b分别为不等式约束的系数矩阵和右端列向量,lb,ub分别为变量x的下界和上界,options为指定优化参数进行最小化。

    2.无约束非线性规划

    2.1基本数学原理

    求解无约束最优化问题的方法主要有两类。直接搜索法(searchmethod)和梯度法(gradient method)。

    直接搜索法适用于目标函数高度非线性、没有导数或导数很难计算的情况。由于实际工程中很多问题都是非线性的,直接搜索法不失为一种有效的解决办法。常用的直接搜索法为单纯形法,此外还有HookeJeeves搜索法、Pavell共轭方向法等。

    在函数的导数可求的情况下,梯度法是一种更优的方法。该法利用函数的梯度(一阶导数)和Hessian矩阵(二阶导数)构造算法,可以获得更快的收敛速度。函数f(x)的负梯度方向 -梯度f(x)反映了函数的最大下降方向,当搜索方向取为负梯度方向时称为最速下降法。常见的梯度法有最速下降法、Newton法、Marquart法、共轭梯度法和拟牛顿法(QuasiNewton method)等。

    在所有这些方法中,用得最多的是拟牛顿法,这个方法在每次迭代过程中建立曲率信息,构成二次模型问题。

    下面介绍有关MATLAB优化工具箱中求解无约東最优化问题的算法。

    • (1)大型优化算法:若用户在函数中提供梯度信息,则函数将默认选择大型优化算法,该算法是基于内部映射牛顿法的子空间置信域法。计算中的每一次迭代涉及用PCG法求解大型线性系统得到的近似解。
    • (2)中型优化算法: fminunc函数的参数options.LargeScale设置为off。该算法采用的是基于二次和三次混合插值一维搜索法的BFGS拟牛顿法。但- .般不建议使用最速下降法。
    • (3)默认时的一维搜索算法:当options. LineSearch Type设置为quadcubic时,将采用二次和三次混合插值法。将options. LineSearchType设置为cubiepoly 时,将采用三次插值法。第二种方法需要的目标函数计算次数更少,但梯度的计算次数更多。这样,如果提供了梯度信息,或者能较容易地计算出,则三次插值法是更好的选择。

    上述涉及的算法局限性主要表现在以下4个方面:

    1. 目标函数必须是连续的。fminunc函数有时会给出局部最优解。
    2. fminune 函数只对实数进行优化,即x必须为实数,而且f(x)必须返回实数。 当x为复数时,必须将它分解为实部和虚部。
    3. 在使用大型算法时,用户必须在fun函数中提供梯度(options参数中GradObj 属性必须设置为on)。
    4. 目前若在fun函数中提供了解析梯度,则options参数DerivativeCheck 不能用于大型算法以比较解析梯度和有限差分梯度。通过将options参数的Maxlter属性设置为0用中型方法核对导数,然后重新用大型方法求解问题。

    2.2无约束非线性规划函数

    1. fminunc函数
      该函数用于求多变量无约束函数的最小值,其调用格式如下:
      fminunc给定初值,求多变量标量函数的最小值,常用于无约束非线性最优化问题。
      x = fminunc(fun,x0):给定初值x0,求fun函数的局部极小点x。x0可以是标量、向量或矩阵。
      x = fminunc(fun, x0 ,options):用options参数中指定的优化参数进行最小化。
      x = fminunc( fun, x0 ,options,P1,P2,…):将问题参数P1、P2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的默认值。
      [x,fval]=fminunc(…):将解x处目标函数的值返回到fval参数中。
      [x.fval,exitflag] = fminunc(…): 返回exitflag值,描述函数的输出条件。
      [x.fval,exitflag,output] = fminunc(…): 返回包含优化信息的结构输出。
      [x,fval,exitflag ,output,grad] = fminunc(…):将解x处fun 函数的梯度值返回到grad参数中。
      [x,fval, exitflag, output, grad, hessian] = fminunc(…): 将解x处目标函数的Hessian矩阵信息返回到hessian参数中。

    输人/输出变量的描述如下表所示。

    变量描述
    fun目标函数.需要最小化的目标函数。fun函數需要输人标量参数x.返回x处的目标函数标量值f。可以将fun函数指定为命令行,例如:x = fminbnd( inline('sin(x*x) '),x0)同样,fun函数可以是一个包含函数名的字符申。对应的函数可以是M文件,内部函数或MEX文件。若fun=‘myfun’.则M文件函数myfun.m必须有下面的形式:function f = myfun(x) f=…若fun函数的梯度可以算得,且options.GradObj设为on :options = opt inset( ‘GradObj’, ‘on’)则fun函数必须返回解x处的梯度向量g到第二个输出变量中去。当被调用的fun函数只需要一个输出变量时(如算法只需要目标函数的值面不需要其梯度值时),可以通过核对nargout的值来避免计算梯度值。其调用格式如下: .function [f,g] = myfun(x) f=…:计算x处的函数值。if nargout>1;调用fun函数并要求有两个输出变量。g=…:计算x处的梯度值。end 。若Hessian矩阵也可以求得,并且options. Hessian设为on,即options = opt imset( ‘Hessian’, ‘on’)则fun函数必须返回解x处的Hessian对称矩阵H到第3个输出变量中去。当被调用的fun函数只需要一个或两个输出变量时(如算法只需要目标函数的值I和梯度值g而不需要Hessian矩阵H时),可以通过核对nargout的值来避免计算Hessian矩阵
    options优化参数选项。可以通过optimset函数设置或改变这些参数。其中有的参数适用于所有的优化算法,有的则只适用于大型优化问题,另外-些则只适用于中型问题。首先描述适用于大型问题的选项。这仅是一个参考,因为使用大型问题算法需要满足一些条件。对于fminune函数来说.必须提供梯度信息。LargeScale;当设为on时.使用大型算法:若设为off时,则使用中型问题的算法。适用于大型和中型算法的参数如下:Diagnostics:打印最小化函数的诊断信息。Display:显示水平。选择off,不显示输出:选择iter.显示每一步迭代过 程的输出:选择final,显示最终结果.打印最小化函数的诊断信息。GradObj:用户定义的目标函数的梯度。对于大型问题此参数是必选的,对于中型问题则是可选项。MaxFunEvals:函数评价的最大次数。Maxlter:最大允许迭代次数。TolFun;函数值的终止容限。TolX: x处的终止容限。只用于大型算法的参数如下:Hessian:用户定义的目标函数的Hessian矩阵。HessPattern:用于有限差分的Hessian矩阵的稀疏形式。若不方便求fun丙数的稀琉Hessian矩阵H.可以通过用梯度的有限差分获得的H的稀疏结构(如非零值的位置等)来得到近似的Hessian矩阵H。若连矩阵的稀疏结构都不知道,则可以将HessPattern设为密集矩阵,在每一次迭代过程中,都将进行密集矩阵的有限差分近似(这是默认设置的)。这将非常麻烦,所以花一些力气得到Hessian矩阵的稀疏结构还是值得的。MaxPCGIter; PCG迭代的最大次数。PrecondBandWidth: PCG前处理的上带宽,默认为零。对于有些问题,增加带宽可以减少迭代次数。TolPCG: PCG迭代的终止容限。TypicalX:典型2值。只用于中型算法的参数如下:DerivativeCheck:对用户提供的导数和有限差分求出的导数进行对比。DiffMaxChange:变量有限差分梯度的最大变化。DiffMinChange:变量有限差分梯度的最小变化。LineSearchType: 一维搜索算法的选择
    exitflag描述退出条件如下:>0;表示目标函数收敛于解x处。0:表示已经达到函数评价或迭代的最大次数。<0:表示目标函数不收敛
    output该参数包含的优化信息如下:output, iterations:迭代次数。output. algorithm:所采用的算法。output. funcCount:函数评价次数。output. cgiterations: PCG 迭代次数(只适于大型规划问题)。output. stepsize :最终步长的大小(只用于中型问题)。output. firstorderopt:一阶优化的度量,解x处梯度的范数
    1. fminsearch
      该函数是求解多变量无约束函数的最小值.其调用格式如下:
      fminsearch求解多变量无约束函数的最小值。该函数常用于无约束非线性最优化问题。
      x = fminsearch(fun,x0):初值为x0,求fun函数的局部极小点x。x0可以是标量、向量或矩阵。
      x = fminsearch( fun, x0 ,options):用options参数指定的优化参数进行最小化。
      x = fminsearch( fun, x0 ,options,P,P…):将问题参数P1、P2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的默认值。
      [x,fval] = fminsearch(…):将x处的目标函数值返回到fval 参数中。
      [x,fval,exitflag] = fminsearch(…): 返回exitflag值,描述函数的退出条件。
      [x, fval, exitflag, output] = fminsearch(…): 返回包含优化信息的输出参数output。
    2. fminbnd函数
      该函数是求解局部极小值点,只可能返回一个极小值点,其调用格式如下:
    [x, fval] = fminbnd( fun, x1, x2, options)
    X= fminbnd(...)
    

    例 求minf(x)=e -x+2x2 ,其搜索区间为(0,2)。

    clear all
    clc
    [x,fral]= fminbnd('exp(-x)+2*x.^2',0,2)
    

    在这里插入图片描述

    1. lsqnonlin函数
      该函数为求解多元非线性最小二乘问题。
      非线性最小二乘问题的数学模型为
      minf(x)= Σfi(x)2 +L 。L为常数,范围从i=1到m的求和

    函数调用格式如下:

    x= lsqnonlin( fun, x0)
    x= lsqnonlin( fun, x0, 1b, ub)
    x = lsqnonlin( fun, x0, options)
    x= lsqnonlin( fun, x0, options,P1,P2)
    [x, resnorm] = lsqnonlin( )
    [x, resnorm, residual, exitflag] = lsqnonlin( ... )
    [x, resnorm, residual,exitflag, output] = lsqnonlin( ... )
    [x, resnorm, residual, exitflag, output, lambda] = lsqnonlin(...)
    [x, resnorm, r esidual, exitflag, output, lambda, jacobian] = lsqnonlin( )
    

    其中,x返回解向量; resnorm 返回x处残差的平方范数值sum(fun(x). ^2);residual返回x处的残差值fun(x); lambda 返回包含x处Lagrange乘子的结构参数;jacobian返回解x处的fun函数的雅可比矩阵。

    lsqnonlin默认时选择大型优化算法。Lsqnonlin 通过将options. LargeScale设置为’off’来选择中型优化算法,其采用一维搜索法。

    例 求解minf(x)=3 (x2一x1)2十(x2-5)2 ,其初始点为(1,2)。

    clear all 
    clc 
    f = '3*(x(2)-x(1))^2+(x(2)-5)^2'
    [x,resnorm] =lsqnonlin(f,[1,2]) 
    

    在这里插入图片描述

    3.求解非线性规划

    3.1 一维最优化方法

    一维最优化方法是指寻求一元函数在某区间上最优值点的方法。这类方法不仅有实用价值,而且大量多维最优化方法都依赖于一系列的一维最优化方法。常用的一维最优化方法有黄金分制法、切线法和插值法。

    • (1)黄金分割法,又称0.618法。它适用于单峰函数。其基本思想是在初始寻查区间中设计一列点,通过逐次比较其函数值,逐步缩小寻查区间,以得出近似最优值点。
    • (2)切线法,又称牛顿法。它也是针对单峰函数的。其基本思想是在一个猜测点附近将目标函数的导函数线性化.用此线性函数的零点作为新的猜测点,逐步迭代去逼近最优点。
    • (3)插值法,又称多项式逼近法。其基本思想是用多项式(通常用二次或三次多项式)去拟合目标函数。
      此外,还有斐波那契法、割线法、有理插值法、分批搜索法等。

    3.2 无约束最优化方法

    无约束最优化方法是指上述一般非线性规划模型的求解方法。常用的约東最优化方法有以下4种:

    • (1)拉格朗日乘子法:它是将原问题转化为求拉格朗日函数的驻点。
    • (2)制约函数法:又称系列无约束最小化法,简称SUMT法。它又分为两类,一类叫惩罚函数法,又称外点法:另一类叫障碍函数法,又称内点法。它们都是将原问题转化为一系列无约束问题来求解。
    • (3)可行方向法:这是一类通过逐次选取可行下降方向去逼近最优点的迭代算法。如佐坦迪克法、弗兰克沃尔夫法、投影梯度法和简约梯度法都属于此类算法。
    • (4)近似型算法:这类算法包括序贯线性规划法和序贯二次规划法。前者将原问题化为一系列线性规划问题来求解,后者将原问题化为一系列二次规划问题来求解。

    3.3 约束最优化方法

    约束最优化方法是指寻求n元实函数在整个n维向量空间上的最优值点的方法。这类方法的意义在于虽然实用规划问题大多是有约束的,但许多约束最优化方法可将有约束问题转化为若干无约束问题来求解。

    无约束最优化方法大多是逐次一维搜索的迭代算法。这类迭代算法可分为两类。一类需要用目标函数的导函数,称为解析法。另一类不涉及导数,只用到函数值,称为直接法。这些迭代算法的基本思想是在- - 个近似点处选定-一个有 利搜索方向,沿这个方向进行一维寻查,得出新的近似点。然后对新点施行同样手续,如此反复迭代,直到满足预定的精度要求为止。根据搜索方向的取法不同,可以有各种算法。属于解析型的算法有以下4种:

    • (1)梯度法:又称最速下降法。这是早期的解析法,收敛速度较慢。
    • (2)牛顿法:收敛速度快,但不稳定,计算也较困难。
    • (3)共轭梯度法:收敛较快,效果较好。
    • (4)变尺度法:这是-类效率较高的方法。其中达维登弗菜彻鲍威尔变尺度法,简 称DFP法,是最常用的方法。

    属于直接型的算法有交替方向法(又称坐标轮换法)。模式搜索法、旋转方向法、鲍威尔共轭方向法和单纯形加速法等。

    展开全文
  • 非线性规划(二): Matlab 求解约束极值问题

    万次阅读 多人点赞 2019-04-24 11:10:34
    非线性规划(一):定义与数值优化方法(梯度法、牛顿法、拟牛顿法、变尺度法) 非线性规划(二): Matlab 求解约束极值问题 目录 约束极值问题 1 二次规划 2 罚函数法 3 Matlab 求约束极值问题 3.1 fminbnd ...


    非线性规划(一):定义与数值优化方法(梯度法、牛顿法、拟牛顿法、变尺度法)

    非线性规划(二): Matlab 求解约束极值问题


    目录

    约束极值问题 

    1  二次规划         2  罚函数法 

    3  Matlab 求约束极值问题 

    3.1  fminbnd 函数           3.2  fseminf 函数                 3.3  fminimax 函数 

    4 Matlab 优化工具箱的用户图形界面解法 

    4  非线性规划的应用:飞行管理问题

    4.1  模型一            4.2  模型二                习 题 


    约束极值问题 

    有约束条件的极值问题称为约束极值问题,也叫规划问题。 求解约束极值问题要比求解无约束极值问题困难得多。为了简化其优化工作,可采用以下方法:将约束问题化为无约束问题将非线性规划问题化为线性规划问题,以及 能将复杂问题变换为较简单问题的其它方法。 库恩—塔克条件是非线性规划领域中重要的理论成果之一,是确定某点为优点 的必要条件,但一般说它并不是充分条件(对于凸规划,它既是优点存在的必要条件, 同时也是充分条件)。 

    无约束问题的求解请参考这里:非线性规划(一):定义与数值优化方法

    1  二次规划 

    若某非线性规划的目标函数为自变量 x的二次函数约束条件又全是线性的,就称 这种规划为二次规划。

    Matlab 中求解二次规划的命令是 

    [X,FVAL]= QUADPROG(H,f,A,b,Aeq,beq,LB,UB,X0,OPTIONS) 

    返回值 X 是决策向量 x的值,返回值 FVAL 是目标函数在 x处的值。(具体细节可以参 看在 Matlab 指令中运行 help quadprog 后的帮助)。 

    h=[4,-4;-4,8]; 
    f=[-6;-3]; 
    a=[1,1;4,1]; 
    b=[3;9]; 
    [x,value]=quadprog(h,f,a,b,[],[],zeros(2,1)) 

    2  罚函数法 

    利用罚函数法,可将非线性规划问题的求解,转化为求解一系列无约束极值问题, 因而也称这种方法为序列无约束小化技术,简记为 SUMT (Sequential Unconstrained Minization Technique)。 罚函数法求解非线性规划问题的思想是,利用问题中的约束函数作出适当的罚函 数,由此构造出带参数的增广目标函数,把问题转化为无约束非线性规划问题。主要有 两种形式,一种叫外罚函数法,另一种叫内罚函数法,下面介绍外罚函数法

    解  (i)编写 M 文件 test.m  

    function g=test(x); 
    M=50000; 
    f=x(1)^2+x(2)^2+8; 
    g=f-M*min(x(1),0)-M*min(x(2),0)-M*min(x(1)^2-x(2),0)+... 
      M*abs(-x(1)-x(2)^2+2); 

    或者是利用Matlab的求矩阵的极小值和极大值函数编写test.m如下: 

    function g=test(x); 
    M=50000; 
    f=x(1)^2+x(2)^2+8; 
    g=f-M*sum(min([x';zeros(1,2)]))-M*min(x(1)^2-x(2),0)+...   
      M*abs(-x(1)-x(2)^2+2); 

    我们也可以修改罚函数的定义,编写test.m如下: 

    function g=test(x); 
    M=50000; 
    f=x(1)^2+x(2)^2+8; 
    g=f-M*min(min(x),0)-M*min(x(1)^2-x(2),0)+M*(-x(1)-x(2)^2+2)^2; 

     (ii)在 Matlab 命令窗口输入 

    [x,y]=fminunc('test',rand(2,1)) 

    即可求得问题的解。 

    3  Matlab 求约束极值问题 

    在 Matlab 优化工具箱中,用于求解约束优化问题的函数有:fminbnd、fmincon、 quadprog、fseminf、fminimax,上面我们已经介绍了函数 fmincon 和 quadprog。 

    3.1  fminbnd 函数 

    求单变量非线性函数在区间上的极小值            

    Matlab 的命令为

    [X,FVAL] = FMINBND(FUN,x1,x2,OPTIONS)

    它的返回值是极小点x 和函数的极小值。这里 fun 是用 M 文件定义的函数或 Matlab 中 的单变量数学函数。 

    3.2  fseminf 函数 

    上述问题的 Matlab 命令格式为

    X=FSEMINF(FUN,X0,NTHETA,SEMINFCON,A,B,Aeq,Beq) 

    解  (1)编写 M 文件 fun6.m 定义目标函数如下: 

    function f=fun6(x,s); 
    f=sum((x-0.5).^2); 

    (2)编写 M 文件 fun7.m 定义约束条件如下: 

    function [c,ceq,k1,k2,s]=fun7(x,s); 
    c=[];ceq=[]; 
    if isnan(s(1,1))     
        s=[0.2,0;0.2 0]; 
    end 
    %取样值 
    w1=1:s(1,1):100; 
    w2=1:s(2,1):100; 
    %半无穷约束 
    k1=sin(w1*x(1)).*cos(w1*x(2))-1/1000*(w1-50).^2-sin(w1*x(3))-x(3)-1; k2=sin(w2*x(2)).*cos(w2*x(1))-1/1000*(w2-50).^2-sin(w2*x(3))-x(3)-1; 
    %画出半无穷约束的图形 
    plot(w1,k1,'-',w2,k2,'+'); 

    (3)调用函数 fseminf 在 Matlab 的命令窗口输入  

    [x,y]=fseminf(@fun6,rand(3,1),2,@fun7) 

    即可求得结果。

    3.3  fminimax 函数 

    上述问题的 Matlab 命令为    

     X=FMINIMAX(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON) 

    解  (1)编写 M 文件 fun8.m 定义向量函数如下: 

    function f=fun8(x); 
    f=[2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304     
       -x(1)^2-3*x(2)^2     
        x(1)+3*x(2)-18     
       -x(1)-x(2)     
        x(1)+x(2)-8]; 

    (2)调用函数 fminimax 

    [x,y]=fminimax(@fun8,rand(2,1)) 

    3.3.4  利用梯度求解约束优化问题 

    分析:当使用梯度求解上述问题时,效率更高并且结果更准确。 题目中目标函数的梯度为: 

    解  (1)编写 M 文件 fun9.m 定义目标函数及梯度函数: 

    function [f,df]=fun9(x); 
    f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); 
    df=[exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+8*x(1)+6*x(2)+1);exp(x(1))*(4*x(2) +4*x(1)+2)]; 

    (2)编写 M 文件 fun10.m 定义约束条件及约束条件的梯度函数: 

    function [c,ceq,dc,dceq]=fun10(x); 
    c=[x(1)*x(2)-x(1)-x(2)+1.5;-x(1)*x(2)-10]; 
    dc=[x(2)-1,-x(2);x(1)-1,-x(1)]; ceq=[];dceq=[]; 

    (3)调用函数 fmincon,编写主函数文件 example13.m 如下: 

    %采用标准算法 
    options=optimset('largescale','off'); 
    %采用梯度 
    options=optimset(options,'GradObj','on','GradConstr','on'); 
    [x,y]=fmincon(@fun9,rand(2,1),[],[],[],[],[],[],@fun10,options) 
     

    4 Matlab 优化工具箱的用户图形界面解法 

    Matlab 优化工具箱中的 optimtool 命令提供了优化问题的用户图形界面解法。 optimtool 可应用到所有优化问题的求解,计算结果可以输出到 Matlab 工作空间中。 
     

    例 14  用 optimtool 重新求解例 2。 

    解  (i)编写 M 文件 fun1.m 定义目标函数 

    function f=fun1(x); 
    f=sum(x.^2)+8; 
    

    (ii)编写M文件fun2.m定义非线性约束条件 

    function [g,h]=fun2(x); 
    g=[-x(1)^2+x(2)-x(3)^2 
        x(1)+x(2)^2+x(3)^3-20];  %非线性不等式约束 
    h=[-x(1)-x(2)^2+2 
       x(2)+2*x(3)^2-3]; %非线性等式约束 

    利用例 2 已经定义好的函数 fun1 和 fun2。在 Matlab 命令窗口运行 optimtool,就打 开图形界面,如图 1 所示,填入有关的参数,未填入的参数取值为空或者为默认值,然 后用鼠标点一下“start”按钮,就得到求解结果,再使用“file”菜单下的“Export to Workspace…”选项,把计算结果输出到 Matlab 工作空间中去。 

     

    4  非线性规划的应用:飞行管理问题

    在约 10,000m 高空的某边长 160km 的正方形区域内,经常有若干架飞机作水平 飞行。区域内每架飞机的位置和速度向量均由计算机记录其数据,以便进行飞行管理。 当一架欲进入该区域的飞机到达区域边缘时,记录其数据后,要立即计算并判断是否会 与区域内的飞机发生碰撞。如果会碰撞,则应计算如何调整各架(包括新进入的)飞机 飞行的方向角,以避免碰撞。现假定条件如下:

    1)不碰撞的标准为任意两架飞机的距离大于 8km;

    2)飞机飞行方向角调整的幅度不应超过 30 度;

    3)所有飞机飞行速度均为每小时 800km;

    4)进入该区域的飞机在到达区域边缘时,与区域内飞机的距离应在 60km 以上;

    5)多需考虑 6 架飞机;

    6)不必考虑飞机离开此区域后的状况。

    请你对这个避免碰撞的飞行管理问题建立数学模型,列出计算步骤,对以下数据进 行计算(方向角误差不超过 0.01 度),要求飞机飞行方向角调整的幅度尽量小。 

    设该区域 4 个顶点的座标为(0,0),(160,0),(160,160),(0,160)。记录数据见表 1。 

    4.1  模型一 

    本问题中的优化目标函数可以有不同的形式:如使所有飞机的大调整量小; 所有飞机的调整量绝对值之和小等。这里以所有飞机的调整量绝对值之和小为目标 函数,可以得到如下的数学规划模型: 

    利用如下的程序: 

    clc,clear 
    x0=[150 85 150 145 130 0]; 
    y0=[140 85 155 50 150 0]; 
    q=[243 236 220.5 159 230 52]; 
    xy0=[x0; y0]; 
    d0=dist(xy0);   %求矩阵各个列向量之间的距离 
    d0(find(d0==0))=inf; 
    a0=asind(8./d0)  %以度为单位的反函数 
    xy1=x0+i*y0 xy2=exp(i*q*pi/180) 
    for m=1:6      
        for n=1:6          
            if n~=m          
                b0(m,n)=angle((xy2(n)-xy2(m))/(xy1(m)-xy1(n)));           
            end 
        end 
    end 
    b0=b0*180/pi; 
    dlmwrite('txt1.txt',a0,'delimiter', '\t','newline','PC'); 
    fid=fopen('txt1.txt','a'); 
    fwrite(fid,'~','char');       %往纯文本文件中写 LINGO 数据的分割符 dlmwrite('txt1.txt',b0,'delimiter', '\t','newline','PC','-append','roffset', 1) 

    上述飞行管理的数学规划模型可如下输入 LINGO 求解: 

     

    model: 
    sets: 
    plane/1..6/:delta; 
    link(plane,plane):alpha,beta; 
    endsets 
    data: 
    alpha=@file('txt1.txt');   !需要在alpha的数据后面加上分隔符"~"; 
    beta=@file('txt1.txt'); 
    enddata 
    min=@sum(plane:@abs(delta)); 
    @for(plane:@bnd(-30,delta,30)); @for(link(i,j)|i#ne#j:@abs(beta(i,j)+0.5*delta(i)+0.5*delta(j))>a 
    lpha(i,j)); 
    end

     

    4.2  模型二

     

     

     计算到这里也没有展开的必要了。由于目标的约束是< 0和 <= 的不等式约束。用罚函数的方式编写和求解,有思路的人请留言到评论区讨论吧


    习 题 

     


    非线性规划(一):定义与数值优化方法(梯度法、牛顿法、拟牛顿法、变尺度法)

    非线性规划(二): Matlab 求解约束极值问题

    展开全文
  • MATLAB 非线性优化函数fmincon

    千次阅读 2019-09-27 17:40:59
    优化成功或失败 一、求解失败 1、在到达迭代次数阈值或目标函数估值次数阈值时,求解器没有最小化目标到要求的精度,此时求解器停止。接下来,可以尝试以下方法: (1)设置‘Display’为‘iter’,查看每步的...
  • MATLAB规划问题——线性规划和非线性规划

    万次阅读 多人点赞 2017-01-16 10:07:56
    1.线性规划 求线性规划问题的最优解有两种方法,一种方法是使用linprog命令,另一种是使用optimtool工具箱,下面分别介绍这两种方法. ①linprog命令 ...[x,fval]返回值中x为最优解,fval为最优. f表示目标
  • 本文主要分两部分,第一部分介绍matlab非线性方程求解,第二部分将介绍如何用matlab去求解函数的极值。 一、非线性方程数值求解 1、单变量非线性方程求解 函数的调用格式为: x= fzero(filename,x0) 其中,...
  • 或者如何求解下面这个方程组约束下的最优解?a、b为未知整数,c为已知量![图片说明](https://img-ask.csdn.net/upload/202005/02/1588429577_862073.png)
  • min  s.t. v1xv2 求解程序名为lsqnonlin,其最简单的调用格式为: x=lsqnonlin(@F,x0, v1,v2) 其最复杂的调用格式为: ...[x,norm,res,ef,out,lam,...l 非线性拟合问题 min  s.t. v1xv2 求解程序名为lsqcurve...
  • MATLAB用fmincon函数求非线性约束下的最优化问题

    万次阅读 多人点赞 2019-07-04 16:28:43
    ##fmincon函数非线性约束下的最优化问题 fmincon函数,既是求最小约束非线性多变量函数 该函数被用于求如下函数的最小值 语法如下: x = fmincon(fun,x0,A,b) x = fmincon(fun,x0,A,b,Aeq,beq) x = fmincon(fun,x0,...
  • 一、常见基础滤波函数 tx=imread('lena.jpg'); t=rgb2gray(tx) k1=medfilt3(t1); %进行3*3模板中值滤波 k2=medfilt3(t1,[2,2,3]);...Y=ordfilt2(t1,9,ones(3,3)) % 最大值滤波 Y=ordfilt2(t1,1,on...
  • matlab求解非线性0-1规划案例

    千次阅读 2021-01-13 12:59:40
    题目 华安机械厂的厂长正考虑将该厂的一部分在市区...但搬迁后带来运输费用增加由CikC_{ik}Cik​ 和DjkD_{jk}Djk​ 决定, CikC_{ik}Cik​为iii和kkk车间之间的年运量, DjkD_{jk}Djk​ 为市区同卫星城镇 间单位运量
  • 利用matlab实现非线性拟合0 前言1 线性拟合1.1 多项式拟合1.2 线性拟合2 一维非线性拟合2.1 简单的非线性拟合2.2 matlab中Curve Fitting App2.3 matlab非线性拟合的实现2.3.1 fit()函数2.3.2 nlinfit()函数2.3.3 ...
  • 文章目录[MATLAB 在科学计算中的应用] 使用MATLAB 进行非线性拟合前言引述MATLAB 曲线拟合函数简述一二维数据非线性拟合一维数据拟合例子二维数据拟合例子高维数据非线性拟合lsqcurvefitnlinfit 函数数据拟合工具箱...
  • 数学建模-非线性优化模型

    千次阅读 2020-02-24 20:14:42
    非线性优化的基本概念 定义:如果目标函数或约束条件中至少有一个是非线性函数时的最优化问题就叫做非线性规划问题。 一般形式: min f ( X ) gi( X ) ≥ 0 , i = 1,2,…,m; hj( X ) ≥ 0 , j = 1,2,…,m; 其中 X = ...
  • 二次规划与非线性规划及matlab应用

    千次阅读 2020-03-27 12:19:47
    定义:如果目标函数或约束条件中至少有一个是非线性函数时的最优化问题就叫做非线性规划问题. 其它情况: 求目标函数的最大值或约束条件为小于等于零的情况,都可通过取其相反数化为上述一般形式. (1)二次规划 ...
  • Matlab 非线性有约束规划的粒子群算法

    万次阅读 多人点赞 2020-09-15 21:00:28
    适用于连续函数极值问题,对于非线性,多峰问题均有较强的全局搜索能力。 主要掌握两点 1.粒子的速度和位置 速度代表移动的快慢,位置代表移动的方向。 位置对应每个自变量,速度一般设置为变量范围的10%~20%。 2....
  • 过滤器在给定大小的滑动窗口上计算数组的最小值和/或最大值。 完全支持多维数组:在 1D 中运行过滤器、用于图像处理应用程序(侵蚀/膨胀)、3D 等的 2D 过滤器。 该软件包的实施特别注意运行速度:MEX 引擎使用的...
  • MATLAB遗传算法工具箱的使用及实例(非线性规划)

    万次阅读 多人点赞 2020-07-13 19:15:57
    本文将介绍MATLAB遗传算法工具箱求解非线性规划问题。在阅读本文之前,建议读者阅读上一期“MATLAB遗传算法工具箱求解线性规划问题”。文章传送门:...
  • 遗传算法优化BP神经网络拟合非线性函数

    万次阅读 多人点赞 2018-08-09 19:45:58
    本文主要是讲遗传算法用于优化BP算法,BP算法在拟合非线性函数时,虽然可以收敛,但是有可能收敛到局部最小点,这是源于它的搜索是串行搜索,而遗传算法的并行性,能够使其更容易收敛到全局最小点。在训练神经网络时...
  • 求解以最小最大函数为目标带有约束的最优解matlab程序
  • 非线性方程组求解-MatLab

    千次阅读 2020-05-11 08:04:04
    一、非线性方程求根 通过以下问题学习此知识点: 现在你想买一套300万元的房子,首付40%,贷款20年,等额本息,已知月还款额为1.2万元,求贷款月利率为多少? (1) 编写结合牛顿下山法和割线法的综合迭代方法求解函数...
  • Matlab--优化工具箱

    千次阅读 2019-11-14 19:05:45
    优化工具箱(Optimization Toolbox)是对MATLAB数值计算环境扩展得一组函数,它包括以下最优化方法的内容: 1.无约束非线性最小化(Unconstrained nonlinear minimization) 2.有约束非线性最小化(Constrained ...
  • matlab 非线性拟合 y= 1 / (a + b * x)

    千次阅读 2019-07-11 20:32:23
    一、题目 已知: y= 1 / (a + b * x) x = 1.0 : 0.4 : 2.6; ...y = [0.931, 0.473, 0.297, 0.224, 0.168];...通过各种拟合方法求a, b的,画出拟合曲线,并比较结果,分析误差 二、思路导图 三、流 程 图 ...
  • 非线性优化整理-3.Levenberg-Marquardt法(LM法)

    万次阅读 多人点赞 2018-02-01 22:10:04
    非线性优化整理-2.高斯-牛顿法 ) 高斯牛顿法的迭代公式为 x n + 1 = x n − [ J T f J f ] − 1 J T f f ( x n ) x n + 1 = x n − [ J f T J f ] − 1 J f T f ( x n ) x_{n+1}=x_n-[J_f^TJ_f]^{-1}J_f^Tf(x...
  • 非线性方程数值求解 (1)单变量非线性方程求解 函数格式: x=fzero(filename,x0) 其中,filename是待求根方程左端的函数表达式,x0是初始。 (2)非线性方程组的求解 函数的调用格式为: x=fsolve(filename,x0,...
  • 用一个实例来理解基于最小二乘的非线性拟合问题。 原理部分 代码部分 clear; clc; M = 2000; t = 0.3 * (1 : M)'; rng('default'); ratio = 10; noise = ratio * randn(M, 1); Et = 1000 * exp(-t / 50) + 10 ...
  • 首先从简单的开始,没有约束的非线性,然后就是非线性中比较特殊的一个例子,多项式的非线性,如下图 思路:用matlab求解f的hessian矩阵,然后求解hessian矩阵的特征向量,如果都大于0,就是正定,如果是大于等于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,257
精华内容 4,902
关键字:

matlab非线性优化最大值

matlab 订阅