QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 653|回复: 0
打印 上一主题 下一主题

Matlab中优化工具箱

[复制链接]
字体大小: 正常 放大

413

主题

36

听众

1854

积分

升级  85.4%

  • TA的每日心情
    开心
    2019-9-18 21:55
  • 签到天数: 258 天

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2015-7-11 19:14 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    1.fminbnd
    进行有约束的一元函数最小值求解。它的求解命令是:
    X = FMINBND(FUN,x1,x2),FUN 是目标函数,可以为表达式字符串或MATLAB自定义函数的函数柄,要求解在约束 x1 <= X <= x2下的最优解X*。
    还有其他一些求解命令是:
    x = fminbnd(fun,x1,x2,options)   % options为指定优化参数选项,由OPTIMSET设定
    [x,fval] = fminbnd(…)   % fval为目标函数的最小值
    [x,fval,exitflag] = fminbnd(…)   %exitflag为终止迭代的原因
    [x,fval,exitflag,output] = fminbnd(…)   % output为优化信息
    说明:若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示达到了最大迭代次数,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。
    例子:要求解f(x)=x3-2x-5在(0,2)之间最优解,求解命令如下:
    f = @(x)x.^3-2*x-5;
    x = fminbnd(f, 0, 2);

    2.fminsearch
    进行多变量函数的无约束优化。
    格式主要有:
    x = fminsearch(fun,x0);%对函数fun,从x0开始搜索最优值,返回最优变量x
    x = fminsearch(fun,x0,options);%可以用optimset设置一些优化选项;
    [x,fval] = fminsearch(...);%返回feval为最优函数值;
    [x,fval,exitflag] = fminsearch(...);%exitflag与fminbnd类似;
    [x,fval,exitflag,output] = fminsearch(...);%output与fminbnd类似;
    例子:要求函数f (x)= 100*(x(2)-x(1)^2)^2+(1-x(1))^2的最小值,用fminsearch求解如下:
    fun = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;
    [x,fval] = fminsearch(fun,[-1.2, 1]);

    3.fminunc
    与fminsearch一样,也是对多变量无约束函数优化。
    指令格式:
    x = fminunc(fun,x0)
    x = fminunc(fun,x0,options)
    [x,fval] = fminunc(...)
    [x,fval,exitflag] = fminunc(...)
    [x,fval,exitflag,output] = fminunc(...)
    [x,fval,exitflag,output,grad] = fminunc(...);%grad为解x处的梯度值;
    [x,fval,exitflag,output,grad,hessian] = fminunc(...);% 目标函数在解x处的海赛(Hessian)值。
    从算法上来讲,当函数的阶数大于2时,fminunc比fminsearch更有效,因为它采用了基于梯度的优化算法,而fminsearch采用的是Nelder-Mead型简单搜寻法,但是,正因为这样,当函数不连续时,fminsearch的效果反而更好。

    4.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,fval] = fmincon(...)
    [x,fval,exitflag] = fmincon(...)
    [x,fval,exitflag,output] = fmincon(...)
    [x,fval,exitflag,output,lambda] = fmincon(...)
    [x,fval,exitflag,output,lambda,grad] = fmincon(...)
    [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...)
    其中一些参数的定义见非线性有约束多变量函数的标准形式:
    min f(x)
    sub.to     C(x)<=0
               Ceq(x)=0
               A*x<=b
               Aeq*x=beq
               lb<=x<=ub
    其中非线性不等式C(x)和等式Ceq(x)定义在nonlcon中。通过指定函数柄来使用,如:>>x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)
    C = …    % 计算x处的非线性不等约束 的函数值。
    Ceq = …   % 计算x处的非线性等式约束的函数值。
    lambda是Lagrange乘子,它体现哪一个约束有效。
    output为输出优化信息;
    grad表示目标函数在x处的梯度;
    hessian表示目标函数在x处的Hessiab值。
    例如,目标函数为:
    function f = myfun(x)
    f = -x(1) * x(2) * x(3);
    约束为:
    0≤x(1)+2x(2)+2x(3) ≤72
    那么我们可以将其写成Ax≤b的形式,则
    A=[-1 -2 -2;1 2 2];b=[0;b];
    求解命令为:
    x0 = [10; 10; 10];    % 初始值
    [x,fval] = fmincon(@myfun,x0,A,b)

    注:以上大部分来自Matlab help,但是注意使用help命令。



    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国版主团队!
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-22 00:43 , Processed in 0.382034 second(s), 54 queries .

    回顶部