数学建模实验报告

  • 格式:doc
  • 大小:222.50 KB
  • 文档页数:11

数学建模实验报告

1 一、实验目的

1、通过具体的题目实例,使学生理解数学建模的基本思想和方法,掌握数学建模分析和解决的基本过程。

2、培养学生主动探索、努力进取的的学风,增强学生的应用意识和创新能力,为今后从事科研工作打下初步的基础。

二、 实验题目

(一)题目一

1、题目:电梯问题 有r个人在一楼进入电梯,楼上有n层。设每个乘客在任何一层楼出电梯的概率相同,试建立一个概率模型,求直到电梯中的乘客下完时,电梯需停次数的数学期望。

2、问题分析

(1)由于每位乘客在任何一层楼出电梯的概率相同,且各种可能的情况众多且复杂,难于推导。所以选择采用计算机模拟的方法,求得近似结果。

(2)通过增加试验次数,使近似解越来越接近真实情况。

3、模型建立

建立一个n*r的二维随机矩阵,该矩阵每列元素中只有一个为1,其余都为0,这代表每个乘客在对应的楼层下电梯(因为每个乘客只会在某一层下,故没列只有一个1)。而每行中1的个数代表在该楼层下的乘客的人数。

再建立一个有n个元素的一位数组,数组中只有0和1,其中1代表该层有人下,0代表该层没人下。

例如:

给定n=8;r=6(楼8层,乘了6个人),则建立的二维随机矩阵及与之相关的应建立的一维数组为:

m =

0 0 1 0 0 0

1 0 0 0 0 0

0 0 0 0 0 0

0 1 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 1

0 0 0 0 1 0

0 0 0 1 0 0

c = 1 1 0 1 0 1 1 1

4、解决方法(MATLAB程序代码):

2 n=10;r=10;d=1000;

a=0;

for l=1:d

m=full(sparse(randint(1,r,[1,n]),1:r,1,n,r));

c=zeros(n,1);

for i=1:n

for j=1:r

if m(i,j)==1

c(j)=1;

break;

end

continue;

end

end

s=0;

for x=1:n

if c(x)==1

s=s+1;

end

continue;

end

a=a+s;

end

a/d

5、实验结果

ans = 6.5150 那么,当楼高11层,乘坐10人时,电梯需停次数的数学期望为6.5150。

(二)题目二

1、问题:某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.今工厂共有原料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论:

1)若投资0.8万元可增加原料1千克,问应否作这项投资.

2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划.

2、问题分析

(1)题目中共有3个约束条件,分别来自原料量、工人数与甲饮料产量的限制。

(2)目标函数是求获利最大时的生产分配,应用MATLAB时要转换

3 成求其相反数最小时的生产分配。

(3) 扩展讨论部分只需将模型中部分参数修改即可。

3、模型建立

(1)设定变量:

x(1)表示甲饮料产量,x(2)表示甲饮料产量,z表示总获利。

(2)线性规划模型:

z=10*x(1)+9*x(2)

6*x(1)+5*x(2)<=60

10*x(1)+20*x(2)<=150

x(1)<=8

4、解决方法(MATLAB程序代码)

c=[-10,-9];

A=[6,5;10,20;1,0];

b=[60,150,8];

x=linprog(c,A,b);

x=floor(x);

x

z=10*x(1)+9*x(2);

z

5、实验结果

x =

6

4

z = 96

扩展1)将参数b改为[61,150,8],得到结果为:

x =

6

4

z = 96

投资后,总利润并没有增加,而且花费了投资成本。所以,不应该作这项投资。

扩展2)将参数c改为[-11,-9],得到结果为:

x =

7

2

z = 88

每百箱甲饮料获利增加1万元,若按模型改变生产计划,则总利润反而会减小。所以,不应改变生产计划。

4

(三)题目三

1、问题:27个立方形排成3*3*3的三维阵列。如果三个盒子在同一水平线上,或同一条垂直线上,或同一条对角线上,则认为三盒一线,这样的线共有49条:水平线18条,垂直线9条,水平面对角线6条,垂直面对角线12条,对角面对角线4条。

现有白球13个,黑球14个,每个盒子中放入一球,如何投放,使有单一色球的线数最少?

2、问题分析

(1)题目属于排列组合问题,情况较多且规律性不强,因此难于使用理论推导,故考虑采用计算机模拟。

(2)根据题目信息,找出形成单一色球线的各种情况的一些规律,统计每种情况下单色球线数,并计录比较出最小情况。

3、模型建立

(1)建立一个27个单元的一维向量数组,分别代表27格方格单元,列出49种出现单色线的情况。

(2)建立计数器,记录每种情况下的单色球线数并比较出最少情况

4、解决方法(MATLAB程序)

由于程序较长,此处只给出部分代码。

建立模拟向量及计数器:

a=zeros(1,27);

sum=49;

insert=zeros(1,14);

统计各种情况单色线数:

for i=1:9

temp=linecolor(a(3*i)+a(3*i+1)+a(3*i+2));

if temp>0 templine=templine+1; end

end

for i=1:9:26

for j=1:3

temp=linecolor(a(i)+a(i+3)+a(i+6));

i=i+1;

if temp>0 templine=templine+1; end

end

i=i-3;

end

for i=1:9

5 temp=linecolor(a(i)+a(i+9)+a(i+18));

if temp>0

templine=templine+1; end

end

for i=1:26

temp1=linecolor(a(i)+a(i+4)+a(i+8));

temp2=linecolor(a(i+2)+a(i+4)+a(i+6));

if temp1>0 templine=templine+1; end

if temp2>0 templine=templine+1; end

end

for i=1:3:7

temp1=linecolor(a(i)+a(i+10)+a(i+20));

temp2=linecolor(a(i+2)+a(i+10)+a(i+18));

if temp1>0 templine=templine+1;end

if temp2>0 templine=templine+1;end

end

for i=1:3

temp1=linecolor(a(i)+a(i+12)+a(i+24));

temp2=linecolor(a(i+6)+a(i+12)+a(i+18));

if temp1>0 templine=templine+1;end

if temp2>0 templine=templine+1;end

end

temp1=linecolor(a(0)+a(13)+a(26));

temp2=linecolor(a(8)+a(13)+a(18));

temp3=linecolor(a(2)+a(13)+a(24));

temp4=linecolor(a(6)+a(13)+a(20));

if temp1>0 templine=templine+1;end

if temp2>0 templine=templine+1;end

if temp3>0 templine=templine+1;end

if temp4>0 templine=templine+1;end

子函数:

function r= linecolor(n)

if n==3 || n==0

r=1;

else

r=0;

end

return;

5、实验结果

sum = 4

insert = 1 2 3 5 8 12 15 18 19 21 22 25 27

即最少单色球线数为4条,其中放黑球单元为:1 2 3 5 8 12 15 18