例2.3在[0,5]上求下面函数的最小值f(x)=(x-3)3-1解:先自定义函数:在MATLAB编辑器中建立M文件为:function f= myfun(x)f= (x-3).^2 - 1;保存为myfun.m,然后在命令窗口键入命令:>> x=fminbnd(@myfun,0,5)则结果显示为:X=32.2.2无约束多元函数最小值多元函数最小值的标准形式为minf(x)其中:x为向量,如x=[x,X2,",x]在MATLAB5.x中使用fimins求其最小值。命令利用函数fiminsearch求无约束多元函数最小值函数fminsearch格式x=fiminsearch(fun,xO)%xo为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。%options查optimsetx=fminsearch(fun,x0,options)[x,fval]=fiminsearch()%最优点的函数值[x,fval,exitflag]=fiminsearch()%exitflag与单变量情形一致[x,fval,exitflag,output]=fiminsearch()%output与单变量情形一致注意:fiminsearch采用了Nelder-Mead型简单搜寻法。例2.4求y=2x+4xx-10xX2+x的最小值点解:>>X=fminsearch(2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2′,[0,0)结果为X=
例 2.3 在[0,5]上求下面函数的最小值f(x) (x 3) 1 3 = − − 解:先自定义函数:在 MATLAB 编辑器中建立 M 文件为: function f = myfun(x) f = (x-3).^2 - 1; 保存为 myfun.m,然后在命令窗口键入命令: >> x=fminbnd(@myfun,0,5) 则结果显示为: x = 3 2.2.2 无约束多元函数最小值 多元函数最小值的标准形式为 min f(x) x 其中:x 为向量,如 x = [x1, x2,L, xn] 在 MATLAB5.x 中使用 fmins 求其最小值。 命令 利用函数 fminsearch 求无约束多元函数最小值 函数 fminsearch 格式 x = fminsearch(fun,x0) %x0 为初始点,fun 为目标函数的表达式字符串或 MATLAB 自定义函数的函数柄。 x = fminsearch(fun,x0,options) % options 查 optimset [x,fval] = fminsearch(.) %最优点的函数值 [x,fval,exitflag] = fminsearch(.) % exitflag 与单变量情形一致 [x,fval,exitflag,output] = fminsearch(.) %output 与单变量情形一致 注意:fminsearch 采用了 Nelder-Mead 型简单搜寻法。 例 2.4 求 2 1 2 2 3 1 2 3 y = 2x1 + 4x x −10x x + x 的最小值点 解:>>X=fminsearch('2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2', [0,0]) 结果为 X =
1.00160.8335或在MATLAB编辑器中建立函数文件function f-myfun(x)f=2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2保存为myfun.m,在命令窗口键入>>X=fiminsearch (myfun',[0,0])或>>X=fiminsearch(@myfun,[0,0])结果为:X=1.00160.8335命令利用函数fiminunc求多变量无约束函数最小值函数fminunc格式x=fminunc(fun,x0)%返回给定初始点x0的最小函数值点x=fminunc(fun,x0,options)%options为指定优化参数[x,fval]=fiminunc()%fval最优点x处的函数值[x,fval,exitflag]=fiminunc()%exitlag为终止选代的条件,与上同。[x,fval,exitflag,output]=fiminunc()%output为输出优化信息[x,fval,exitflag,output,grad]=fiminunc(%grad为函数在解x处的梯度值[x,fval,exitlag,output,grad,hessian]=fiminunc()%目标函数在解x处的海赛(Hessian)值注意:当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续时,使用fiminsearch效果较好。例2.5求f(x)=3x+2xix2+x2的最小值。>> fun=3*x(1)/2+2*x(1)*x(2)+x(2)^2;>> x0=[1 1];>>[x,fval,exitflag,output,grad,hessian]-fminunc(fun,x0)结果为:x=1.0e-008 *-0.75910.2665
1.0016 0.8335 或在 MATLAB 编辑器中建立函数文件 function f=myfun(x) f=2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2; 保存为 myfun.m,在命令窗口键入 >> X=fminsearch ('myfun', [0,0]) 或 >> X=fminsearch(@myfun, [0,0]) 结果为: X = 1.0016 0.8335 命令 利用函数 fminunc 求多变量无约束函数最小值 函数 fminunc 格式 x = fminunc(fun,x0) %返回给定初始点 x0 的最小函数值点 x = fminunc(fun,x0,options) % options 为指定优化参数 [x,fval] = fminunc(.) %fval 最优点 x 处的函数值 [x,fval,exitflag] = fminunc(.) % exitflag 为终止迭代的条件,与上同。 [x,fval,exitflag,output] = fminunc(.) %output 为输出优化信息 [x,fval,exitflag,output,grad] = fminunc(.) % grad 为函数在解 x 处的梯度值 [x,fval,exitflag,output,grad,hessian] = fminunc(.) %目标函数在解 x 处的海赛 (Hessian)值 注意:当函数的阶数大于 2 时,使用 fminunc 比 fminsearch 更有效,但当所选函数高度 不连续时,使用 fminsearch 效果较好。 例 2.5 求 2 1 2 2 2 f(x) = 3x1 + 2x x + x 的最小值。 >> fun='3*x(1)^2+2*x(1)*x(2)+x(2)^2'; >> x0=[1 1]; >> [x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0) 结果为: x = 1.0e-008 * -0.7591 0.2665
fval =1.3953e-016exitflag =1output =iterations: 3funcCount: 16stepsize: 1.2353firstorderopt:1.6772e-007algorithm:'medium-scale:Quasi-Newton line search'grad =1.0e-006 *-0.16770.0114hessian =6.00002.00002.00002.0000或用下面方法:>> fun=inline(3*x(1)^2+2*x(1)*x(2)+x(2)2)fun =Inline function:fun(x) = 3*x(1)2+2*x(1)*x(2)+x(2)2>>x0=[1 1];>>x=fminunc(fun,x0)x=1.0e-008 *-0.75910.2665
fval = 1.3953e-016 exitflag = 1 output = iterations: 3 funcCount: 16 stepsize: 1.2353 firstorderopt: 1.6772e-007 algorithm: 'medium-scale: Quasi-Newton line search' grad = 1.0e-006 * -0.1677 0.0114 hessian = 6.0000 2.0000 2.0000 2.0000 或用下面方法: >> fun=inline('3*x(1)^2+2*x(1)*x(2)+x(2)^2') fun = Inline function: fun(x) = 3*x(1)^2+2*x(1)*x(2)+x(2)^2 >> x0=[1 1]; >> x=fminunc(fun,x0) x = 1.0e-008 * -0.7591 0.2665
2.2.3有约束的多元函数最小值非线性有约束的多元函数的标准形式为:minf(x)4sub.toC(x)≤0Ceq(x)=0A.x≤bAeq·x=beqlb≤x≤ub其中:X、b、beq、Ib、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是返回向量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)可以是非线性函数。在MATLAB5.x中,它的求解由函数constr实现。函数fmincon格式x=fmincon(fun,x0,A,b)x =fimincon(fun,x0,A,b,Aeq,beq)x = fimincon(fun,x0,A,b,Aeq,beq,Ib,ub)x=fmincon(fun,xo,A,b,Aeq,beq,lb,ub,nonlcon)x=fmincon(fun,xo,A,b,Aeq,beq,b,ub,nonlcon,options)[x,fval] = fmincon()[x,fval,exitflag] = fmincon(--- [x,fval,exilag,output] = fimincon(-..)[x,fval,exitflag,output,lambda] = fimincon(.)[x,fval,exitlag,output,lambda,grad] = fmincon(---)[x,fval,exitlag,output,lambda,grad,hessian] =fmincon(.)参数说明:fiun为目标函数,它可用前面的方法定义;xO为初始值;A、b满足线性不等式约束A·x≤b,若没有不等式约束,则取A=[],b=[];Aeq、beq满足等式约束Aeq·x=beq,若没有,则取Aeq=[],beq=[];1b、ub满足1b≤x≤ub,若没有界,可设Ib=[],ub=[];nonlcon的作用是通过接受的向量x来计算非线性不等约束C(x)≤0和等式
2.2.3 有约束的多元函数最小值 非线性有约束的多元函数的标准形式为: min f(x) x sub.to C(x) ≤ 0 Ceq (x) = 0 A ⋅ x ≤ b Aeq ⋅ x = beq lb ≤ x ≤ ub 其中:x、b、beq、lb、ub 是向量,A、Aeq 为矩阵,C(x)、Ceq(x)是返回向量的函数, f(x)为目标函数,f(x)、C(x)、Ceq(x)可以是非线性函数。 在 MATLAB5.x 中,它的求解由函数 constr 实现。 函数 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(.) 参数说明:fun 为目标函数,它可用前面的方法定义; x0 为初始值; A、b 满足线性不等式约束 A ⋅ x ≤ b ,若没有不等式约束,则取 A=[ ],b=[ ]; Aeq、beq 满足等式约束 Aeq ⋅ x = beq ,若没有,则取 Aeq=[ ],beq=[ ]; lb、ub 满足lb ≤ x ≤ ub ,若没有界,可设 lb=[ ],ub=[ ]; nonlcon 的作用是通过接受的向量 x 来计算非线性不等约束C(x) ≤ 0和等式
约束Ceq(x)=0分别在x处的估计C和Ceq,通过指定函数柄来使用,如:>>x=fmincon(@myfun,xo,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function[C,Ceq]=mycon(x)C=...%计算x处的非线性不等约束C(x)≤0的函数值。Ceq=*%计算x处的非线性等式约束Ceq(x)=0的函数值。lambda是Lagrange乘子,它体现哪一个约束有效。output输出优化信息;grad表示目标函数在x处的梯度;hessian表示目标函数在x处的Hessiab值。例2.6求下面问题在初始点(0,1)处的最优解minx +x2-XjX2-2x1-5x2sub.to-(j-1)+x2≥02xl-3x2+6≥0解:约束条件的标准形式为sub.to(xi-1)2-x2≤0-2xI +3x2≤6先在MATLAB编辑器中建立非线性约束函数文件:function[c, ceq]-mycon (x)c=(x(1)-1)2-x(2);ceq-[];%无等式约束然后,在命令窗口键入如下命令或建立M文件:%目标函数>>fun=x(1)>2+x(2)/2-x(1)*x(2)-2*x(1)-5*x(2):>>x0=[0 1];>>A=[-2 3];%线性不等式约束>>b=6;>>Aeq=[];%无线性等式约束>>beq=[];>>Ib=[];%x没有下、上界
约束Ceq (x) = 0 分别在x处的估计C和Ceq,通过指定函数柄来使用, 如:>>x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非 线性约束函数,并保存为 mycon.m:function [C,Ceq] = mycon(x) C = . % 计算 x 处的非线性不等约束C(x) ≤ 0的函数值。 Ceq = . % 计算 x 处的非线性等式约束Ceq (x) = 0 的函数值。 lambda 是 Lagrange 乘子,它体现哪一个约束有效。 output 输出优化信息; grad 表示目标函数在 x 处的梯度; hessian 表示目标函数在 x 处的 Hessiab 值。 例 2.6 求下面问题在初始点(0,1)处的最优解 min 1 2 1 2 2 2 2 x1 + x − x x − 2x − 5x sub.to (x 1) x2 0 2 − 1 − + ≥ 2x1 − 3x2 + 6 ≥ 0 解:约束条件的标准形式为 sub.to (x 1) x2 0 2 1 − − ≤ − 2 x1 + 3x2 ≤ 6 先在 MATLAB 编辑器中建立非线性约束函数文件: function [c, ceq]=mycon (x) c=(x(1)-1)^2-x(2); ceq=[ ]; %无等式约束 然后,在命令窗口键入如下命令或建立 M 文件: >>fun='x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2)'; %目标函数 >>x0=[0 1]; >>A=[-2 3]; %线性不等式约束 >>b=6; >>Aeq=[ ]; %无线性等式约束 >>beq=[ ]; >>lb=[ ]; %x 没有下、上界