Matlab优化工具箱函数简介一维搜索问题fminbnd无约束极小值fminunc, fminsearch约束极小值fmincon线性规划linprog二次规划quadprog1.一维搜索问题优化工具箱函数fminbnd对应问题:min f(x)x1<x<x2调用格式x= fminbnd(fun,x1,x2):得到函数fun在区间[x1,x2]内取得最小值的x.[x,f]= fminbnd(fun,x1,x2): 得到最优点x和最优目标函数值f。
例:求minf(x)= -(3-2*x)^2*x方法1:x=fminbnd('-(3-2*x)^2*x',0,1.5)方法2:f=inline('-(3-2*x)^2*x');x=fminbnd(f,0,1.5)方法3: x = fminbnd(@(x) -(3-2*x)^2*x,0,1.5)方法4:先形成一个函数文件function f=fun(x)f=-(3-2*x)^2*x;然后运行下两句中的任一句x=fminbnd('fun',0,1.5)x=fminbnd(@fun,0,1.5)若需输出最优点处的目标函数值f,则将上述语句的左边改为[x,f],如:[x,f]=fminbnd(' -(3-2*x)^2*x',0,1.5)其它用法:[X,fval,exitflag,output]= fminbnd(fun,x1,x2)其中:fun为目标函数,x1,x2为变量的边界约束,即x1≤x≤x2,X为返回的满足fun取得最小值的x的值,而fval则为此时的目标函数值。
exitflag>0表示计算收敛,exitflag=0表示超过了最大的迭代次数,exitflag<0表示计算不收敛,返回值output有3个分量,其中iterations是优化过程中迭代次数,funcCount是代入函数值的次数,algorithm是优化所采用的算法。
例:clearfun='(x^5+x^3+x^2-1)/(exp(x^2)+sin(-x))'ezplot(fun,[-2,2])[X,fval,exitflag,output]= fminbnd(fun,-2,2)结果为:X = 0.2176fval =-1.1312exitflag = 1output = iterations: 13funcCount: 13algorithm: 'golden section search, parabolic interpolation'2. 无约束极小值优化工具箱函数 fminunc, fminsearch以上两个函数均可求解无约束多元函数的最小值。
调用格式:x=fminunc(fun,X0)x=fminsearch(fun,X0)--------------以X0为初始迭代点,求使函数fun 取得最小值的x[x,fval]= fminunc(fun,X0)[x,fval]= fminsearch(fun,X0)--------------以X0为初始迭代点,求得最优点x 和最优值fval 。
fminsearch()采用单纯形法进行计算,适合处理阶次低但是间断点多的函数;fminunc()对于高阶连续的函数比较有效,该函数可以输出海塞矩阵。
例1:求 221122min ()32f X x x x x =++ X0=[1,1]’[x,fval]=fminunc('3*x(1)^2+2*x(1)*x(2)+x(2)^2',X0)[x,fval]=fminsearch('3*x(1)^2+2*x(1)*x(2)+x(2)^2',[1,1]')例2:clearfun='exp(x(1))*(2*x(1)^2+3*x(2)^2+2*x(1)*x(2)+3*x(2)+1)';x0=[0,0];options=optimset('largescale','off','display','iter','tolx',1e-8,'tolfun',1e-8);[x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0,options)3. 约束极小值优化工具箱函数 fmincon对应数学模型:min F(X)subject to: A*X <= B, Aeq*X = Beq (linear constraints)C(X) <= 0, Ceq(X) = 0 (nonlinear constraints)LB <= X <= UB调用格式:x=fmincon(fun,x0,A,b):给定初值x0,求解fun函数的最极值点x.。
约束条件为线性约束A*x<=b。
x0可以是标量、矢量或矩阵X=fmincon(FUN,X0,A,B,Aeq,Beq) 同前一调用格式相比,约束条件中增加了等式约束Aeq*X = Beq. (若无不等式约束,取A=[] 、B=[])X=fmincon(FUN,X0,A,B,Aeq,Beq,LB,UB) 若设计变量X有上下限UB、LB用此格式若X无取值限制,LB与UB为空矩阵[]。
若X(i)的下限为负无穷,则LB(i)=-Inf。
若X(i)的上限为正无穷,则UB(i)=Inf。
X=fmincon(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON)NONLCON是包含函数名的字符串,该函数可以是M文件、内部文件。
例如,若NONLCON=’mycon’,则M文件mycon.m具有如下内容:Function [C,Ceq]=mycon(X)C=…..%计算X处的非线性不等式Ceq=…%计算X处的非线性等式以上各调用格式中均可输出目标函数值,用法仍为:[x,fval]=fmincon(….)例:某问题的目标函数为约束条件为:设计变量初始值为目标函数function f=myfun(x)f=0.192457*1e-4*(x(2)+2)*x(1)^2*x(3);非线性约束function [c,ceq]=mycon(x)c(1)=350-163*x(1)^(-2.86)*x(3)^0.86;c(2)=10-0.4e-2*x(1)^(-4)*x(2)*x(3)^3;c(3)=(x(2)+1.5)*x(1)+0.44e-2*x(1)^(-4)*x(2)*x(3)^3-3.7*x(3); c(4)=375-0.356*1e6*x(1)*x(2)^(-1)*x(3)^(-2);c(5)=4-x(3)/x(1);ceq=0;主程序A=[-1 0 01 0 00 -1 00 1 00 0 -10 0 1];b=[-1;4;-4.5;50;-10;30];x0=[2;5;25];lb=[0;0;0];[x,fval]=fmincon('myfun',x0,A,b,[],[],lb,[],'mycon')%或用下式:%[x,fval]=fmincon(@myfun,x0,A,b,[],[],lb,[],@mycon)总结:X=fmincon(fun,x0,A,b)X=fmincon(fun,x0,A,b,Aeq,Beq,Lb,Ub)X=fmincon(fun,x0,A,b,Aeq,Beq,Lb,Ub,nonlcon,options)[X,fval,exitflag,output]=fmin con(fun,x0,…)[X,fval,exitflag,output,lambda,grad,Hessian]=fmincon(fun,x0,…)参数中fun为目标函数,x0为变量的初始值,x为返回的满足要求的变量的值。
A和b表示线性不等式约束,Aeq,Beq表示线性等式约束,Lb和Ub分别为变量的下界和上界约束,nonlcon表示非线性约束条件,options为控制优化过程的优化参数向量。
返回值fval为目标函数。
exitflag>0表示优化结果收敛于解,exitflag=0表示优化超过了函数值的计算次数,exitflag<0表示优化不收敛。
lambda是拉格朗日乘子,显示那个约束条件有效。
grad表示梯度,hessian表示汉森矩阵。
4.线性规划优化函数linprogX=linprog (f,A,b)对应数学规划:min f'*xsubject to: A*x <= bX= linprog (f,A,b,Aeq,beq) 增加等式约束Aeq*x = beq.X= linprog (f,A,b,Aeq,beq,LB,UB) 设计变量有上下限X= linprog (f,A,b,Aeq,beq,LB,UB,X0) X0为初始迭代点[X,F]=linprog(….)5.二次规划x= quadprog(H,f,A,b)x = quadprog(H,f,A,b,Aeq,beq)x = quadprog(H,f,A,b,Aeq,beq,lb,ub)x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)[x,fval] = quadprog(...)[x,fval,exitflag] = quadprog(...)[x,fval,exitflag,output] = quadprog(...)[x,fval,exitflag,output,lambda] = quadprog(...)其中:X=quadprog (H,f,A,b)对应问题为:min 0.5*x'*H*x + f'*xsubject to: A*x <= bX= quadprog (H,f,A,b,Aeq,beq) 增加等式约束Aeq*x = beq.X= quadprog (H,f,A,b,Aeq,beq,LB,UB) 设计变量有上下限X= quadprog (H,f,A,b,Aeq,beq,LB,UB,X0)---- X0为初始迭代点[X,FV AL]= quadprog (。
)以上优化工具箱函数只供参考,不供考试中使用。