加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab优化工具箱详解

(2008-10-08 20:55:52)
标签:

matlab

优化

校园

分类: Matlab资料

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)

 >>http://blog.sina.com.cn/xianfa110

注:以上大部分来自Matlab help。

-----------------------------------

你可能感兴趣的:

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有