matlab第二次实验报告.docx

上传人:b****8 文档编号:9948205 上传时间:2023-02-07 格式:DOCX 页数:20 大小:343.29KB
下载 相关 举报
matlab第二次实验报告.docx_第1页
第1页 / 共20页
matlab第二次实验报告.docx_第2页
第2页 / 共20页
matlab第二次实验报告.docx_第3页
第3页 / 共20页
matlab第二次实验报告.docx_第4页
第4页 / 共20页
matlab第二次实验报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

matlab第二次实验报告.docx

《matlab第二次实验报告.docx》由会员分享,可在线阅读,更多相关《matlab第二次实验报告.docx(20页珍藏版)》请在冰豆网上搜索。

matlab第二次实验报告.docx

matlab第二次实验报告

 

《数学建模实验》

上机实验报告

 

班级:

计算机35班

学号:

2130505099

姓名:

田博文

【实验一】

  一上底面半径2米、下底面半径4米、高4米的圆台形水池内盛满了水,由池底一横截面积为0.001平方米的小孔放水。

求在任意时刻的水面高度和将水放空所需的时间。

一、问题分析:

在dt很小一段时间内,水的流速v可以看成是不变的与水面高度h有关的函数,

即v=

在dt时间内流出的水量,可以近似的为一圆柱,

对应的圆柱高为dh;

由于容器下降的水量与流出的水量相等,令小孔面积为b,

即dV=π

dh=bvdt;

可得dh与dt的关系为:

dh=bvdt/(π

);

根据相似三角形原理可得,

r=4-h/2;

初始条件有;

h(0)=4;

为表示方便,引入变量L=4-h

故r=2+L/2

2、代码:

T=0;

forL=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');

holdon

end

3、运行结果:

4、结论:

  在任意时刻的水面高度和将水放空所需的时间如上图红线所示,横轴为时间,纵轴为水面高度。

【实验二】

  有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

1、问题分析:

设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=[75755050100100150240210120160220];

a=[1-11-100330000

-11001-1003300

00-11-11000033

000000001100];

b=[20;16;24;5];

aeq=[000000001010

000000010101];

beq=[7;13];

vlb=zeros(12,1);

[x,final]=linprog(c,a,b,aeq,beq,vlb,[])

3、运行结果:

4、结论:

总方案为:

A地生产7万吨,B地生产5万吨,C地生产8万吨,

总费用为:

3485万元

【实验三】

  27个立方形空盒排成3×3×3的三位列阵。

如果三个盒子在同一条水平线上,或同一条垂直线上,或同一条对角线上,则认为三盒一线。

这样的线共有49条:

水平线18条,垂直线9条,水平面对角线6条,垂直面对角线12条,对角面对角线4条。

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

1、问题分析:

每个立方体按顺序编号,成为数组。

要想表示单一色球,则盒中装白球置0,黑球置1,如此一来,一条线上均为单一色球则可表示为此线上三个立方体对应值为0或3。

引入函数,功能为算出每种投放方法对应的单一色球的线数。

计算机模拟所有情况,最终比较得出单一色球线数最少的数组取值。

则可得到白球黑球投放方案。

二、代码:

(参考网络资源,自己编译的没通过……)

#include

intf(intx,intnum)

{

if(x==0)

num=num+1;

elseif(x==3)

num=num+1;

returnnum;

}

intmain()

