数学建模实验报告
- 格式: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