
MATLAB求解线性规划问题课件.ppt
25页第七章第七章 最优化计算方法最优化计算方法一、实验目的:一、实验目的:第一节第一节 线性方程组的应用线性方程组的应用1、了解线性规划问题及可行解、最优解的概念、了解线性规划问题及可行解、最优解的概念 ;; 2、掌握、掌握Matlab软件关于求解线性规划的语句和方法软件关于求解线性规划的语句和方法二、实验原理和方法:二、实验原理和方法:在生活实践中,很多重要的实际问题都是线性的(至少能在生活实践中,很多重要的实际问题都是线性的(至少能够用线性函数很好的近似表示),所以我们一般把这些问够用线性函数很好的近似表示),所以我们一般把这些问题化为线性的目标函数和约束条件进行分析,通常将目标题化为线性的目标函数和约束条件进行分析,通常将目标函数和约束都是线性表达式的规划问题称为线性规划函数和约束都是线性表达式的规划问题称为线性规划 它的一般形式是:它的一般形式是: 也可以用矩阵形式来表示:也可以用矩阵形式来表示:线性规划的可行解是满足约束条件的解;线性规划线性规划的可行解是满足约束条件的解;线性规划的最优解是使目标函数达到最优的可行解的最优解是使目标函数达到最优的可行解线性规划关于解的情况可以是:线性规划关于解的情况可以是:1、无可行解,即不存在满足约束条件的解;、无可行解,即不存在满足约束条件的解;2、有唯一最优解,即在可行解中有唯一的最有解;、有唯一最优解,即在可行解中有唯一的最有解;4、有可行解,但由于目标函数值无界而无最优解。
有可行解,但由于目标函数值无界而无最优解3、有无穷最优解,即在可行解中有无穷个解都可使目、有无穷最优解,即在可行解中有无穷个解都可使目 标函数达到最优;标函数达到最优; 一般求解线性规划的常用方法是单纯形法和改进一般求解线性规划的常用方法是单纯形法和改进的单纯形法,这类方法的基本思路是先求得一个可行的单纯形法,这类方法的基本思路是先求得一个可行解,检验是否为最优解;若不是,可用迭代的方法找解,检验是否为最优解;若不是,可用迭代的方法找到另一个更优的可行解,经过有限次迭代后,可以找到另一个更优的可行解,经过有限次迭代后,可以找到可行解中的最优解或者判定无最优解到可行解中的最优解或者判定无最优解 三、内容与步骤:三、内容与步骤:在在Matlab优化工具箱中,优化工具箱中,linprog函数是使用单纯形法求解函数是使用单纯形法求解下述线性规划问题的函数下述线性规划问题的函数它的命令格式为:它的命令格式为:其中:其中:A为约束条件矩阵,为约束条件矩阵,b,c分别为目标函数的系数向量和分别为目标函数的系数向量和约束条件中最右边的数值向量;也可设置解向量的上界约束条件中最右边的数值向量;也可设置解向量的上界vlb和和下界下界vub,,即解向量必须满足即解向量必须满足vlb<=x<=vub;;还可预先设置还可预先设置初始解向量初始解向量x0。
如没有不等式,而只有等式时,如没有不等式,而只有等式时,A=[ ],b=[ ];输出的结果:输出的结果:x表示最优解向量;表示最优解向量;fval表示最优值表示最优值【【例例 1】】 求解线性规划问题:求解线性规划问题: 解:考虑到解:考虑到linprog函数只解决形如函数只解决形如的线性规划所以先要将线性规划的线性规划所以先要将线性规划变为如下形式:变为如下形式:然后建立然后建立M文件如下:文件如下:c=[-3;1;1];A=[1 -2 1;4 -1 -2];b=[11;-3];aeq=[2 0 -1];beq=-1;vlb=[0;0;0];[x,fval]=linprog(c,A,b,aeq,beq,vlb) Matlab程序:程序: ch701.m以以ch701作为文件名保存此作为文件名保存此M文件后,在命令窗口文件后,在命令窗口输入输入ch701后即可得到结果:后即可得到结果:x = 4.0000 1.0000 9.0000同时返回同时返回fval=-2对应到原来的线性规划中即知目标函数的最大值为对应到原来的线性规划中即知目标函数的最大值为2,此时,此时x1=4,x2=1,x3=9。
第二节第二节 无约束规划计算方法无约束规划计算方法一、实验目的一、实验目的1、了解无约束规划问题的求解原理与方法、了解无约束规划问题的求解原理与方法 ;; 2、会用、会用Matlab软件求解无约束规划问题软件求解无约束规划问题 二、实验原理和方法二、实验原理和方法无约束规划问题的解法一般按目标函数的形式分为两大类:无约束规划问题的解法一般按目标函数的形式分为两大类:一类是一元函数的一维搜索法,如黄金分割法、插值法等;一类是一元函数的一维搜索法,如黄金分割法、插值法等;另一类是求解多元函数的下降迭代法另一类是求解多元函数的下降迭代法迭代的基本思想和步骤大致可分为以下四步:迭代的基本思想和步骤大致可分为以下四步: 三、实验内容与步骤三、实验内容与步骤在在Matlab软件中,求解无约束规划的常用命令是:软件中,求解无约束规划的常用命令是: x=fminunc(‘fun’,x0) 其中,其中,fun函数应预先定义到函数应预先定义到M文件中,并设置初始文件中,并设置初始解向量为解向量为x0 【【例例 2】】求解求解取取解:首先建立函数文件解:首先建立函数文件fun702.m 以以fun702为文件名保存此函数文件。
为文件名保存此函数文件 在命令窗口输入:在命令窗口输入: x0=[-2;4];x=fminunc('fun702',x0)结果显示:结果显示: f = -1.0000x = 1.0000 1.0000即极小值为即极小值为-1,是,是x1=1,x2=1时取得Matlab程序:程序: ch702.m【【例例 3】】 解非线性方程组解非线性方程组解:解此非线性方程组等价于求解无约束非线性规划问题:解:解此非线性方程组等价于求解无约束非线性规划问题: 然后建立函数文件然后建立函数文件fun703.m 在命令窗口输入:在命令窗口输入: x0=[0;0];x=fminunc(‘fun703’,x0)结果显示:结果显示: f =5.2979e-011 x =1.0673 0.1392则非线性方程组的解为则非线性方程组的解为x1=1.0673,x2=0.1392 Matlab程序:程序: ch703.m第三节第三节 约束非线性规划计算方法约束非线性规划计算方法 一、实验目的一、实验目的1、、了解约束非线性规划问题的求解原理与方法了解约束非线性规划问题的求解原理与方法;; 2、、会用会用Matlab软件求解约束非线性规划问题。
软件求解约束非线性规划问题 二、实验原理和方法二、实验原理和方法对于约束非线性规划,随着目标函数和约束条件的不同,对于约束非线性规划,随着目标函数和约束条件的不同,解法也不同,一般来说,有两类方法:解法也不同,一般来说,有两类方法:((1)、将约束问题化为无约束问题的求解方法;)、将约束问题化为无约束问题的求解方法;((2)、用线性规划来逼近非线性规划;)、用线性规划来逼近非线性规划; 三、实验内容与步骤三、实验内容与步骤 约束非线性规划的一般形式为:约束非线性规划的一般形式为: 其其中中,,f(x)为为多多元元实实值值函函数数;g(x)为为向向量量函函数数,并并且且f(x),g(x)中中至至少有一个函数是非线性函数的(否则成为线性规划问题)少有一个函数是非线性函数的(否则成为线性规划问题)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)在在Matlab优化工具箱中,优化工具箱中,fmincon函数是用函数是用SQP算法来算法来解决一般的约束非线性规划的函数,它的命令格式为:解决一般的约束非线性规划的函数,它的命令格式为:【【例例 4】】 求解约束非线性规划:求解约束非线性规划: (初值为初值为[1;1])解解: :首先建立一个首先建立一个m文件文件fun7041.mfunction y=fun7041(x)y=-exp(x(1))*x(2)^2*(3-exp(x(1))-x(2)^2); 存储为存储为fun7041.m首先将问题转化为首先将问题转化为matlab要求的格式要求的格式;即求出即求出fun,A,b,Aeq,Beq,X0,Lb,Ub然后建立一个然后建立一个 m文件文件 fun7042.mfunction [c,cep]=fun7042(x)c=[]; % c为非线性不等式为非线性不等式,且为且为c<=0cep=exp(x(1))+x(2)^2-3; % cep为为非线性等式非线性等式然后存储为然后存储为fun7042.m最后在命令窗口中输入:A=[];b=[];Aeq=[];Beq=[];Lb=[];Ub=[];[x,f]=fmincon(‘fun7041’,[1;1],[],[],[],[],[],[],’fun7042’)-f因题目中有非线性约束条件,所以建立非线性约束因题目中有非线性约束条件,所以建立非线性约束m-文件。
文件Matlab程序:程序: ch704.m结果为:x = 0.8852 0.7592f = 6.2043e-016ans= - 6.2043e-016最后的结果为: - 6.2043e-016【【例例 5】】 求解约束非线性规划:求解约束非线性规划: 解:首先建立一个解:首先建立一个m文件文件 fun705.mfunction y=fun705(x)y=(x(1)-1)^2+(x(2)-2)^2+(x(3)-3)^2+(x(4)-4)^2;存储为存储为fun705.m文件文件.x0=[1;1;1;1];A=[1 1 1 1;3 3 2 1];B=[5;10];Aeq=[];Beq=[];Lb=[0;0;0;0];[x,g]=fmincon(‘fun705’,x0,A,B,Aeq,Beq,Lb)答案为:x = 0.0000 0.6667 1.6665 2.6668g = 6.3333Matlab程序:程序: ch705.m。
