MATLAB定量决策五大类问题
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 MATLAB求解

1.4.1 案例1的求解

根据所建立的数学模型,调用自编MATLAB函数程序Ch1 FZDJ求解。编写脚本文件(命名:Case1 1),文件源码的具体内容如下。

          clc,clear% 清除命令窗口,清除工作空间
          % 设定原始数据
          F = -[zeros(1,4)200];Aeq = [];Beq = [];
          A =[95460;789100;-8-6-9-74;-6-7-5-93];B =[40060000];
          LB = zeros(1,5)';UB = inf* ones(1,5)';
          % 求解
          [x,min_fval] = Ch1_FZDJ(F,A,B,Aeq,Beq,LB,UB);
          % 输出结果
          fprintf('1.各车间的开工次数与最大配套数为: \n')
          disp('    车间一    车间二    车间三    车间四    配套数'),disp(x')
          fprintf('2.最大利润为: '),disp(-min_fval)

在MATLAB命令窗口中执行Case1 1,所得结果如图1-5所示。

图1-5 案例1的求解结果

由图1-5所示的求解结果可知,当车间1开工17次,车间2开工13次,车间3开工34次,车间7开工7次时,可得到最大的配套数为142套。在此生产方案下,可获得的最大利润为28400 (28400=142 × 200)元。

1.4.2 案例2的求解

根据所建立的数学模型,调用MATLAB中的fmincon函数求解。编写脚本文件(命名:Case1 2),文件源码的具体内容如下。

          clc,clear% 清除命令窗口,清除工作空间
          % (1)设定数据
          xini =[2 3 3];A = [];B = [];Aeq = [];Beq = [];LB = zeros(1,2);UB = [];
          % (2)求解并输出结果
          options = optimset('Algorithm','interior-point');
          [x,fval] = fmincon(@ Case1_2ob,xini,A,B,Aeq,Beq,LB,UB,@ Case1_2con,op-
          tions);
          fprintf('1.自变量的解为: \n')
          disp('     x1       x2       x3')
          disp(x)
          fprintf('2.最小的总成本为: % f \n',fval)

其中,目标函数和约束条件源码的具体内容如下。

          % 目标函数
          f = 40* sqrt(x(3)^2-0.25* (x(2)-x(1))^2)* (x(1)+x(2))+30* x(1)^2;
          % 非线性不等式约束
          C =[6* sqrt(x(3)^2-0.25* (x(2)-x(1))^2)* (x(2)+x(1))+2* x(1)^2-56; -x
              (3)+(sqrt(2)/2)* (x(2)-x(1))];
          % 非线性等式约束
          Ceq = sqrt(x(3)^2-0.5* (x(2)-x(1))^2)* (x(1)^2+x(1)* x(2)+x(2)^2)-30;

在MATLAB命令窗口中执行Case1 2,所得结果如图1-6所示。

图1-6 案例2的求解结果

由图1-6所示的求解结果可知,最小的总成本为468.89元,容器的小底面边长为2.407 m,敞口边长为3.344 m,侧面长为1.370 m。不过,求解结果截面显示这里求得的总成本最小值只是局部最小值。这是因为,在目标函数和约束所满足的缺省值误差内,目标函数在可行域内是非递减的。

根据此解,可以设计容器的单个侧面,示意图如图1-7所示。

图1-7 敞口容器的单个侧面设计示意图