matlab第二次实验报告
- 格式:doc
- 大小:596.50 KB
- 文档页数:16
《数学建模实验》上机实验报告
班级:计算机35班
学号:2130505099
姓名:田博文
【实验一】
一上底面半径2米、下底面半径4米、高4米的圆台形水池内盛满了水,由池底一横截面积为0.001平方米的小孔放水。求在任意时刻的水面高度和将水放空所需的时间。
一、问题分析:
在dt很小一段时间内,水的流速v可以看成是不变的与水面高度h有关的函数,即v=gh
2;
在dt时间内流出的水量,可以近似的为一圆柱,
对应的圆柱高为dh;
由于容器下降的水量与流出的水量相等,令小孔面积为b,
即dV=π2r dh=bvdt;
可得dh与dt的关系为:dh=bvdt/(π2r);
根据相似三角形原理可得,
r=4-h/2;
初始条件有;
h(0)=4;
为表示方便,引入变量L=4-h
故r=2+L/2
二、代码:
T=0;
for L=0:0.001:4-0.001 %选取积分微元为0.001,即dh
V=0.001*pi*(2+(1/2*L))^2; %水面处的dV,b=0.001
t=V/(sqrt(2*(4-L)*9.8)*0.001) %dV与dt关系
T=T+t;
plot(T,(4-L),'red'); hold on
end
三、运行结果:
四、结论:
在任意时刻的水面高度和将水放空所需的时间如上图红线所示,横轴为时间,纵轴为水面高度。
【实验二】
有A、B、C三个场地,每一个场地都出产一定数量的原料,同时也消耗一定数量的产品,具体数据如下表所示。已知制成每吨产品需要消耗3吨原料,A、B两地,A、C两地和B、C两地之间的距离分别为150千米、100千米和200千米,假设每万吨原料运输1千米的运费为5000元,每万吨产品运输1千米的运费为6000元。由于地区条件的差异,在不同地区设厂的费用不同,由于条件的限制,在B处建厂的规模不能超过5万吨,问:在这三地如何建厂、规模建多大才能使得总费用最小?
地点年产原料(万
吨)
年销产品(万吨)生产费用(万元/万吨)
A 20 7 150
B 16 13 120
C 24 0 100
一、问题分析:
设nij为i地运往j地的原料量,mij为i地运往j地的产品量,设A地为1地,B 为2地,C地为3地。因制成每吨产品需要消耗3吨原料故设A、B、C三地生产规模分别为a、b、c 。
a=(n21+n31)/3,
b=(n12+n32)/3,
c=(n13+n23)/3,
约束条件为:
n12+n13==20,
n21+n23==16,
n31+n32==24, %年产原料
m21+m31==7,
m12+m32==13,
m13+m23==0, %年销产品
b<=5, %B处建厂规模不能超过5万吨
a==m12+m13,
b==m21+m23,
c==m31+m32, %保证三地原料无浪费
生产费用:
150a+120b+100c
运输原料费用:
0.5[150(n12+n21)+200(n23+n32)+100(n13+n31)]
运输产品费用:
0.6[150(m12+m21)+200(m23+m32)+100(m13+m31)] 可用矩阵实现
二、代码:
c=[75 75 50 50 100 100 150 240 210 120 160 220]; a=[1 -1 1 -1 0 0 3 3 0 0 0 0
-1 1 0 0 1 -1 0 0 3 3 0 0
0 0 -1 1 -1 1 0 0 0 0 3 3
0 0 0 0 0 0 0 0 1 1 0 0];
b=[20;16;24;5];
aeq=[0 0 0 0 0 0 0 0 1 0 1 0
0 0 0 0 0 0 0 1 0 1 0 1];
beq=[7;13];
vlb=zeros(12,1);
[x,final]=linprog(c,a,b,aeq,beq,vlb,[])
三、运行结果:
四、结论:
总方案为:A地生产7万吨,B地生产5万吨,C地生产8万吨,
总费用为:3485万元
【实验三】
27个立方形空盒排成3×3×3的三位列阵。如果三个盒子在同一条水平线上,或同一条垂直线上,或同一条对角线上,则认为三盒一线。这样的线共有49条:水平线18条,垂直线9条,水平面对角线6条,垂直面对角线12条,对角面对角线4条。现有白球13个,黑球14个,每个盒子中放入一个球,如何投放,使有单一色球的线数最少?
一、问题分析:
每个立方体按顺序编号,成为数组。要想表示单一色球,则盒中装白球置0,黑球置1,如此一来,一条线上均为单一色球则可表示为此线上三个立方体对应值为0或3。
引入函数,功能为算出每种投放方法对应的单一色球的线数。计算机模拟所有情况,最终比较得出单一色球线数最少的数组取值。则可得到白球黑球投放方案。
二、代码:(参考网络资源,自己编译的没通过……)
#include
int f(int x,int num)
{
if(x==0)
num=num+1;
else if(x==3)
num=num+1;
return num ;
}
int main()
{
int s=49;
int a[30],b[30];
for(int n1=1;n1<=14;n1++)
for(int n2=n1+1;n2<=15;n2++)
for(int n3=n2+1;n3<=16;n3++)
for(int n4=n3+1;n4<=17;n4++)
for(int n5=n4+1;n5<=18;n5++)
for(int n6=n5+1;n6<=19;n6++)
for(int n7=n6+1;n7<=20;n7++)
for(int n8=n7+1;n8<=21;n8++)
for(int n9=n8+1;n9<=22;n9++)
for(int n10=n9+1;n10<=23;n10++)
for(int n11=n10+1;n11<=24;n11++)
for(int n12=n11+1;n12<=25;n12++)
for(int n13=n12+1;n13<=26;n13++)
for(int n14=n13+1;n14<=27;n14++) { for(int l=1;l<=27;l++)
a[l]=0;
a[n1]=1;
a[n2]=1;