zhenghui 发表于 2009-10-11 23:11

【转】Matlab优化工具箱详解

Matlab优化工具箱详解
1.fminbnd
进行有约束的一元函数最小值求解。它的求解命令是:
X = FMINBND(FUN,x1,x2),FUN 是目标函数,可以为表达式字符串或MATLAB自定义函数的函数柄,要求解在约束 x1 <= X <= x2下的最优解X*。
还有其他一些求解命令是:
x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项,由OPTIMSET设定
= fminbnd(…) % fval为目标函数的最小值
= fminbnd(…) %exitflag为终止迭代的原因
= 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设置一些优化选项;
= fminsearch(...);%返回feval为最优函数值;
= fminsearch(...);%exitflag与fminbnd类似;
= 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;
= fminsearch(fun,[-1.2, 1]);

3.fminunc
与fminsearch一样,也是对多变量无约束函数优化。
指令格式:
x = fminunc(fun,x0)
x = fminunc(fun,x0,options)
= fminunc(...)
= fminunc(...)
= fminunc(...)
= fminunc(...);%grad为解x处的梯度值;
= 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)
= fmincon(...)
= fmincon(...)
= fmincon(...)
= fmincon(...)
= fmincon(...)
= 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 = 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=;
求解命令为:
x0 = ; % 初始值
= fmincon(@myfun,x0,A,b)

ChaChing 发表于 2009-10-12 09:07

基本上, 个人以为这些在Help文件里头都有, 可说是汉字版的小规模help!
若可以再加上LZ自己使用上的心得, 那才更好!

ab77977 发表于 2014-3-19 15:26

ChaChing 发表于 2009-10-12 09:07
基本上, 个人以为这些在Help文件里头都有, 可说是汉字版的小规模help!
若可以再加上LZ自己使用上的心得,...

你好,对于图片中的方程如何求解?用Nelder-Mead算法如何求解?C:\Documents and Settings\Administrator\桌面\QQ截图20140319152508.jpg

牛小贱 发表于 2014-3-19 15:32

本帖最后由 牛小贱 于 2014-3-19 15:36 编辑

ab77977 发表于 2014-3-19 15:26
你好,对于图片中的方程如何求解?用Nelder-Mead算法如何求解?
请重新编辑一下帖子,上传图片!难道不会上传图片?操作如图:回复他人帖子的时候,可以先点击“高级模式”——点击“图片”……

ab77977 发表于 2014-3-19 15:37

牛小贱 发表于 2014-3-19 15:32
请重新编辑一下帖子,上传图片!难道不会上传图片?操作如图:回复他人帖子的时候,可以先点击“高级模式 ...

您好,不好意思,没有弄好,这个是关于基于威布尔分布的比例故障率模型,采用极大似然函数估计得到一个非线性方程组,需要求解这个方程组的待定参数,请问这样一个方程如何求解?如何采用Nelder-Mead方法求解?我用牛顿迭代得不到结果。

ab77977 发表于 2014-3-19 15:49

牛小贱 发表于 2014-3-19 15:32
请重新编辑一下帖子,上传图片!难道不会上传图片?操作如图:回复他人帖子的时候,可以先点击“高级模式 ...

您好,这个方程组中r、t以及Z都是已知的,Beta、Ita以及alpha就是要估计的待定参数,对于这样的方程组,常数项不能确定,方程组的表达式不能最终确定的非线性方程组如何求解?谢谢

秦峰伟 发表于 2015-4-15 12:58

用fminsearch函数对初值的选择很敏感。

zhenghe1008 发表于 2015-4-23 15:20

不错,谢谢

lsg 发表于 2015-5-2 18:57

有用哦,学到了,顶一个
页: [1]
查看完整版本: 【转】Matlab优化工具箱详解