非线性规划——基于matlab学习(fminbnd fmincon)

序言小说明
  • 根据MATLAB目标函数和约束条件的不同,提供了fminbnd,fmincon,quadprog,fseminf,fminimax,fgoalattain,lsqlin等函数了求解不同类型的非线性规划问题
(1)fminbnd函数
函数介绍

用于求解一元非线性规划问题。其调用格式:

  • x=fminbnd(fun,x1,x2) 返回目标函数f(x)在区间(x1,x2)上的极小值。

  • x=fminbnd(fun,x1,x2,option); option为指定优化参数选项。

  • [x,fval]=fminbnd(…) 除返回极小值x外,还得相应的目标函数值fval。

  • [x,fval,exitflag]=fminbnd(…) 下面是关于exitflag的说明:

exitflag说明
1表示函数收敛到最优解
0表示达到函数的最大估计值或者迭代次数
-1表示算法被输出函数终止
-2表示输入的区间有误,即a>b
  • [x,fval,exitflag,output]=fminbnd(…) 下面是output输出信息变量情况
output说明
iterations迭代次数
funcCount函数赋值次数
algorithm函数所调用的算法
message算法终止的信息
案例说明

例1:求下面函数在区间(1,5)内的最小值。 f ( x ) = sin ⁡ ( x ) x 2 + 3 x cos ⁡ x f(x)=\frac{\sin (x)}{x^{2}}+3 x \cos x f(x)=x2sin(x)+3xcosx

clear all;
%方法一
fun=inline('sin(x)/x^2+3*x*cos(x)')
[x,fval,exitflag,output]=fminbnd(fun,1,5)

%方法二
[x,fval,exitflag,output]=fminbnd('sin(x)/x^2+3*x*cos(x)',1,5)

%方法三
[x,fval,exitflag,output]=fminbnd(@(x)sin(x)/x^2+3*x*cos(x),1,5)

%运行结果
fun = 内联函数:
     fun(x) = sin(x)/x^2+3*x*cos(x)
x = 3.4314
fval = -9.8892
output = 
  包含以下字段的 struct:
    iterations: 8
    funcCount: 9
    algorithm: 'golden section search, parabolic interpolation'
    message: '优化已终止:↵ 当前的 x 满足使用 1.000000e-04 的 OPTIONS.TolX 的终止条件↵'

(2)fmincon函数
函数介绍

用于求解非线性多元规划问题,其问题表述如下:

min ⁡ f ( x )  st.  A x < = b  Aeq.x  = b e q C ( x ) < = 0 Ceq ⁡ ( x ) = 0 l b < = x < = u b \begin{array}{l} \min f(x) \\ \text { st. } \\ A x<=b \\ \text { Aeq.x }=b e q \\ C(x)<=0 \\ \operatorname{Ceq}(x)=0 \\ l b<=x<=u b \end{array} minf(x) st. Ax<=b Aeq.x =beqC(x)<=0Ceq(x)=0lb<=x<=ub

  • x=fmincon(fun,x0,A,b) 以x0为初始点
  • x=fmincon(fun,x0,A,b,Aeq,beq) 如果没有等式约束条件,Aeq=[],beq=[]
  • x=fmincon(fun,x0,A,b,Aeq,beq,Ib,ub) 如果没有界约束,则令Ib和ub为空矩阵;如果没有下界,则Ib=-Inf;没有上界,则ub=Inf。
  • x=fmincon(fun,x0,A,b,Aeq,beq,Ib,ub,nonlcon)
    其中nonicon函数的定义如下:
    function [c1,c2,gc1,gc2]=nonlcon(x)
    c1=...
    c2=...
    if nargout>2
    	gc1=...
    	gc2=...
    end
    
  • [x,fval,exitflag,output,lambda,grad,hessian]=fmincon(…);
案例说明
  • 例1: min ⁡ f ( x ) = sin ⁡ ( x 2 − 3 y ) + e − x 2 cos ⁡ y \min f(x)=\sin \left(x^{2}-3 y\right)+e^{-x^{2}} \cos y minf(x)=sin(x23y)+ex2cosy
    s.t.
    − x + ( y − 2 ) 2 ≥ 0 -x+(y-2)^{2} \geq 0 x+(y2)20
    x − 2 y + 1 ≥ 0 x-2 y+1 \geq 0 x2y+10
%非线性约束条件
function [c,ceq]=nonlcon(x)
c=x(1)-[x(2)-2].^2;  %不等式约束
ceq=[];       %等式约束

%运行情况
 clear all;
 fun='sin(x(1)^2-3*x(2))+exp(-x(1)^2)*cos(x(2))';
 x0=[1.2,1];
 A=[-1 2];
 b=1;
 [x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,[],[],[],[],@nonlcon)

%运行结果:
x =1.1398    0.9324
fval = -0.8348
exitflag =  1
output = 
  包含以下字段的 struct:
         iterations: 9
          funcCount: 30
    constrviolation: 0
           stepsize: 4.1710e-06
          algorithm: 'interior-point'
      firstorderopt: 4.6284e-07
       cgiterations: 0
       message: 'Local minimum found that satisfies the constraints.↵↵Optimization completed because the objective function is non-decreasing in ↵feasible directions, to within the default value of the optimality tolerance,↵and constraints are satisfied to within the default value of the constraint tolerance.↵↵Stopping criteria details:↵↵Optimization completed: The relative first-order optimality measure, 4.628370e-07,↵is less than options.OptimalityTolerance = 1.000000e-06, and the relative maximum constraint↵violation, 0.000000e+00, is less than options.ConstraintTolerance = 1.000000e-06.↵↵Optimization Metric                                            Options↵relative first-order optimality =   4.63e-07       OptimalityTolerance =   1e-06 (default)↵relative max(constraint violation) =   0.00e+00    ConstraintTolerance =   1e-06 (default)'

lambda = 
  包含以下字段的 struct:
         eqlin: [0×1 double]
      eqnonlin: [0×1 double]
       ineqlin: 7.2833e-08
         lower: [2×1 double]
         upper: [2×1 double]
    ineqnonlin: 0.2048
grad =
   -0.2048
   -0.4372
hessian =
    6.0242   -6.4486
   -6.4486    8.4952
  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值