1、第十讲 matlab求极值和最值问题
在工程设计、经济管理和科学研究等诸多领域中,人们常常会遇到这样的问题:如何从一切可能的方案中选择最好、最优的方案,在数学上把这类问题称为最优化问题。这类问题很多,例如当设计一个机械零件时如何在保证强度的前提下使重量最轻或用量最省(当然偷工减料除外);如何确定参数,使其承载能力最高;在安排生产时,如何在现有的人力、设备的条件下,合理安排生产,使其产品的总产值最高;在确定库存时如何在保证销售量的前提下,使库存成本最小;在物资调配时,如何组织运输使运输费用最少。这些都属于最优化问题所研究的对象。
MATLAB的优化工具箱被放在toolbox目录下的o
2、ptim子目录中,其中包括有若干个常用的求解函数最优化问题的程序。MATLAB的优化工具箱也在不断地完善。不同版本的MATLAB,其工具箱不完全相同。在MATLAB5.3版本中,对优化工具箱作了全面的改进。每个原有的常用程序都重新编制了一个新的程序。除fzero和fsolve外都重新起了名字。这些新程序使用一套新的控制算法的选项。与原有的程序相比,新程序的功能增强了。在MATLAB5.3和6.0版本中,原有的优化程序(除fzero和fsolve外)仍然保留并且可以使用,但是它们迟早会被撤消的。鉴于上述情况,本书将只介绍那些新的常用的几个优化程序。
7.3.1 线性规划问题
线性规划是最优
3、化理论发展最成熟,应用最广泛的一个分支。在MATLAB的优化工具箱中用于求解下述线性规划的问题
(线性不等式约束)
(线性等式约束)
(有界约束)
的函数是linprog ,其主要格式为:
[x, fval, exitflag, output, lambda]= linprog(c, A, b, A1, b1 , LB, UB, x0, options)
其中,linprog为函数名,中括号及小括号中所含的参数都是输入或输出变量,这些参数的主要用法及说明如下:
(1)c, A和b是不可缺省的输入宗量;x
4、是不可缺省的输出宗量,它是问题的解。
(2)当x无下界时,在LB处放置[ ]。当无上界时,在UB处放置[ ]。 如果x的某个分量无下界,则置LB(i)=-inf. 如果无上界,则置UB(i)=inf. 如果无线性不等式约束,则在A和b处都放置[ ]。
(3)x0是解的初始近似值。
(4)options是用来控制算法的选项参数向量。
(5)输出宗量fval是目标函数在解x处的值。
(6)输出宗量exitflag的值描述了程序的运行情况。如果exitflag的值大于0,则程序收敛于解x;如果exitflag的值等于0,则函数的计算达到了最大次数;如果exitflag的值小于0,则问题无可
5、行解,或程序运行失败。
(7)输出宗量output输出程序运行的某些信息。
(8)输出宗量Lambda为在解x处的值 Lagrange乘子。
例:求解线性规划问题
min ,
,
,
,
, , .
解:在命令窗口中键入
>> c=[-2,-1,1]; a=[1,4,-1; 2,-2,1]; b=[4; 12]; a1=[1,1,2]; b1=6;
>> lb=[0; 0; -inf]; ub=[inf; inf; 5];
>> [x, z]=linprog(c,a,b,a1,b1,1b,ub)
运行后得到:
x=
4.66
6、67
0.0000
0.6667
z=
-8.6667
7.3.2 非线性约束最优化
在MATLAB的优化工具箱中有一个求解下述非线性规划的问题
(线性不等式约束)
(线性等式约束)
(非线性不等式约束)
(非线性等式约束)
(有界约束)
的函数是fmincon ,其主要格式为:
[x, fval, exitflag, output, lambda, grad, hessian]=fmincon(‘fun’, x0, A, b, A1, b1 , LB,
UB, ‘
7、nonlcon’, options, p1, p2,……)
其中,fmincon为函数名,参数的主要用法有的与线性规划中的相同,下面介绍几个非线性规划特有的:
(1)‘fun’和x0是不可缺省的输入宗量。fun是给出目标函数的M文件的名字,x0是极小值点的初始近似值。x是不可缺省的输出宗量,它是问题的解。
(2)nonlcon 是给出非线性约束函数和的M文件的文件名。
(3)宗量p1,p2…是向目标函数传送的参数的值。
(4)输出宗量grad为目标函数在解x处的梯度。
(5)输出宗量hessian为目标函数在解x处的Hessian矩阵。
例:求解非线性规划问题
m
8、in ,
,
,
,
解:建立目标函数的M文件
function y=nline (x)
y=exp (x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
建立非线性约束条件的M文件
function [c1, c2]=nyueshu (x)
c1=[1.5+x(1)*x(2)-x(1)-x(2); -x(1)*x(2)-10];
c2=0;
在命令窗口中键入
>> x0=[-1,1]; a=[1, -1]; b=1; a1=[1,1]; b1=0;
>> [x, f]=fmincon (‘nline’, x0, a, b, a1, b1, [ ], [ ], ‘nyueshu’)
运行后得到:
x=
-1.2247 1.2247
f=
1.8951