用Java模拟芝诺悖论的程序

Posted

技术标签:

【中文标题】用Java模拟芝诺悖论的程序【英文标题】:Program to simulate Zeno's paradox in Java 【发布时间】:2010-11-08 21:11:17 【问题描述】:

所以我在读一本关于某个悖论的书:假设你在一个对面有门的房间里。但是,为了离开,您每次都必须走一半的距离。所以第一步你走一半的距离,第二步你再走一半,依此类推(1/2 + 1/4 + 1/8)等等。声称如果你继续前进,你永远不会到达门口像这样。我想这很容易用微积分来证明,但是在 Java 或任何其他程序中用一个从左侧开始的球来模拟这一点会很有趣,每次通过一半的距离移动到右侧,同时显示到目前为止采取的“步骤”数量及其进度。我很想自己做,但我仍然是 Java 的初学者,不知道 GUI 编程。谁能模拟一下?

(对不起,如果这不是一个“真正的”问题。我真的很好奇需要多少步才能让球看起来几乎就在那里。)

【问题讨论】:

这在微积分中被称为极限。它真的与编程无关。 是的,我已经说过这在微积分中很容易计算。我只是想看看它在视觉上的样子。编程=数学 如果您要否决一个明确提出的善意问题,您应该提出一些建设性的批评,说明您认为该问题不合适的原因。 @Mike Miller,请注意关于询问如何在 Java 中构造它的部分。这显然是一个编程问题。 @fprime:如前所述,当您使用正确的术语时,找到模拟非常容易。例如,我在 Google 中输入“java simulation zenos paradox”后大约 15 秒内发现:mste.illinois.edu/pavel/java/zeno。 【参考方案1】:

看这个情节,它形象化了悖论:

http://www.wolframalpha.com/input/?i=1-1/(2^n)+for+0<n<10

【讨论】:

【参考方案2】:

在你撞到另一扇门之前,你就会遇到人数限制。抽象为:

var Distance=100;
var Traveled=0;
var Remaining=Distance/2

while(Traveled < Distance)
  echo Remaining
  Traveled=Traveled+Remaining
  Remaining=Remaining/2


使用 php 在我的一个机器上运行它会导致.. 50 25 12.5 6.25 3.125 1.5625 0.78125 0.390625 0.1953125 0.09765625 0.048828125 0.0244140625 0.01220703125 0.006103515625 0.0030517578125 0.00152587890625 0.000762939453125 0.0003814697265625 0.00019073486328125 9.5367431640625E-5 4.7683715820312E-5 2.3841857910156E-5 1.1920928955078E-5 5.9604644775391E-6 2.9802322387695E-6 1.4901161193848E-6 7.4505805969238E-7 3.7252902984619E-7 1.862645149231E-7 9.3132257461548E-8 4.6566128730774E-8 2.3283064365387E-8 1.1641532182693E-8 5.8207660913467E-9 2.9103830456734E-9 1.4551915228367E-9 7.2759576141834E-10 3.6379788070917E-10 1.8189894035459E-10 9.0949470177293E-11 4.5474735088646E-11 2.2737367544323E-11 1.1368683772162E-11 5.6843418860808E-12 2.8421709430404E-12 1.4210854715202E-12 7.105427357601E-13 3.5527136788005E-13 1.7763568394003E-13 8.8817841970013E-14 4.4408920985006E-14 2.2204460492503E-14 1.1102230246252E-14 5.5511151231258E-15

【讨论】:

【参考方案3】:

java中的一些数值分析。看看this

【讨论】:

【参考方案4】:

这是Zeno's Paradoxes 之一,这取决于您对“几乎”的定义是什么。从足够远的有利位置看,无论实际距离是多少,它看起来几乎就在那里。

至于执行此操作的程序,您的问题过于广泛 - 它可以通过多种方式实现。关键元素是将球到墙壁的距离更新为前一个“帧”或迭代中的一半。

【讨论】:

【参考方案5】:

如果你想用 C++ 来做,代码如下:

float Distance;

cout << " Enter distance value :" << endl;
cin >> Distance;

while (Distance > 0)
    cout << Distance << endl;
(Distance = Distance /2);



return 0;

【讨论】:

以上是关于用Java模拟芝诺悖论的程序的主要内容,如果未能解决你的问题,请参考以下文章

论芝诺悖论

图解如何击溃芝诺悖论

关于极限分割

数学小课堂:无穷小(以动态的眼光看待世界,理解无限的世界)

论级数

C ++生日悖论程序[重复]