|
发表于 2017-3-17 21:31:05
|
首先说明:最终答案都会淹没在浮点误差的海洋中…
大刘书里所说的“进化算法”按照其说明其实是遗传算法,这里先不讨论,因为我们的目的是模拟移动过程而非求解稳态,这里用不上。
那么仿真需要什么数据?首先假设球体密度均匀(或者是质心在球心)。如果能够有个可符号计算的计算式,那么三体问题就成了可解问题。因此我们对计算中的积分只能简单粗暴地用尽可能小的时间片段做近似,认为在一个极短的时间片段内三球至少受力无变化,仅位置速度变化。这个仿真需要的参赛有:
* 初始位置
* 初始速度
* 球体质量
* 球体半径(判断碰撞)
* 时间
由于计算机仿真其实都是离散的,因此最重要的参数之一时间只能离散计算。假设我们使用的浮点数为64位浮点,其中有52位为小数计数,11位为10进制指数,1位是符号位,则精确度也就1/2^52=1/4,503,599,627,370,496。为了方便估(tou)算(lan),就看做5e-15的精度咯…于是迭代起来最小时间间隔就这个数了。
这个误差有什么影响?由于这个玩意是个混沌模型,每次引入误差都会极大的改变结果;并且由于实际上的连续运动被离散了,无限状态也变成了有限状态,因而只能断言:这个仿真只在不太长(天文学尺度)范围内有一定准确度。随着时间增加,误差将会指数上涨,也就失去了仿真的意义。
可以预言的是,在这样的仿真里,无论任何初值条件,最终都会落到三个球撞到一起这个稳态中去,只是时间问题罢了。因为这是能量最低的稳态,其余任何稳态最终都会在误差作用下跳出局部极值范围。
我知道光说不给程序不好…可是我真的很懒。如果很多人关心真跑起来会怎样这种蛋疼的问题,我可以写一个小程序,丢到sae之类的玩意上给大家看看结果;感兴趣的人不多就还是容许我偷个懒吧! |
|