1、 -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.0000fval = %最优值 -78.0000exitflag = %收敛 1output = iterations: 6 %迭代次数 cgiterations: 0 algorithm: lipsol %所使用规则lambda = ineqlin: 3x1 double eqlin: 0x1 double upp
2、er: lower: lambda.ineqlinans = 1.5000 0.5000 lambda.lower 1.0000表明:不等约束条件2和3以及第1个下界是有效的5.2 foptions函数对于优化控制,MATLAB提供了18个参数,这些参数的具体意义为:options(1)-参数显示控制(默认值为0)。等于1时显示一些结果。 options(2)-优化点x的精度控制(默认值为1e-4)。 options(3)-优化函数F的精度控制(默认值为1e-4)。 options(4)-违反约束的结束标准(默认值为1e-6)。 options(5)-算法选择,不常用。 options(6)-
3、优化程序方法选择,为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)-用于目标 达到问题中的特殊目标。 option
4、s(16)-优化过程中变量的最小有限差分梯度值。 options(17)- 优化过程中变量的最大有限差分梯度值。 options(18)-步长设置 (默认为1或更小)。Foptions已经被optimset和optimget代替,详情请查函数optimset和optimget。5.3 非线性规划问题5.3.1 有约束的一元函数的最小值单变量函数求最小值的标准形式为 sub.to 在MATLAB5.x中使用fmin函数求其最小值。函数 fminbnd格式 x = fminbnd(fun,x1,x2) %返回自变量x在区间上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定
5、义函数的函数柄。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=fminsearch(myfun, 0,0)命令 利用函数fminunc求多变量无约束函数最小值函数
6、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,out
7、put,grad,hessian = fminunc() %目标函数在解x处的海赛(Hessian)值当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续时,使用fminsearch效果较好。例5-5 求的最小值。 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) 1.0e-008 * -0.7591 0.2665 1.3953e-016 16 stepsize: 1.2353 firstorderopt: 1.6772e-
8、007medium-scale: Quasi-Newton line searchgrad = 1.0e-006 * -0.1677 0.0114hessian = 6.0000 2.0000 2.0000 2.0000或用下面方法: fun=inline()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.3.3 有约束的多元函数最小值非线性有约束的多元函数的标准形式为:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是返回向量的函数,f(x)为目
9、标函数,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 = fminc
10、on()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= ,b= ;Aeq、beq满足等式约束,若没有,则取Aeq= ,beq= ;lb、ub满足,若没有界,可设lb= ,ub= ;
11、nonlcon的作用是通过接受的向量x来计算非线性不等约束和等式约束分别在x处的估计C和Ceq,通过指定函数柄来使用,如:x = fmincon(myfun,x0,A,b,Aeq,beq,lb,ub,mycon),先建立非线性约束函数,并保存为mycon.m:function C,Ceq = mycon(x)C = % 计算x处的非线性不等约束的函数值。Ceq = % 计算x处的非线性等式约束lambda是Lagrange乘子,它体现哪一个约束有效。output输出优化信息;grad表示目标函数在x处的梯度;hessian表示目标函数在x处的Hessiab值。例5-6 求下面问题在初始点(0,
12、1)处的最优解约束条件的标准形式为先在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,l
13、b,ub,mycon)则结果为 3 4 -13exitflag = %解收敛 2 SQP, Quasi-Newton, line-search 2x1 double %x下界有效情况,通过lambda.lower可查看。 2x1 double %x上界有效情况,为0表示约束无效。 0x1 double %线性等式约束有效情况,不为0表示约束有效。 eqnonlin: 0x1 double %非线性等式约束有效情况。 2.5081e-008 %线性不等式约束有效情况。 ineqnonlin: 6.1938e-008 %非线性不等式约束有效情况。grad = %目标函数在最小值点的梯度 -0.17
14、76hessian = %目标函数在最小值点的Hessian值 1.0000 -0.0000 -0.0000 1.0000例5-7 求下面问题在初始点x=(10, 10, 10)处的最优解。Min Sub.to 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) 24.0000 12.0000 12.0000 -34565.3.4 二次规划问题二次规划问题(quadratic programming)的标准形式为:其中,H、A、Aeq为矩阵,f、b、beq、lb、ub、x为
15、向量其它形式的二次规划问题都可转化为标准形式。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满足等约束条件。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,
16、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与线性规划中参数意义相同例5-8 求解下面二次规划问题则,在MATLAB中实现如下:H = 1 -1; -1 2 ;f = -2;A = 1
17、 1; -1 2; 2 1;b = 2; 2; 3;lb = zeros(2,1);x,fval,exitflag,output,lambda = quadprog(H,f,A,b, , ,lb) 0.6667 1.3333 -8.2222 active-set 2x1 double 3.1111 0.4444说明 第1、2个约束条件有效,其余无效。例5-9 求二次规划的最优解max f (x1, x2)=x1x2+3sub.to x1+x2-2=0化成标准形式:sub.to x1+x2=2在Matlab中实现如下:H=0,-1;-1,0;f=0;0;Aeq=1 1;b=2;x,fval,ex
18、itflag,output,lambda = quadprog(H,f, , ,Aeq,b) -1.0000 1x58 char5.4 “半无限”有约束的多元函数最优解“半无限”有约束多元函数最优解问题的标准形式为x、b、beq、lb、ub都是向量;A、Aeq是矩阵;C(x)、Ceq(x)、是返回向量的函数,f(x)为目标函数;f(x)、C(x)、Ceq(x)是非线性函数;为半无限约束,通常是长度为2的向量。在MTALAB5.x中,使用函数seminf解决这类问题。函数 fseminf格式 x = fseminf(fun,x0,ntheta,seminfcon)x = fseminf(fun,
19、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由线性不等式约束确定,没有,则A=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1