matlab规划问题.doc
数学规划模型的matlab求解数学规划模型是优化模型的一种,包括线性规划模型(目标函数和约束条件都是线性函数的优化问题);非线性规划模型(目标函数或者约束条件是非线性的函数);整数规划(决策变量是整数值得规划问题);多目标规划(具有多个目标函数的规划问题);目标规划(具有不同优先级的目标和偏差的规划问题)动态规划(求解多阶段决策问题的最优化方法)。数学规划模型相对比较好理解,关键是要能熟练地求出模型的解。以下是解线性规划模型的方法:1.线性规划问题线性规划问题的标准形式为:minf *xsub.to:A*x0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag0表示计算收敛,exitflag=0表示超过了最大的迭代次数,exitflag<0表示计算不收敛,返回值output有3个分量,其中iterations是优化过程中迭代次数,funcCount是代入函数值的次数,algorithm是优化所采用的算法。例1:求函数在区间的最小值和相应的值。解决此问题的Matlab程序为: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: goldensectionsearch,parabolicinterpolation (一)无约束非线性多变量优化问题这里我们介绍两个命令:fminsearch()和fminunc(),前者适合处理阶次低但是间断点多的函数,后者则对于高阶连续的函数比较有效。命令fminsearch()的格式为:X=fminsearch(fun,X0)[X,fval,exitflag,output]=fminsearch(fun,X0,options)该命令求解目标函数fun的最小值和相应的x值,X0为x的初始值,fval为返回的函数值,exitflag=1表示优化结果收敛,exitflag=0表示超过了最大迭代次数。返回值output有3个分量,其中iterations是优化过程中的迭代次数,funcCount是代入函数值的次数,algorithm是优化所采用的算法。options是一个结构,里面有控制优化过程的各种参数,参考optimset()命令来设置,一般情况下我们不必改动它,即使用缺省设置就可以了。例2:求函数的最小值以及最小值点。完成该计算的Matlab程序如下:clearfun1= sin(x)+cos(y) fun2= sin(x(1))+cos(x(2)) ezmesh(fun1)[X,fval]=fminsearch(fun2,[0,0])X=-1.57083.1416fval=-2.0000其中语句ezmesh()是为了画出函数的图形,注意这里fun1和fun2的不同,考虑如果用相同的是否可行。命令fminunc()的格式为:X=fminunc(fun,X0)[X,fval,exitflag,output,grad,hessian]=fminunc(fun,X0,options)命令fminunc()通过计算寻找多变量目标函数fun的最小值,X0为优化的初始值,X为返回的变量的值,grad返回解点的梯度,hessian返回解点的汉森矩阵。其它参数的意义和命令fminsearch()相同。例3:求函数的最小值。解:Matlab程序为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)运行结果为:IterationFunc-countf(x)Step-sizeDirectionalderivative1210.2-10280.3694710.134277-0.020