一条可以均匀拉伸无限拉伸的橡皮筋,初始长度为1米,一个累不死的蚂蚁,从橡皮筋的一端爬到另一端,蚂蚁爬行速度为1厘米每秒,橡皮筋拉伸的速度为10厘米每秒!问:蚂蚁可以爬到橡皮的另一端吗?如果可以要用多久的时间!
给人的第一感觉是,蚂蚁不会到达终点,因为它每秒只能爬行1cm,而橡皮筋的伸缩为10cm/s,蚂蚁速度完全赶不上橡皮筋膨胀速度,随着时间消逝,蚂蚁只会离终点越来越远;但再仔细一想,橡皮筋每向前爬行1cm,那么膨胀带给它的影响便小一点,也就是说蚂蚁远离终点的速率会略微小一点;尽管这个影响很小很小,但如果经常很长很长的时间后呢?会不会使得蚂蚁所在点的质点膨胀速度小于蚂蚁的速度?也就是会开始朝着终点移动,离终点越来越近?有没有这种可能呢?
有点感觉像极限。
首先推公式推了半天,都没推出啥东西来!
我想,经过时间t后,蚂蚁爬行t后达到位置x(假设x为蚂蚁距离终点的长度),此刻在位置x的速度应该为
1(蚂蚁本身速度) - ( x/(100+10*t) ) * 10 ( 蚂蚁所在质点相对终点的膨胀速度)
列出公式就是
(啊,这个写错了,下面是100+10t...阿弥陀佛......)
化简一下就是这样子:
这下子没折了,不知道咋办了,傻眼了。
又推了一些,好像没啥用。于是想用matlab模拟了一下。
还是蛮简单。就是一步一步的模拟蚂蚁与橡皮筋的移动。
跑了一下,蚂蚁果然可以达到终点。 下面是速度的效果图。
很明显可以看到,蚂蚁相对终点的速度首先是负的,速率逐渐减小,越过边界0,然后又逐渐增大。显然,如果速度能够超过0,那么蚂蚁是能够到达终点的。蚂蚁相对终点的距离图如下:
下面是修改蚂蚁速度,橡皮筋膨胀速度,和橡皮筋长度后的速度图和距离图。具体就不解释了。
对比起来很明显了:
蚂蚁相对速率像一个log函数
蚂蚁相对终点距离像一个二次函数
如果蚂蚁速度越大,蚂蚁相对速率越过0边界时间越短,最终花费时间总时间也越短;
橡皮筋膨胀速度越大,蚂蚁相对速率越过0边界时间越短,最终花费时间越长。
橡皮长度越长。。。也一样
感觉:曲线变化速度对蚂蚁速度最敏感,橡皮筋膨胀速度次之,橡皮筋长度再次之;也就是说蚂蚁速度是最重要的。微小的增加蚂蚁速度可以显著的减少到达终点的时间。
没理论推导。
根据这几个对比图,可以估计出 速度 与 距离 函数么?晚了,睡觉了。明天再想想看。
参数:橡皮筋长度100cm,橡皮筋膨胀速度10cm/s,改变蚂蚁速度
参数:橡皮筋长度100cm,蚂蚁速度2cm/s,改变橡皮筋膨胀速度
参数:橡皮筋膨胀速度10cm/s,蚂蚁速度2cm/s,改变橡皮筋膨胀速度
matlab模拟代码(Matlab7.01),可以跑来试试。
- % 一条可以均匀拉伸无限拉伸的橡皮筋,初始长度为1米,一个累不死的蚂蚁,从
- % 橡皮筋的一端爬到另一端,蚂蚁爬行速度为1厘米每秒,橡皮筋拉伸的速度为10
- % 厘米每秒!问:蚂蚁可以爬到橡皮的另一端吗?如果可以要用多久的时间!
- % ants.m
- iniLen = 100; % 橡皮筋初始长度为1米
- iniSS = 10; % 橡皮筋拉伸的速度为10厘米每秒
- as = 1; % 蚂蚁爬行速度
- x = iniLen; % 橡皮筋长度 = 初始长度 + 拉伸速度 * 时间
- y = iniLen; % 蚂蚁距离终点长度
- v = 0; % 蚂蚁 即时速度
- pLen = 2000;
- im = zeros(1,pLen);
- vm = zeros(1,pLen);
- ym = zeros(1,pLen);
- sec = 0;
- index = 1;
- for i = 1:500000 % 模拟秒数
- div = 10000; % 模拟将1s划分的片段
- for j = 1:div
- dt = 1.000 / div; % 模拟时间片
- ev = ( y / x ) * iniSS; % 蚂蚁所在质点膨胀速度
- v = as - ev; % 蚂蚁相对终点速度
- y = y - v * dt; % 更新蚂蚁距离终点长度
- x = x + dt*iniSS; % 更新橡皮筋长度
- end
- tmp = mod(i,100);
- if( tmp == 0 || y < 1 )
- im(index) = i;
- vm(index) = v;
- ym(index) = y;
- index = index+1;
- end
-
- if( y < 0 ) % 蚂蚁已越过终点
- sec = i-1
- break;
- elseif( y == 0 ) % 蚂蚁恰好到达终点
- sec = i
- break;
- end
- end
- im(find(im==0))=[];
- vm(find(vm==0))=[];
- ym(find(ym==0))=[];
- figure(1),
- grid on,hold on,
- plot(im,vm,'r-');
- xlabel(strcat('秒数(橡皮拉伸速度=',num2str(iniSS),'cm/s, 蚂蚁速度=',num2str(as),'cm/s, 费时',num2str(sec),'s)'));
- ylabel('蚂蚁相对终点速度');
- legend('蚂蚁相对终点速度');
- plot(im,zeros(1,length(im)),'m-');
- figure(2),
- grid on,hold on,
- plot(im,ym,'b-');
- plot(im,zeros(1,length(im)),'m-');
- xlabel(strcat('秒数(橡皮拉伸速度=',num2str(iniSS),'cm/s, 蚂蚁速度=',num2str(as),'cm/s, 费时',num2str(sec),'s)'));
- ylabel('蚂蚁相对终点距离');
- legend('蚂蚁相对终点距离');
分享到:
相关推荐
蚂蚁爬杆问题 A.B.C三只蚂蚁不同速度在一个杆上爬行,求蚂蚁爬出杆的时间问题
一只蚂蚁,或多只蚂蚁在一条线上爬行的时候,会相遇,发生反向的情况。
用面向对象的思维方式解决蚂蚁爬杆问题,并将其过程进行可视化。
蚂蚁爬杆自己写的,希望大神能够帮助我写代码的质量,有什么问题随便提出来,自己一定会改正的谢谢
动态演示蚂蚁爬杆行为,一共有32中选择,每一种选择都有不同的情况;
用java实现的蚂蚁爬行问题 有界面 5只蚂蚁从一根杆子上的5个初始位置爬行,方向随机,相遇则回头,计算最大时间和最小时间
某企业面试编程题:蚂蚁爬杆 有一根300厘米的细木杆,在第30厘米、80厘米、110厘米、160厘米、250厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会...
一道“蚂蚁爬杆题目与分析”的题目,可以用对象的分析方法来解决,初学对象的人很有帮助
一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒。当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置。 程序给出...
有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。 木杆很细,不能同时通过一只蚂蚁。 开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。 当...
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当...
小班体育游戏活动教案《蚂蚁爬爬爬》润新教育.txt
一个小游戏,计算各种可能情形下所有蚂蚁都离开木杆的最小时间和最大时间。
有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。 * 木杆很细,不能同时通过一只蚂蚁。 * 开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。...
蚂蚁课堂一期,分布式微服务系列课程,整套视频加文档。
专题训练蚂蚁爬行的最短路径含答案.doc
用蚂蚁算法解决多目标TSP问题,对多目标进行深入探讨,
专题训练蚂蚁爬行的最短路径(含答案).doc