x =
0.6110 -0.3055
注:比较两种方法,fminunc函数的效率高于fminsearch函数,所以在无约束最优化问题求解时,如果安装了最优化工具箱则建议使用fminunc函数。
(2)有约束最优化问题求解
1线性规划问题的计算机求解 ○
[x,fopt,flag,c]=linprog(f,A,B,Aeq,Beq,xm,xM,x0,options) 【例1.76】是求解下面的线性规划问题
min(?2x?x?4x?x?x)
12345?2x?x?4x?2x?20?s.t.?3x?4x?x?x?2x?31?x,x?0,x?3,x?1,x?2 ?23451234512345解 由于约束条件中没有等式约束。故可以定义Aeq,Beq为空矩阵,且对x的上界xM也没有限制,故同样将其写为空矩阵,可以给出如下命令,即可得出结果:
>>f=[-2,-1,4,-1,1]';A=[0 2 1 4 2;3 -4 1 -1 2];B=[20;31];
>>Ae=[];Be=[];xm=[0,0,3,1,2]';xM=[];
>>ff=optimset;ff.LargeScale='off';ff.TolX=1e-15;ff.TolFun=1e-20;ff.Display='iter'; >>[x,f_opt,key,c]=linprog(f,A,B,Ae,Be,xm,xM,[],ff) Optimization terminated. x =
14.3333 4.5000 3.0000 1.0000 2.0000
f_opt =
-20.1667
key =
1 c =
iterations: 5
constrviolation: 1.7764e-15
algorithm: 'medium-scale: active-set' cgiterations: []
message: 'Optimization terminated.' firstorderopt: 7.1054e-15
2二次型规划问题的求解 ○
>>[x,fopt,flag,c]=quadprog(H,f,A,B,Aeq,Beq,xm,xM,x0,options) H为二次规划目标函数中的H矩阵 【例1.77】试求解下面的二次规划问题
min((x?1)^2?(x?2)^2?(x?3)^2?(x?4)^2)1234?x?x?x?x?5?s.t.?3x?3x?2x?x?10?x,x,x,x?10?123412341234
解 首先应该讲原问题写成二次型规划的模式,展开目标函数得:
f(x)=x1+x2+x3+x4-2x1-4x2-6x3-8x4+30=?xTHx+fTx+30
其中,H=diag([2,2,2,2]),fT=[-2 -4 -6 -8],xT=(x1,x2,x3,x4),而目标函数中的常数30对最优化结果没有影响,可略去.
>>f=[-2,-4,-6,-8];H=diag([2,2,2,2]);
>>opt=optimset;opt.LargeScale='off';
>>A=[1,1,1,1;3,3,2,1];B=[5;10];Aeq=[];Beq=[];xm=[0;0;0;0]; xM=[];x0=[];
>>[x,f_opt]=quadprog(H,f,A,B,Aeq,Beq,xm,xM,x0,opt) Optimization terminated. x =
0.0000 0.6667 1.6667 2.6667
f_opt =
-23.6667
从而,在约束条件下,当x=[0,0.6667,1.6667,2.6667]T时,所求函数取得最小值,且最小值为:-23.6667+30=6.3333
3一般有约束最优化问题的求解 ○
>>[x,fopt,flag,c]=fmincon(F,x0,A,B,Aeq,Beq,xm,xM,CF,options) 【例1.78】求解下面的有约束最优化问题
min(x^2?x^2?xx?2x?5x)121212?(x?1)^2?x?0s.t.???2x?3x?6?01212
解 首先建立非线性约束函数文件: function [c,ceq]=mycon(x) c=(x(1)-1)^2-x(2); ceq=[ ]; %无等式约束
然后,在命令窗口中输入:
>>inline('(x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2)','x'); >>F=inline('(x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2)','x'); >>x0=[0,1];A=[-2,3];B=6;Aeq=[ ];Beq=[ ];xm=[ ];xM=[ ]; >>ff=optimset;ff.LargeScale=='off';ff.Display='iter';ff.TolFun=1e-30;ff.TolX=1e-15;
>>[x,f_opt,flag,c]=fmincon(F,x0,A,B,Aeq,Beq,xm,xM,'mycon',ff)
1.求解下面的线性规划问题:
min(?3x?4x?2x?5x)1234?4x?x?2x?x??2??x?x?x?2x?14s.t.??2x?3x?x?x??2?x,x,x??1,x无约束?1234123412341234
f=[-3,4,-2,5]';A=[1 1 -1 2;2 -3 -1 -1];B=[14;-2]; Ae=[4 -1 2 -1];Be=[-2];xm=[-1,-1,-1,-Inf]';xM=[];
ff=optimset;ff.LargeScale='off';ff.TolX=1e-15;ff.TolFun=1e-20;ff.Display='iter';ff.TolCon=1e-20;
[x,f_opt,key,c]=linprog(f,A,B,Ae,Be,xm,xM,[],ff)
Exiting: the solution is unbounded and at infinity; the constraints are not restrictive enough. x =
1.0e+15 *
-0.0000 7.0711 -0.0000 -7.0711
f_opt =
-7.0711e+15
key =