`
kofsky
  • 浏览: 202681 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

蚂蚁爬橡皮筋问题 之一

阅读更多

一条可以均匀拉伸无限拉伸的橡皮筋,初始长度为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米,一个累不死的蚂蚁,从
  2. % 橡皮筋的一端爬到另一端,蚂蚁爬行速度为1厘米每秒,橡皮筋拉伸的速度为10
  3. % 厘米每秒!问:蚂蚁可以爬到橡皮的另一端吗?如果可以要用多久的时间!
  4. % ants.m
  5. iniLen = 100;    % 橡皮筋初始长度为1
  6. iniSS = 10;      % 橡皮筋拉伸的速度为10厘米每秒
  7. as = 1;          % 蚂蚁爬行速度
  8. x = iniLen;      % 橡皮筋长度 = 初始长度 + 拉伸速度 * 时间
  9. y = iniLen;      % 蚂蚁距离终点长度
  10. v = 0;           % 蚂蚁 即时速度
  11. pLen = 2000;
  12. im = zeros(1,pLen);
  13. vm = zeros(1,pLen);
  14. ym = zeros(1,pLen);
  15. sec = 0;
  16. index = 1;
  17. for i = 1:500000 % 模拟秒数
  18.     div = 10000;  % 模拟将1s划分的片段
  19.     for j = 1:div 
  20.         dt = 1.000 / div;       % 模拟时间片
  21.         ev = ( y / x ) * iniSS; % 蚂蚁所在质点膨胀速度
  22.         v = as - ev;            % 蚂蚁相对终点速度
  23.         y = y - v * dt;         % 更新蚂蚁距离终点长度
  24.         x = x + dt*iniSS;       % 更新橡皮筋长度
  25.     end
  26.     tmp = mod(i,100);
  27.     if( tmp == 0 || y < 1 )
  28.         im(index) = i;
  29.         vm(index) = v;
  30.         ym(index) = y;
  31.         index = index+1;
  32.     end
  33.     
  34.     if( y < 0 )      % 蚂蚁已越过终点
  35.         sec = i-1
  36.         break;
  37.     elseif( y == 0 ) % 蚂蚁恰好到达终点
  38.         sec = i
  39.         break;
  40.     end
  41. end
  42. im(find(im==0))=[];
  43. vm(find(vm==0))=[];
  44. ym(find(ym==0))=[];
  45. figure(1),
  46. grid on,hold on,
  47. plot(im,vm,'r-');
  48. xlabel(strcat('秒数(橡皮拉伸速度=',num2str(iniSS),'cm/s, 蚂蚁速度=',num2str(as),'cm/s, 费时',num2str(sec),'s)'));
  49. ylabel('蚂蚁相对终点速度');
  50. legend('蚂蚁相对终点速度');
  51. plot(im,zeros(1,length(im)),'m-');
  52. figure(2),
  53. grid on,hold on,
  54. plot(im,ym,'b-');
  55. plot(im,zeros(1,length(im)),'m-');
  56. xlabel(strcat('秒数(橡皮拉伸速度=',num2str(iniSS),'cm/s, 蚂蚁速度=',num2str(as),'cm/s, 费时',num2str(sec),'s)'));
  57. ylabel('蚂蚁相对终点距离');
  58. legend('蚂蚁相对终点距离');
分享到:
评论

相关推荐

    蚂蚁爬杆问题

    蚂蚁爬杆问题 A.B.C三只蚂蚁不同速度在一个杆上爬行,求蚂蚁爬出杆的时间问题

    蚂蚁爬杆问题(面向对象)

    在本案例中,“蚂蚁爬杆问题”是一个典型的OOP应用场景,我们可以用C#语言来实现。下面我们将详细探讨这个问题以及如何用面向对象的方式去解决它。 首先,我们需要定义一个“蚂蚁”类(Ant),这个类至少包含两个...

    使用C++实现小蚂蚁爬行

    这个问题的核心是通过编程语言模拟蚂蚁在一条线上的运动行为,包括它们的相遇和方向变化。让我们深入探讨这个主题。 首先,我们需要理解问题的基本模型。假设线是一个一维空间,蚂蚁们在这个空间上移动,每个蚂蚁都...

    1蚂蚁爬杆之动态演示

    在这个场景中,“1蚂蚁爬杆之动态演示”是一个项目,它使用编程来模拟蚂蚁爬杆的行为。该项目可能包含32种不同的选择或策略,每种选择都可能导致蚂蚁爬杆的不同结果,这可能是为了展示算法的多样性和复杂性,或者是...

    蚂蚁爬行问题源码

    蚂蚁爬行问题就是一个这样的例子,它源于对真实世界蚂蚁行为的观察,然后通过编程来模拟这种行为。在这个问题中,我们使用Java语言来构建一个具有图形用户界面(GUI)的游戏,模拟5只蚂蚁在一根杆子上随机移动的情景...

    c++蚂蚁爬杆问题

    蚂蚁爬杆自己写的,希望大神能够帮助我写代码的质量,有什么问题随便提出来,自己一定会改正的谢谢

    蚂蚁爬杆+图形界面+C#+ide=vs08

    某企业面试编程题:蚂蚁爬杆 有一根300厘米的细木杆,在第30厘米、80厘米、110厘米、160厘米、250厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会...

    蚂蚁爬杆题目与分析.txt

    通过以上分析和实现,我们可以看到,使用对象的方法来解决“蚂蚁爬杆”这类问题是一种非常有效的方式。它不仅能够清晰地表达问题的关键要素,还能够方便地通过编程语言进行实现。此外,这种解题思路还可以扩展到更多...

    蚂蚁爬杆游戏

    "蚂蚁爬杆游戏"是一款基于C#编程语言开发的小型计算机游戏,其核心玩法是模拟蚂蚁在一根垂直的杆上爬行,目标是计算出所有蚂蚁都安全离开杆子的最短和最长时间。这个游戏涉及到计算机科学中的算法设计、数据结构和...

    蚂蚁与木棍问题仿真

    一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒。当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置。 程序给出...

    蚂蚁爬杆27厘米的细木杆

    有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。 木杆很细,不能同时通过一只蚂蚁。 开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。 当...

    27厘米的细木杆上蚂蚁爬杆

    6. **异常处理**:在程序中,对于蚂蚁爬出木杆的情况,通过设置`hasRemove`标志来终止蚂蚁的移动,并清空当前位置的蚂蚁。 7. **时间复杂度**:由于每秒蚂蚁只能移动一厘米,且每次移动都会检查是否与其他蚂蚁碰撞...

    蚂蚁感冒问题

    每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当...

    蚂蚁问题 C++

    【蚂蚁问题 C++】是一个基于面向对象编程的实践项目,主要目标是模拟蚂蚁寻找食物的行为。在自然界中,蚂蚁通过释放信息素来通信,寻找最短路径到食物源。在这个项目中,我们将学习如何用C++语言来实现这一过程。 ...

    蚂蚁算法解决目标问题

    在本文档中,标题和描述提及了一个特定的算法——蚂蚁算法(Ant Colony Optimization, ACO),以及它在解决多目标旅行商问题(Multi-Objective Traveling Salesman Problem, TSP)上的应用。由于文档部分内容被标记...

    小班体育游戏活动教案《蚂蚁爬爬爬》润新教育.txt

    小班体育游戏活动教案《蚂蚁爬爬爬》润新教育.txt

    蚂蚁的移动速度问题

    这个问题是关于算法设计和模拟的,具体涉及到蚂蚁在一根木棍上移动的场景。题目给出的是百度面试中的一道题目,要求解决所有蚂蚁都离开木棍的最小和最大时间问题。蚂蚁只能向前走或者调头,当两只蚂蚁相遇时,它们会...

    TSP蚂蚁算法一例蚂蚁算法一例蚂蚁算法一例蚂蚁算法一例

    根据给定的文件信息,我们可以深入探讨蚂蚁算法在解决旅行商问题(Traveling Salesman Problem,简称TSP)中的应用,以及如何通过MATLAB实现这一算法。以下是对标题、描述和部分代码内容所涉及的关键知识点的详细...

    蚂蚁学Python之爬虫系列.zip

    蚂蚁学Python之爬虫系列

Global site tag (gtag.js) - Google Analytics