1、2.8 用 MATLAB 优化工具包解非线性规划用 MATLAB 优化工具包求解非线性规划时必须先化为如下形式:(NLP)求解程序名为 fmincon,其最简单的调用格式为:x = fmincon(fun,x0,A1,b1) (用于不含有等式约束和上下解约束的问题)其最复杂的调用格式为:x,fval,exitflag,output,lambda,grad,hessian = fmincon(fun,x0,A1,b1,A2,b2,v1,v2,nlcon,options,P1,P2, .) 2.8.1 程序 fmincon 输出变量其中输出变量的含义为:1) x : 最优解2) fval : 最优
2、解处的函数值3) exitflag : 程序结束时的状态指示: 0:收敛 0:函数调用次数或迭代次数达到最大值(该值在 options 中指定) 1 g = . % gradient of the function if nargout 2 H = . % Hessian of the function end nlcon.m 给出非线性约束,GradConstr=on时还给出梯度,一般形式为 function c1,c2,GC1,GC2 = nlcon(x) c1 = . % nonlinear inequalities at x c2 = . % nonlinear equalities
3、at x if nargout 2 GC1 = . % gradients of c1 GC2 = . % gradients of c2 end options:包含算法控制参数的结构设定(或显示)控制参数的命令为 Optimset,有以下一些用法:Optimset /显示控制参数optimset optfun /显示程序optfun的控制参数opt=optimset /控制参数设为(即缺省值opt=optimset(optfun)/ 设定为程序optfun的控制参数缺省值Opt=optimset(par1,val1,par2,val2,.)Opt=optimset(oldopts,par1
4、,val1,.)opt=optimset(oldopts,newopts)可以设定的参数比较多,对 fmincon,常用的有以下一些参数:Diagnostics 是否显示诊断信息( on 或off)Display 显示信息的级别(off , iter , final,notify)LargeScale 是否采用大规模算法( on 或off)MaxIter 最大迭代次数TolCon 约束的误差限TolFun 函数计算的误差限TolX 决策变量的误差限 GradObj 目标函数是否采用分析梯度(on ,off)Jacobian 目标函数是否采用分析 Jacob 矩阵(on ,off)MaxFunEvals 目标函数最大调用次数GradConstr 非线性约束函数是否采用分析梯度(on ,off) 2.8.3 注意事项 fmincon 中输出变量、输入参数不一定写全,可以缺省。 当中间某个输入参数缺省时,需用占据其位置。