版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、问题1.教材P18,第4题,要求 A,B不在岸边,连线不与河流垂直,具体数据由各人自定。问题分析:设A、B之间的距离是r,AB连线与B到河岸垂线的夹角是,B到河岸的垂直距离是,河的宽度是b,地下铺设电缆一千米的费用是,水下铺设一千米的费用是,铺设电缆的总费用是s。如图,假设铺设路径是ADCB,其中,、是河岸上的两个点。可知,总费用s的表达式是,v1=2;v2=4;a=1;r=4;p=Pi/6;b=1;z=v1(Sqrtx x+a a+Sqrt(r Sinp-y)2+(r Cosp-a-b)2)+v2 Sqrt(x-y)2+b bFindMinimumz,x,0,2,y, 0,2运行结果:问题2
2、:圆台水位随时间流出曲线及流完所用时间的计算机仿真,具体数据,上底半径1米,下底半径2米,高4米,下底流水口横截面积0.001平方米.问题分析:此题和书上的例题很类似,用微分方程很容易得出结果。用仿真的方法可以在一小段时间内算出水的高度,直到圆柱内部水的高度为0为止,逐点画出圆台内的水位。求水流完的时间t的MATLAB程序代码如下:B=0.001;r=1;h=4;dt=0.01;t=0;g=9.8;while(h>=0) s=3.14*r*r; dh=B/s*sqrt(2*g*h)*dt; h=h-dh; r=r+0.25*dh; t=t+dt;endt运行结果: 8.1327e+003
3、仿真法所得的水位图代码:B=0.001;r=1;h=zeros(1,8000);h(1)=4;g=9.8;for k=1:8000 s=3.14*r*r; dh=B/s*sqrt(2*g*h(k)*dt; h(k+1)=h(k)-dh; r=r+0.25*dh;endh;k=1:8001;plot(k,h)运行结果:总结:此题很简单,只需一个微分方程即可解决。问题3随机库存上机问题(用计算机仿真方法) 某企业对于某种材料的月需求量为随机变量,具有如下表概率分布: 需求量(吨)50607080901001101200.100.200.150.250.050.100.100.05每次订货费为500
4、元,每月每吨保管费为50元,每月每吨货物缺货费为1500元,每吨材料的购价为1000元。该企业欲采用周期性盘点的策略来控制库存量,求最佳的,值。(注:策略指的是若发现存货量少于s时立即订货,将存货补充到S,使得经济效益最佳。)问题分析;我们假设这个企业能够长生存并持续使用(s,S)策略,由于整个过程远远大于每个月的时间,且每月的需求量都是整十的数,故为简单起见s与S均可取做整十的数,由题目的条件我们做出如下的假设:1. 企业只在每月初进货,中途来不及进货。2. s,S均为整十的数。3. 企业是否进货只依赖于上月月末剩货量与s的大小关系。4. 企业货物存量最大为S。5. 每月的需求量是随机的。建
5、立模型:设rested为上月剩余存货量,s为周期性盘点中的s,ss为周期性盘点中的S,到月初进货时进行判断,若rested<s,则产生进货行为,这时rested变为S,再计算本月花费总额:先产生随机数,再由概率得到本月的需求量need,比较rested和need的大小,产生存货费用或者缺货费用。得到本月的剩余存货量然后进入下一个月,如此循环。由于need由系统随机产生,所以循环次数越大结果越准确,我取month为10000,求出该公司在10000月中产生的平均费用。我们让s从30到70,S从80到140,分别查看各种策略下费用情况,从而筛选出最好的s与S(从题目来看这样的s与S取值范围很
6、合适)。下面是程序的流程图: 随机库存问题的流程图用mathematica做出的程序如下:rested=0;(*rest是前一个月剩余的存货量*)need=0;(*need是本月需求量*)cost=0;(*所花费用总量*)Fors=30,s<=70,s=s+10, Forss=80,ss<=140,ss=ss+10, Formonth=1,month<=10000,month+, (*计算出本月的需求量*)n=Random; Ifn<=0.1,need=50,Ifn<=0.3,need=60, Ifn<=0.45,need=70, Ifn<=0.7,n
7、eed=80, Ifn<=0.75,need=90, Ifn<=0.85,need=100, Ifn<=0.95,need=110,Ifn<=1,need=120 (*计算所花的总费用*) Ifrested<s,cost=cost+(ss-rested)*1000+500; Ifss<need,cost=cost+(need-ss)*1500;rested=0,cost=cost+(ss-need)*50; rested=ss-need, Ifrested<need,cost=cost+(need-rested)*1500;rested=0,cost=
8、cost+(rested-need)*50;rested=rested-need; ; cost=Ncost/10000; Print"s=", s, " ss=", ss, "时 ", "10000个月平均每月花费为 ", cost, "元" cost=0; 运行结果:s= 30 ss= 80 时 10000个月平均每月花费为 85713.2 元 s= 30 ss= 90 时 10000个月平均每月花费为 87402.5 元 s= 30 ss= 100 时 10000个月平均每月花费为 869
9、13.5 元 s= 30 ss= 110 时 10000个月平均每月花费为 87978.4 元 s= 30 ss= 120 时 10000个月平均每月花费为 86799.5 元 s= 30 ss= 130 时 10000个月平均每月花费为 86751. 元 s= 30 ss= 140 时 10000个月平均每月花费为 86050.8 元 s= 40 ss= 80 时 10000个月平均每月花费为 83871.5 元 s= 40 ss= 90 时 10000个月平均每月花费为 83938.9 元 s= 40 ss= 100 时 10000个月平均每月花费为 85441. 元 s= 40 ss=
10、110 时 10000个月平均每月花费为 85005.4 元 s= 40 ss= 120 时 10000个月平均每月花费为 86170.6 元 s= 40 ss= 130 时 10000个月平均每月花费为 84862.4 元 s= 40 ss= 140 时 10000个月平均每月花费为 84878.7 元 s= 50 ss= 80 时 10000个月平均每月花费为 83411.9 元 s= 50 ss= 90 时 10000个月平均每月花费为 82575.1 元 s= 50 ss= 100 时 10000个月平均每月花费为 82630.9 元 s= 50 ss= 110 时 10000个月平均
11、每月花费为 83485. 元 s= 50 ss= 120 时 10000个月平均每月花费为 84167.8 元 s= 50 ss= 130 时 10000个月平均每月花费为 84870. 元 s= 50 ss= 140 时 10000个月平均每月花费为 83934. 元 s= 60 ss= 80 时 10000个月平均每月花费为 84115.4 元 s= 60 ss= 90 时 10000个月平均每月花费为 82657.6 元 s= 60 ss= 100 时 10000个月平均每月花费为 81950.9 元 s= 60 ss= 110 时 10000个月平均每月花费为 81965.7 元 s=
12、 60 ss= 120 时 10000个月平均每月花费为 82492.6 元 s= 60 ss= 130 时 10000个月平均每月花费为 83317.2 元 s= 60 ss= 140 时 10000个月平均每月花费为 84595. 元 s= 70 ss= 80 时 10000个月平均每月花费为 83749.8 元 s= 70 ss= 90 时 10000个月平均每月花费为 82381.7 元 s= 70 ss= 100 时 10000个月平均每月花费为 81715.8 元 s= 70 ss= 110 时 10000个月平均每月花费为 81555.9 元 s= 70 ss= 120 时 10
13、000个月平均每月花费为 82099.1 元 s= 70 ss= 130 时 10000个月平均每月花费为 82266.6 元 s= 70 ss= 140 时 10000个月平均每月花费为 83033.2 元结论:从上面的结果我们可以看到s= 60 ss= 100 ;s= 60 ss= 110 ;s= 70 ss= 100 ;s= 70 ss= 110;这几个策略所得到的平均费用相差不大,但是s= 70 ss= 110略胜一筹,在经过反复的运行比较后,结果亦是如此,限于篇幅未能粘贴出其他的结果。所以当这个企业采用(70,110)时,用于货物管理的花费达到最小,经济效益达到最高。问题4教材p15
14、8,第一题如下图所示,27个立方形空盒排成3×3×3的三位列阵。如果三个盒子在同一条水平线上,或同一条垂直线上,或同一条对角线上,则认为三盒一线。这样的线共有49条:水平线18条,垂直线9条,水平面对角线6条,垂直面对角线12条,对角面对角线4条。现有白球13个,黑球14个,每个盒子中放入一个球,求单一色球的最少线数。问题分析:此题看上去似乎无从下手,但是运用计算机我们可以取遍每一种放球方法,然后对每种放球计算出单一色球的线数,选取最小的线数再输出结果。建立模型:首先建立放球模型。我们用数字0和1来表示白球和黑球,对于27个小盒子我先将它从上到下分为三层,第一层以数字19标
15、号,第二层以1018标号,最后一层以1927标号,如果黑球的位置全不确定那么整个放球的情况就被确定,将二十七个盒子看做一个数组,第i个元素值为1时表示此处放入的是黑球,0则表示此处放入的是白球,用for循环则可以得到所有的放球情况。再对每一种情况进行单一色球的线数统计,我的办法是先建立一个单色线函数,再将同线的三个盒子值相加作为函数的参数,当参数为3(此时三个盒子均为黑球)或为0(此时三个盒子均为白球)时,单一色球的线数+1,如此将49个参数(共49条同线盒子)均计算一次,最后得到这一种放球情况的单色线数目。每做完一次后与上次作比较,取较小者存入s,最后输出s即可。C+程序代码如下:#incl
16、ude<iostream>using namespace std;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 a30; /*先将27个小球放入盒中,其中白球13个,黑球14个,白球用数0表示,黑球用数1表示*/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
17、=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;n1
18、3<=26;n13+) for(int n14=n13+1;n14<=27;n14+) /*下面对每种放入的情况计算单一色球的同线盒数目*/ for(int l=1;l<=27;l+) al=0; an1=1;an2=1;an3=1;an4=1;an5=1;an6=1;an7=1;an8=1;an9=1;an10=1;an11=1;an12=1;an13=1;an14=1; /*放球之后的状态*/ int num=0; /*num用来计单色球同线盒数目*/ for(int m1=0;m1<=8;m1+) num=f(a3*m1+1+a3*m1+2+a3*m1+3,num
19、); /*水平横的九个*/ for(int m2=0;m2<=2;m2+) for(int m3=1;m3<=3;m3+) num=f(a9*m2+m3+a9*m2+m3+3+a9*m2+m3+6,num); /*水平竖直的九个*/ for(int m4=1;m4<=3;m4+) for(int m5=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(int m6=0;m6<=2;m6+) num=f(a9*m6+1+a9*m6+5+a9
20、*m6+9,num); num=f(a9*m6+3+a9*m6+5+a9*m6+7,num); /*水平面的对角线,六条*/ for(int m7=0;m7<=4;m7+) if(m7!=2) num=f(a2*m7+1+a14+a27-2*m7,num); /*对角面对角线,四条*/ for(int m8=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(int m9=1;m9<=3;m9+)
21、 num=f(am9+am9+12+am9+24,num); num=f(am9+6+am9+12+am9+18,num); /*垂直面对角线12条*/ if(num<s) s=num; cout<<"单一色球线数最少为 "<<s<<"条"<<endl; return 0;运行结果:结论及体会:在编程中应该容易体会到本题复杂并不是因为题目很难而是那49条线的表示容易让人出错,我就深有体会当时是在最后竖直面对角线上出了点问题导致结果明显有误。对于这道题很让我无语之处便是自己的mathematica程序怎
22、么都没法运行(没有显示错误,但是半小时都算不出来),这让我不得不舍弃了原来的程序转而用c+编程,好在对于这个题来说两者的程序差不多,c+上成功运行出了结果。下面附上mathematica的程序代码(希望老师指正):s=49;(*先将27个小球放入盒中,其中白球13个,黑球14个,白球用数0表示,黑球用数1表示*)Forn1=1,n1<=14,n1+, Forn2=n1+1,n2<=15,n2+, Forn3=n2+1,n3<=16,n3+, Forn4=n3+1,n4<=17,n4+, Forn5=n4+1,n5<=18,n5+, Forn6=n5+1,n6<
23、;=19,n6+, Forn7=n6+1,n7<=20,n7+, Forn8=n7+1,n8<=21,n8+, Forn9=n8+1,n9<=22,n9+, Forn10=n9+1,n10<=23,n10+, Forn11=n10+1,n11<=24,n11+, Forn12=n11+1,n12<=25,n12+, Forn13=n12+1,n13<=26,n13+, Forn14=n13+1,n14<=27,n14+, (*下面对每种放入的情况计算单一色球的同线盒数目*) Forl=1,l<=27,l+,al=0; an1=1;an2=1
24、;an3=1;an4=1;an5=1;an6=1;an7=1; an8=1;an9=1;an10=1;an11=1;an12=1;an13=1;an14=1; (*放球之后的状态*) num=0; (*num用来计单色球同线盒数目*) fx_:=Ifx=3,num=num+1,Ifx=0,num=num+1 ; (*判定是否为单色线的函数*) (*对水平面单色线计数*) Form1=0,m1<=8,m1+,fa3*m1+1+a3*m1+2+a3*m1+3; (*水平横的九个*) Form2=0,m2<=2,m2+,Form3=1,m3<=3,m3+,fa9*m2+m3+a9*
25、m2+m3+3+a9*m2+m3+6; (*水平竖直的九个*) (*对垂直面进行计数*) Form4=1,m4<=3,m4+,Form5=1,m5<=3,m5+,fa(m4-1)*3+m5+a(m4-1)*3+m5+9+a(m4-1)*3+m5+18; (*共九条*) (*水平面的对角线*) Form6=0,m6<=2,m6+,fa9*m6+1+a9*m6+5+a9*m6+9;fa9*m6+3+a9*m6+5+a9*m6+7; (*六条*) (*对角面对角线*) Form7=0,m7<=4,m7+,Ifm7<=2,fa2*m7+1+a14+a27-2*m7; (*
26、四条*) (*垂直面对角线*) Form8=1,m8<=3,m8+,fa(m8-1)*3+1+a(m8-1)*3+11+a(m8-1)*3+21;fa(m8-1)*3+3+a(m8-1)*3+11+a(m8-1)*3+19; Form9=1,m9<=3,m9+,fam9+am9+12+am9+24; fam9+6+am9+12+am9+18; (*与之前的num比较,取较小的一个*) Ifnum<s,s=num; Prints问题5 某厂生产一批弹子锁,每个锁具有n个槽,槽的高度为1,2,3,4中的任意一个,且锁具满足条件:至少有一个相邻槽高之差为3,至少有三个不同的槽高。求
27、一批锁的把数。N从3到8求解。问题分析:此问题如果锁具的槽数是给定的话将会变得很容易,像3、4题一样,我们可以让所有的槽高取遍所有的情况,再对每种情况验证是否符合题目所要求的两个条件:必须有相邻高度差为三的槽高分布。必须至少有三个不同的槽高。若符合这两个条件,我们让能够制造的锁具数目+1,如此反复进行。但是由于槽数n是用户临时输入的,这给编写代码带来一定的难度,我的实现方式是这样的,由于槽数是有上限的(本题为8),不妨将for语句一直写到上线,对于用户的n,我们计算的锁具数目为 : 正常的锁具数目*(4(8-n) ,原因是对每一种能制造的锁具多循环了4(8-n)次,所以得出的结果除以4(8-n
28、)即可得到真正能制造的锁具把数。但是明显可以看出这是以牺牲时间为代价的,即便只需三个循环这个程序仍然会执行八个循环,所以这样处理运行效率很低。而且对于更大的数本程序只能添加更多的循环使得效率更大的降低。按照这个思想mathematica的代码如下:tt=0; (*tt用来计入合格的锁具数目*)n=Input"请输入锁具的槽数,必须为3-8的整数" (*用户自定义的锁具的槽数*) Ifn<3,Print"无效的输入,请输入3-8的整数" n=Input"请输入锁具的槽数,必须为3-8的整数", Ifn>8,Print&quo
29、t;无效的输入,请输入3-8的整数" n=Input"请输入锁具的槽数,必须为3-8的整数" (*检验用户输入是否有效 *) Forh1=1,h1<5,h1+, (*hn为第n个槽的高度 *)Forh2=1,h2<5,h2+,Forh3=1,h3<5,h3+,Forh4=1,h4<5,h4+,Forh5=1,h5<5,h5+,Forh6=1,h6<5,h6+,Forh7=1,h7<5,h7+,Forh8=1,h8<5,h8+, (*生成槽高表hh*) hh=Tablehi,i,n; (*下面验证对于上面每种情况,是否
30、存在相邻槽高差为3*) s=0; (*s用来计相邻槽高差为三的数目*) Forj=1,j<n,j+,IfAbshj-hj+1=3,s=s+1; Ifs>0&&LengthUnionhh>=3,tt+; (*如果存在相邻槽高差为三,则进一步判定是否有三个不同的槽高*) ;tt/4(8-n)运行结果:输入3时 运行结果为 8输入4时 运行结果为 64输入5时 运行结果为 360输入6时 运行结果为 1776输入7时 运行结果为 8216输入8时 运行结果为36640结论及体会:本题的结论无外乎就是上面的结果了。这个题给我的感觉最难之处便是循环的个数依赖于用户提供的
31、n值,这让程序的实现有点困难,而且我的处理应该是最低级的那种,代码运行效率很差,特别是上限很大时所做的无用循环也便得非常多,比如说上限是二十那么用这种方法要写20个循环,即便用户输入3,也必须运行20次循环,效率大打折扣。应该存在一种更简单的方法实现动态的循环。问题6 插值上机作业: 在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,在矩形区域(75,200)*(-50,150)里的哪些地方船要避免进入。 问题分析:由于海域的深度变化近似连续的,所以我们可以利用插值法有给出的数据得到海域深度的近似函数,进而在(75,200)*(-50,150)域内做出水深为5英尺的等深线,借由等深线查看船应该避免进入的地方。下面分别用三种插值法得到相应的等深线。程序代码:clcx=129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5;y=7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5;z=4 8 6 8 6 8 8 9 9 8 8 9 4 9;xi=75:3:200;yi=-50:3:150;figure(1)subplot(1,3,1),z1i=griddata(x,y,z,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年物联网设备管理系统开发合同2篇
- 二零二四年墙体广告租赁合同涵盖广告位更新维护责任3篇
- 2025年房地产项目委托产权登记及过户服务合同3篇
- 二零二五年度卫生间清洁保养服务合同3篇
- 二零二五年房地产物业管理服务委托合同模板3篇
- 2025年度生态环保型建筑材料采购合同3篇
- 二零二五年服装店库存管理师聘用合同样本3篇
- 2025年度网络安全防护技术解决方案定制合同3篇
- 二零二五年度河堤施工环境保护与污染防治合同3篇
- 二零二五年度环保材料买卖合同规范文本2篇
- 农民工工资表格
- 【寒假预习】专题04 阅读理解 20篇 集训-2025年人教版(PEP)六年级英语下册寒假提前学(含答案)
- 2024年突发事件新闻发布与舆论引导合同
- 地方政府信访人员稳控实施方案
- 小红书推广合同范例
- 商业咨询报告范文模板
- 2024年智能监狱安防监控工程合同3篇
- 幼儿园篮球课培训
- AQ 6111-2023个体防护装备安全管理规范知识培训
- 老干工作业务培训
- 基底节脑出血护理查房
评论
0/150
提交评论