2022年MATLAB优化教程 .pdf
MATLAB 6.0 数学手册176 第 5 章优化问题5.1 线性规划问题线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB6.0解决的线性规划问题的标准形式为:min nRxxfsub.to:bxAbeqxAequbxlb其中 f、x、b、beq、 lb、ub 为向量, A、 Aeq 为矩阵。其它形式的线性规划问题都可经过适当变换化为此标准形式。在 MA TLAB6.0版中,线性规划问题(Linear Programming)已用函数linprog 取代了MATLAB5.x版中的 lp 函数。当然,由于版本的向下兼容性,一般说来,低版本中的函数在6.0 版中仍可使用。函数linprog格式x = linprog(f,A,b) %求 min f *x sub.to bxA线性规划的最优解。x = linprog(f,A,b,Aeq,beq) %等式约束beqxAeq,若没有不等式约束bxA,则 A= ,b= 。x = linprog(f,A,b,Aeq,beq,lb,ub) %指定 x 的范围ubxlb,若没有等式约束beqxAeq,则 Aeq= , beq= x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %设置初值x0 x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options 为指定的优化参数x,fval = linprog(,) % 返回目标函数最优值,即fval= f *x 。x,lambda,exitflag = linprog(, ) % lambda 为解 x 的 Lagrange 乘子。x, lambda,fval,exitflag = linprog(,) % exitflag 为终止迭代的错误条件。x,fval, lambda,exitflag,output = linprog(,) % output 为关于优化的一些信息说明若 exitflag0 表示函数收敛于解x,exitflag=0 表示超过函数估值或迭代的最大数字, exitflagf = -5; -4; -6; A = 1 -1 1;3 2 4;3 2 0; b = 20; 42; 30; lb = zeros(3,1); x,fval,exitflag,output,lambda = linprog(f,A,b,lb) 结果为:x = %最优解0.0000 15.0000 3.0000 fval = %最优值-78.0000 exitflag = %收敛1 output = iterations: 6 %迭代次数cgiterations: 0 algorithm: lipsol %所使用规则lambda = ineqlin: 3x1 double eqlin: 0 x1 double upper: 3x1 double lower: 3x1 double lambda.ineqlin ans = 0.0000 1.5000 0.5000 lambda.lower ans = 1.0000 0.0000 0.0000 表明:不等约束条件2 和 3 以及第 1 个下界是有效的5.2 foptions函数对于优化控制,MA TLAB 提供了 18 个参数,这些参数的具体意义为:options(1)-参数显示控制(默认值为0) 。等于 1 时显示一些结果。options(2)- 优化点 x 的精度控制 (默认值为 1e-4)。options(3)- 优化函数 F 的精度控制 (默认值为1e-4)。options(4)- 违反约束的结束标准(默认值为 1e-6)。options(5)- 算法选择,不常用。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 29 页 - - - - - - - - - MATLAB 6.0 数学手册178 options(6)- 优化程序方法选择,为0 则为 BFCG 算法,为1 则采用 DFP 算法。options(7)- 线性插值算法选择,为0 则为混合插值算法,为1 则采用立方插算法。options(8)- 函数值显示(目标达到问题中的Lambda ) options(9)- 若需要检测用户提供的梯度,则设为1。options(10)-函数和约束估值的数目。options(11)-函数梯度估值的个数。options(12)-约束估值的数目。options(13)-等约束条件的个数。options(14)-函数估值的最大次数(默认值是100变量个数)options(15)-用于目标 达到问题中的特殊目标。options(16)-优化过程中变量的最小有限差分梯度值。options(17)- 优化过程中变量的最大有限差分梯度值。options(18)-步长设置(默认为 1 或更小 )。Foptions 已经被 optimset 和 optimget 代替,详情请查函数optimset 和 optimget。5.3 非线性规划问题5.3.1 有约束的一元函数的最小值单变量函数求最小值的标准形式为)x( fminxsub.to 21xxx在 MATLAB5.x中使用 fmin 函数求其最小值。函数fminbnd格式x = fminbnd(fun,x1,x2) %返回自变量x 在区间21xxx上函数 fun 取最小值时 x 值,fun 为目标函数的表达式字符串或MATLAB自定义函数的函数柄。x = fminbnd(fun,x1,x2,options) % options 为指定优化参数选项x,fval = fminbnd(,) % fval 为目标函数的最小值x,fval,exitflag = fminbnd(,) %xitflag 为终止迭代的条件x,fval,exitflag,output = fminbnd(,) % output 为优化信息说明若参数 exitflag0 ,表示函数收敛于x,若 exitflag=0 ,表示超过函数估计值或迭代的最大数字,exitflag x,fval,exitflag,output=fminbnd(x3+cos(x)+x*log(x)/exp(x),0,1)x = 0.5223 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 29 页 - - - - - - - - - 第 5 章优化问题179 fval = 0.3974 exitflag = 1 output = iterations: 9 funcCount: 9 algorithm: golden section search, parabolic interpolation 例 5-3 在0, 5上求下面函数的最小值1) 3x()x(f3解:先自定义函数:在MATLAB编辑器中建立M 文件为:function f = myfun(x) f = (x-3).2 - 1; 保存为 myfun.m ,然后在命令窗口键入命令: x=fminbnd(myfun,0,5) 则结果显示为:x = 3 5.3.2 无约束多元函数最小值多元函数最小值的标准形式为)x(fminx其中: x 为向量,如x,x,xxn21在 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 型简单搜寻法。例 5-4 求222132131xxx10 xx4x2y的最小值点解:X=fminsearch(2*x(1)3+4*x(1)*x(2)3-10*x(1)*x(2)+x(2)2, 0,0)结果为X = 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) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 29 页 - - - - - - - - - MATLAB 6.0 数学手册180 结果为: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 效果较好。例 5-5 求222121xxx2x3)x( f的最小值。 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-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) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 29 页 - - - - - - - - - 第 5 章优化问题181 x = 1.0e-008 * -0.7591 0.2665 5.3.3 有约束的多元函数最小值非线性有约束的多元函数的标准形式为:)x(fminxsub.to 0)x(C0)x(CeqbxAbeqxAequbxlb其中: 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 满足线性不等式约束bxA,若没有不等式约束,则取 A= ,b= ;Aeq、beq 满足等式约束beqxAeq,若没有,则取Aeq= ,beq= ;lb、ub 满足ubxlb,若没有界,可设lb= ,ub= ;nonlcon 的作用是通过接受的向量x 来计算非线性不等约束0)x(C和等式约束0)x(Ceq分别在 x 处的估计 C 和 Ceq, 通过指定函数柄来使用,如:x = fmincon(myfun,x0,A,b,Aeq,beq,lb,ub,mycon),先建立非线性约束函数,并保存为mycon.m :function C,Ceq = mycon(x) C = ,% 计算 x 处的非线性不等约束0)x(C的函数值。Ceq = ,% 计算 x 处的非线性等式约束0)x(Ceq的函数值。lambda 是 Lagrange 乘子,它体现哪一个约束有效。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 29 页 - - - - - - - - - MATLAB 6.0 数学手册182 output 输出优化信息;grad 表示目标函数在x 处的梯度;hessian表示目标函数在x 处的 Hessiab 值。例 5-6 求下面问题在初始点(0, 1)处的最优解min 21212221x5x2xxxxsub.to 0 x)1x(22106x3x221解:约束条件的标准形式为sub.to 0 x) 1x(2216x3x221先在 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 没有下、上界ub= ; x,fval,exitflag,output,lambda,grad,hessian =fmincon(fun,x0,A,b,Aeq,beq,lb,ub,mycon) 则结果为x = 3 4 fval = -13 exitflag = %解收敛1 output = iterations: 2 funcCount: 9 stepsize: 1 algorithm: medium-scale: SQP, Quasi-Newton, line-search firstorderopt: cgiterations: lambda = lower: 2x1 double %x 下界有效情况,通过lambda.lower 可查看。upper: 2x1 double %x 上界有效情况,为0 表示约束无效。eqlin: 0 x1 double %线性等式约束有效情况,不为0 表示约束有效。eqnonlin: 0 x1 double %非线性等式约束有效情况。ineqlin: 2.5081e-008 %线性不等式约束有效情况。ineqnonlin: 6.1938e-008 %非线性不等式约束有效情况。grad = %目标函数在最小值点的梯度1.0e-006 * -0.1776 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 29 页 - - - - - - - - - 第 5 章优化问题183 0 hessian = %目标函数在最小值点的Hessian 值1.0000 -0.0000 -0.0000 1.0000 例 5-7 求下面问题在初始点x=(10, 10, 10) 处的最优解。Min 321xxx)x( fSub.to 72x2x2x0321解:约束条件的标准形式为sub.to 0 x2x2x32172x2x2x321 fun= -x(1)*x(2)*x(3); x0=10,10,10; A=-1 -2 -2;1 2 2; b=0;72; x,fval=fmincon(fun,x0,A,b) 结果为:x = 24.0000 12.0000 12.0000 fval = -3456 5.3.4 二次规划问题二次规划问题(quadratic programming )的标准形式为:xfxHx21minsub.to bxAb eqxA eqbuxbl其中, H、A、 Aeq 为矩阵, f、b、 beq、lb、ub、x 为向量其它形式的二次规划问题都可转化为标准形式。MATLAB5.x版中的 qp 函数已被 6.0 版中的函数quadprog 取代。函数quadprog 格式x = quadprog(H,f,A,b) %其中 H,f,A,b 为标准形中的参数,x 为目标函数的最小值。x = quadprog(H,f,A,b,Aeq,beq) %Aeq,beq 满足等约束条件beqxAeq。x = quadprog(H,f,A,b,Aeq,beq,lb,ub) % lb,ub 分别为解x 的下界与上界。x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) %x0 为设置的初值x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) % options 为指定的优化参数x,fval = quadprog( ,) %fval 为目标函数最优值x,fval,exitflag = quadprog(,) % exitflag 与线性规划中参数意义相同x,fval,exitflag,output = quadprog(,) % output 与线性规划中参数意义相同x,fval,exitflag,output,lambda = quadprog(,) % lambda 与线性规划中参数意义相同名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 29 页 - - - - - - - - - MATLAB 6.0 数学手册184 例 5-8 求解下面二次规划问题21212221x6x2xxxx21)x( fminsub.to 2xx212x2x213xx22121x0,x0解:xfxHx21)x(f则2111H,62f,21xxx在 MATLAB中实现如下:H = 1 -1; -1 2 ; f = -2; -6; A = 1 1; -1 2; 2 1; b = 2; 2; 3; lb = zeros(2,1); x,fval,exitflag,output,lambda = quadprog(H,f,A,b, , ,lb) 结果为:x = %最优解0.6667 1.3333 fval = %最优值-8.2222 exitflag = %收敛1 output = iterations: 3 algorithm: medium-scale: active-set firstorderopt: cgiterations: lambda = lower: 2x1 double upper: 2x1 double eqlin: 0 x1 double ineqlin: 3x1 double lambda.ineqlin ans = 3.1111 0.4444 0 lambda.lower ans = 0 0 说明第 1、2 个约束条件有效,其余无效。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 29 页 - - - - - - - - - 第 5 章优化问题185 例 5-9 求二次规划的最优解max f (x1, x2)=x1x2+3 sub.to x1+x2-2=0 解:化成标准形式:3xx)0, 0(xx0110)xx(213xx)xx(fmin2121212121sub.to x1+x2=2 在 Matlab 中实现如下:H=0,-1;-1,0; f=0;0; Aeq=1 1; b=2; x,fval,exitflag,output,lambda = quadprog(H,f, , ,Aeq,b) 结果为:x = 1.0000 1.0000 fval = -1.0000 exitflag = 1 output = firstorderopt: 0 iterations: 1 cgiterations: 1 algorithm: 1x58 char lambda = eqlin: 1.0000 ineqlin: lower: upper: 5.4 “半无限”有约束的多元函数最优解“半无限”有约束多元函数最优解问题的标准形式为)x(fminxsub.to 0)x(C0)x(CeqbxAbeqxAeq0)w,x(K110)w,x(K22,0)w,x(Knn名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 29 页 - - - - - - - - - MATLAB 6.0 数学手册186 其中: x、b、beq、lb、ub 都是向量; A、Aeq 是矩阵; C(x) 、Ceq(x)、)w,x(Kii是返回向量的函数, f(x) 为目标函数; f(x) 、C(x)、Ceq(x) 是非线性函数;)w,x(Kii为半无限约束,n21w,w,w通常是长度为2 的向量。在 MTALAB5.x中,使用函数seminf 解决这类问题。函数fseminf 格式x = fseminf(fun,x0,ntheta,seminfcon) x = fseminf(fun,x0,ntheta,seminfcon,A,b) x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq) x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub) x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options) x,fval = fseminf( ,) x,fval,exitflag = fseminf(,) x,fval,exitflag,output = fseminf(,) x,fval,exitflag,output,lambda = fseminf(,) 参数说明: x0 为初始估计值;fun 为目标函数,其定义方式与前面相同;A、b 由线性不等式约束bxA确定,没有,则A= ,b= ;Aeq、beq 由线性等式约束beqxAeq确定,没有,则Aeq= ,beq= ;Lb、ub 由变量 x 的范围buxbl确定;options 为优化参数;ntheta 为半无限约束的个数;seminfcon 用来确定非线性约束向量C 和 Ceq 以及半无限约束的向量K1,K2,, , Kn,通过指定函数柄来使用,如:x = fseminf(myfun,x0,ntheta,myinfcon) 先建立非线性约束和半无限约束函数文件,并保存为myinfcon.m :function C,Ceq,K1,K2, ,Kntheta,S = myinfcon(x,S) %S 为向量 w 的采样值% 初始化样本间距if isnan(S(1,1),S = ,% S 有 ntheta 行 2 列end w1 = ,%计算样本集w2 = ,%计算样本集,wntheta = ,% 计算样本集K1 = ,% 在 x 和 w 处的第 1 个半无限约束值K2 = ,%在 x 和 w 处的第 2 个半无限约束值,Kntheta = ,%在 x 和 w 处的第 ntheta 个半无限约束值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 29 页 - - - - - - - - - 第 5 章优化问题187 C = ,% 在 x 处计算非线性不等式约束值Ceq = ,% 在 x 处计算非线性等式约束值如果没有约束,则相应的值取为“ ” ,如 Ceq= fval 为在 x 处的目标函数最小值;exitflag 为终止迭代的条件;output 为输出的优化信息;lambda 为解 x 的 Lagrange 乘子。例 5-10 求下面一维情形的最优化问题232221x)5. 0 x()5.0 x() 5.0 x()x(fminsub.to 1x)xwsin()50w(10001)xwcos()xwsin()w,x(K331212111111x)xwsin()50w(10001)xwcos()xwsin()w,x(K33222122222100w11100w12解:将约束方程化为标准形式:01x)xwsin()50w(10001)xwcos()xwsin()w,x(K3312121111101x)xwsin()50w(10001)xwcos()xwsin()w,x(K33222122222先建立非线性约束和半无限约束函数文件,并保存为mycon.m:function C,Ceq,K1,K2,S = mycon(X,S) % 初始化样本间距:if isnan(S(1,1), S = 0.2 0; 0.2 0; end % 产生样本集:w1 = 1:S(1,1):100; w2 = 1:S(2,1):100; % 计算半无限约束:K1 = sin(w1*X(1).*cos(w1*X(2) - 1/1000*(w1-50).2 -sin(w1*X(3)-X(3)-1; K2 = sin(w2*X(2).*cos(w2*X(1) - 1/1000*(w2-50).2 -sin(w2*X(3)-X(3)-1; % 无非线性约束:C = ; Ceq= ; % 绘制半无限约束图形plot(w1,K1,-,w2,K2,:),title(Semi-infinite constraints) 然后在 MA TLAB 命令窗口或编辑器中建立M 文件:fun = sum(x-0.5).2); x0 = 0.5; 0.2; 0.3; % Starting guess x,fval = fseminf(fun,x0,2,mycon) 结果为:x = 0.6673 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 29 页 - - - - - - - - - MATLAB 6.0 数学手册188 0.3013 0.4023 fval = 0.0770 C,Ceq,K1,K2 = mycon (x,NaN); % 利用初始样本间距max(K1) ans = -0.0017 max(K2) ans = -0.0845 图 5-1 例 5-11 求下面二维情形的最优化问题232221x)2.0 x()2.0 x()2.0 x()x(fminsub.to 3312122111x)xwsin()50w(10001)xwcos()xwsin()w,x(K5.1x)xwsin()50w(10001)xwcos()xwsin(332221122100w11100w12初始点为 x0=0.25, 0.25, 0.25 。解:先建立非线性和半无限约束函数文件,并保存为mycon.m:function C,Ceq,K1,S = mycon(X,S) % 初始化样本间距:if isnan(s(1,1), s = 2 2; end % 设置样本集w1x = 1:s(1,1):100; w1y = 1:s(1,2):100; wx, wy = meshgrid(w1x,w1y); % 计算半无限约束函数值K1 = sin(wx*X(1).*cos(wx*X(2)-1/1000*(wx-50).2 -sin(wx*X(3)-X(3)+sin(wy*X(2).*cos(wx*X(1)-1/1000*(wy-50).2-sin(wy*X(3)-X(3)-1.5; % 无非线性约束C = ; Ceq= ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 29 页 - - - - - - - - - 第 5 章优化问题189 %作约束曲面图形m = surf(wx,wy,K1,edgecolor,none,facecolor,interp); camlight headlight title(Semi-infinite constraint) drawnow 然后在 MA TLAB 命令窗口下键入命令:fun = sum(x-0.2).2); x0 = 0.25, 0.25, 0.25; x,fval = fseminf(fun,x0,1,mycon) 结果为(如图)x = 0.2926 0.1874 0.2202 fval = 0.0091 c,ceq,K1 = mycon(x,0.5,0.5); % 样本间距为0.5 max(max(K1) ans = -0.0027 5.5 极小化极大( Minmax )问题极小化极大问题的标准形式为)x(FmaxminiFxisub.to 0)x(C0)x(CeqbxAbeqxAequbxlb其中: x、b、beq、lb、ub 是向量, A、Aeq 为矩阵, C(x)、Ceq(x)和 F(x)是返回向量的函数, F(x)、C(x) 、Ceq(x)可以是非线性函数。在 MATLAB5.x中,它的求解由函数minmax 实现。函数fminimax 格式x = fminimax(fun,x0) x = fminimax(fun,x0,A,b) x = fminimax(fun,x0,A,b,Aeq,beq) x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub) x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) x,fval,maxfval = fminimax(,) x,fval,maxfval,exitflag = fminimax(,) x,fval,maxfval,exitflag,output = fminimax(,) x,fval,maxfval,exitflag,output,lambda = fminimax(,) 图 5-2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 29 页 - - - - - - - - - MATLAB 6.0 数学手册190 参数说明: fun 为目标函数;x0 为初始值;A、b满足线性不等约束bxA,若没有不等约束,则取A= ,b= ;Aeq、beq满足等式约束beqxAeq,若没有,则取Aeq= ,beq= ;lb、ub 满足ubxlb,若没有界,可设lb= ,ub= ;nonlcon 的作用是通过接受的向量x 来计算非线性不等约束0)x(C和等式约束0)x(Ceq分别在 x 处的值 C 和 Ceq,通过指定函数柄来使用,如:x = fminimax(myfun,x0,A,b,Aeq,beq,lb,ub,mycon),先建立非线性约束函数,并保存为 mycon.m:function C,Ceq = mycon(x) C = ,% 计算 x 处的非线性不等约束0)x(C的函数值。Ceq = ,% 计算 x 处的非线性等式约束0)x(Ceq的函数值。options 为指定的优化参数;fval 为最优点处的目标函数值;maxfval 为目标函数在x 处的最大值;exitflag 为终止迭代的条件;lambda 是 Lagrange 乘子,它体现哪一个约束有效。output 输出优化信息。例 5-12 求下列函数最大值的最小化问题)x(f, )x(f, )x(f, )x(f, )x(f54321其中:304x40 x48xx2)x(f212221122222x3x)x(f18x3x)x(f213214xx)x(f8xx)x(f215解:先建立目标函数文件,并保存为myfun.m :function f = myfun(x) f(1)= 2*x(1)2+x(2)2-48*x(1)-40*x(2)+304; f(2)= -x(1)2 - 3*x(2)2; f(3)= x(1) + 3*x(2) -18; f(4)= -x(1)- x(2); f(5)= x(1) + x(2) - 8; 然后,在命令窗口键入命令:x0 = 0.1; 0.1; % 初始值x,fval = fminimax(myfun,x0) 结果为:x = 4.0000 4.0000 fval = 0.0000 -64.0000 -2.0000 -8.0000 -0.0000 例 5-13 求上述问题的绝对值的最大值最小化问题。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 29 页 - - - - - - - - - 第 5 章优化问题191 目标函数为: |)x(f |, |)x(f |,