{

ints=49;

inta[30],b[30];

for(intn1=1;n1<=14;n1++)

for(intn2=n1+1;n2<=15;n2++)

for(intn3=n2+1;n3<=16;n3++)

for(intn4=n3+1;n4<=17;n4++)

for(intn5=n4+1;n5<=18;n5++)

for(intn6=n5+1;n6<=19;n6++)

for(intn7=n6+1;n7<=20;n7++)

for(intn8=n7+1;n8<=21;n8++)

for(intn9=n8+1;n9<=22;n9++)

for(intn10=n9+1;n10<=23;n10++)

for(intn11=n10+1;n11<=24;n11++)

for(intn12=n11+1;n12<=25;n12++)

for(intn13=n12+1;n13<=26;n13++)

for(intn14=n13+1;n14<=27;n14++)

{for(intl=1;l<=27;l++)

a[l]=0;

a[n1]=1;

a[n2]=1;

a[n3]=1;

a[n4]=1;

a[n5]=1;

a[n6]=1;

a[n7]=1;

a[n8]=1;

a[n9]=1;

a[n10]=1;

a[n11]=1;

a[n12]=1;

a[n13]=1;

a[n14]=1;

intnum=0;

for(intm1=0;m1<=8;m1++)

num=f(a[3*m1+1]+a[3*m1+2]+a[3*m1+3],num);

for(intm2=0;m2<=2;m2++)

for(intm3=1;m3<=3;m3++)

num=f(a[9*m2+m3]+a[9*m2+m3+3]+a[9*m2+m3+6],num);

for(intm4=1;m4<=3;m4++)

for(intm5=1;m5<=3;m5++)

num=f(a[(m4-1)*3+m5]+a[(m4-1)*3+m5+9]+a[(m4-1)*3+m5+18],num];

for(intm6=0;m6<=2;m6++)

{num=f(a[9*m6+1]+a[9*m6+5]+a[9*m6+9],num);

num=f(a[9*m6+3]+a[9*m6+5]+a[9*m6+7],num);}

for(intm7=0;m7<=4;m7++)

if(m7!

=2)

num=f(a[2*m7+1]+a[14]+a[27-2*m7],num);

for(intm8=1;m8<=3;m8++){num=f(a[(m8-1)*3+1]+a[(m8-1)*3+11]+a[(m8-1)*3+21],num);num=f(a[(m8-1)*3+3]+a[(m8-1)*3+11]+a[(m8-1)*3+19],num);}

for(intm9=1;m9<=3;m9++){

num=f(a[m9]+a[m9+12]+a[m9+24],num);

num=f(a[m9+6]+a[m9+12]+a[m9+18],num);}

if(num

{s=num;

for(intn=1;n<28;n++)

b[n]=a[n];}

}

cout<<"小方格编号<

cout<<"放球颜色"<

for(intn=1;n<28;n++)

{

cout<

if(b[n]==1)

cout<<"黑"<

else

cout<<"白"<

}

cout<<"当按以上的方式放球时,单一色球线数最少,最少为"<

return0;

}

3、运行结果:

(没运行出来,参考网上资料得到的结果)

【实验四】

  某工厂生产一种弹子锁具,每个锁具有n个槽,每个槽的高度为{1,2,3,4},中之一数,限制至少有一个相邻的槽高之差等于3,且至少有3个不同的槽高,每个槽的高度取遍这4个数且满足上面这两个限制时生产出一批锁。

求一批锁的把数。

1、问题分析:

由于n未知,不同的n锁的数量也不同。

用计算机模拟的方法,在循环中将不符合限制条件的除去,累计总数。

2、代码:

n=5时,代码如下:

s=0;m=4;

forj1=1:

m

forj2=1:

m

forj3=1:

m

forj4=1:

m

forj5=1:

m

a1=j1;a2=j2;a3=j3;a4=j4;a5=j5;

amax=max([a1,a2,a3,a4,a5]');

amin=min([a1,a2,a3,a4,a5]');

numbers=(amax-a1)*(a1-amin)+(amax-a2)*(a2-amin)+(amax-a3)*(a3-amin)+(amax-a4)*(a4-amin)+(amax-a5)*(a5-amin);

t=max([abs(a1-a2),abs(a2-a3),abs(a3-a4),abs(a4-a5)]');

ifnumbers>0.5

ift==3

s=s+1;

end

end

end

end

end

end

end

s

n=7时,代码如下:

s=0;m=4;

forj1=1:

m

forj2=1:

m

forj3=1:

m

forj4=1:

m

forj5=1:

m

forj6=1:

m

forj7=1:

m

a1=j1;a2=j2;a3=j3;a4=j4;a5=j5;a6=j6;a7=j7;

amax=max([a1,a2,a3,a4,a5,a6,a7]');

amin=min([a1,a2,a3,a4,a5,a6,a7]');

numbers=(amax-a1)*(a1-amin)+(amax-a2)*(a2-amin)+(amax-a3)*(a3-amin)+(amax-a4)*(a4-amin)+(amax-a5)*(a5-amin)+(amax-a6)*(a6-amin)+(amax-a7)*(a7-amin);

t=max([abs(a1-a2),abs(a2-a3),abs(a3-a4),abs(a4-a5),abs(a5-a6),abs(a6-a7)]');

ifnumbers>0.5

ift==3

s=s+1;

end

end

end

end

end

end

end

end

end

s

 

三、运行结果:

4、结论:

以5、7为例,n=5时,有360把;n=7时,有8216把。

【实验五】

  在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深

度为5英尺,在矩形区域(75,200)*(-50,150)里的哪些地方船要避免进入。

x

y

z

129140103.588185.5195105

7.5141.52314722.5137.585.5

4868688

x

y

z

157.5107.57781162162117.5

-6.5-81356.5-66.584-33.5

9988949

1、问题分析:

因为数据不够完备,所以为了能合理完整地补全数据,采取插值拟合法。

第一步,输入基点数据;

第二步,采用三次插值法在矩形区域(75,200)*(-50,150)里做二维插值;

第三步,作出海底曲面图; 

第四步,作出z=5的等高线。

2、代码:

x=[129140103.588185.5195105.5157.5107.57781162162117.5];

y=[7.5141.52314722.5137.585.5-6.5-81356.5-66.584-33.5];

z=[-4-8-6-8-6-8-8-9-9-8-8-9-4-9];

cx=75:

0.5:

200;

cy=-50:

0.5:

150;

cz=griddata(x,y,z,cx,cy','cubic')

subplot(1,2,1),meshz(cx,cy,cz)

xlabel('x'),ylabel('y'),zlabel('z')

subplot(1,2,2),[c,h]=contour(cx,cy,cz);

clabel(c,h,-5)

3、运行结果:

4、结论:

  在矩形区域(75,200)×(-50,150)里如上图等高线-5m内(即<-5m)的地方船要避免进入。

 

【心得体会】

通过多次练习,我深刻体会到数学建模属于一门应用数学,学习这门课要求我们学会如何将实际问题经过分析、简化转化为个数学问题,然后用适用的数学方法去解决。

需要经历提出模型,验证模型,修改模型,完善模型等步骤最终达到解决问题的目的。

其中遇到的困难多样,需要很灵活地处理,因此编程能力、语言功底都很重要。

Mathematica和Matlab都可以实现某个方案,不同之处在于对不同的问题,处理的方法繁琐程度不一样。

软件掌握多少都不算多,类似的软件还有MathCAD、Maple等,关键在处理具体问题的时候那种软件更适合,或者那种软件处理问题普遍性强,而Mathematica和Matlab分别代表了符号计算和数据处理(或者数值计算)的两个方面普遍适用的软件。

个人感觉Mathematica符号计算强,便于公式推导和函数式制图。

Mathematica界面的窗口和菜单栏是分离式的,便于边计算边对照查看文档,其公式可以复制为公式格式,可直接粘贴于Word等文本中,也便于以公式的形式输入,但该功能在大量符号计算中可能作用不大,编写代码的执行效率肯定比手动输入公式要高的多。

输入和输出都是在同一个界面,便于查看每条代码的结果。

函数使用方式丰富,调用函数可以编写专门的文件,也可直接在输入界面中调用。

可把想到的代码都写成函数的形式,包括各种形式的代码,便于调用。

将所有的算法最终转化为表达式,以函数的形式体现。

例如绘图将表达式的变量范围指定即可,便于函数制图。

Matlab很强大,处理什么都比较得心应手,是款很好的数学式编程工具与计算工具,修改编辑很方便,但体积比较大。

Mathematica个人感觉侧重于图像处理,尤其那些多边形,多维空间制图,曲面等很实用,而且软件体积比较少,运行速度快,是款和MATLAB相辅相成的好工具。

通过以上,我自认为较好的解决方案是数据处理用Matlab,然后将数据导入Mathematica可视化处理。

符号计算就是Mathematica了。

以后还需多进行实验,体会Mathematica的功能。

要想真正能够解决问题,思路只是基础,还有很多能力必须具备才能实现需要。

以后应将c语言等与建模软件更好的结合起来,实现更强大的功能。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1