随机三体

目前来说我们并不关心真实的物理对象,而只想看一下三个随机的点放在三个随机的位置,赋予三个随机的速度,那么这三个点会怎么走。所以其初始化过程为

import numpy as np
m,x,y,u,v = [np.random.rand(3) for _ in range(5)]

其中,m, x, y, u, v分别表示质量,x轴位置,y轴位置,x轴速度,y轴速度。得到三个随机的运动为

在这里插入图片描述在这里插入图片描述在这里插入图片描述

这几个随机的三体均有一个共同的结局,二体尚存,三体皆四散而去,至于能不能重新相聚,那就很难说了,代码如下,首先导入模块,并设置常量和全局变量

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
from itertools import product

m,x,y,u,v = [np.random.rand(3) for _ in range(5)]
N = 1000
dt = 36000
ts =  np.arange(0,N*dt,dt)/3600/24

然后得到三颗恒星的运动轨迹

xs,ys = [],[]
for _ in ts:
    x_ij = (x-x.reshape(3,1))
    y_ij = (y-y.reshape(3,1))
    r_ij = np.sqrt(x_ij**2+y_ij**2)
    for i,j in product(range(3),range(3)):
    	if i!=j :
    		u[i] += (m[j]*x_ij[i,j]*dt/r_ij[i,j]**3)
    		v[i] += (m[j]*y_ij[i,j]*dt/r_ij[i,j]**3)
    x += u*dt
    y += v*dt
    xs.append(x.tolist())
    ys.append(y.tolist())

xs = np.array(xs)
ys = np.array(ys)

然后绘图

fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(xlim=(-2e11,2e11),ylim=(-2e11,2e11))
ax.grid()

traces = [ax.plot([],[],'-', lw=0.5)[0] for _ in range(3)]
pts = [ax.plot([x[i]],[y[i]] ,marker='o')[0] for i in range(3)]

k_text = ax.text(0.05,0.85,'',transform=ax.transAxes)
textTemplate = 't = %.3f days\n'

def animate(n):
    for i in range(3):
        traces[i].set_data(xs[:n,i],ys[:n,i])
        pts[i].set_data([xs[n,i]],[ys[n,i]])
    k_text.set_text(textTemplate % ts[n])
    return traces[0], traces[1], traces[2], pts[0], pts[1], pts[2], k_text


ani = animation.FuncAnimation(fig, animate, 
    range(N), interval=10, blit=True)

plt.show()
ani.save("3.gif")

多次画图后,并未发现稳定运行的三体,所以从经验来说,随机三体在自然界中应该是很难存在的——毕竟很快就解散了。

三星问题

短时间内稳定的三体还是有很多的,比如比如在高中出镜率极高的三星问题:

即等距等质量三星如何运动?现假设三个质量相同的等距质点,分别给一个随机的速度,看看它们怎么运动。

m = np.ones(3)
r = np.ones(3)
theta = np.arange(3)*np.pi*2/3
x = r*np.cos(theta)
y = r*np.sin(theta)
V = np.random.rand(N)
u = V*np.sin(theta)
v = V*np.cos(theta)
在这里插入图片描述在这里插入图片描述

总之只要看到它们互相靠近,那么结果注定分道扬镳,像极了人生。

如果再让它们速度相等,那么神奇的一幕出现了

在这里插入图片描述在这里插入图片描述

但更神奇的是,只要对速度做出一点点的更改,例如令第三颗星在横轴方向更改 δ \delta δ,则会出现如下场景

δ = 0.001 \delta=0.001 δ=0.001 δ = 0.0001 \delta=0.0001 δ=0.0001
在这里插入图片描述在这里插入图片描述

这就是所谓的蝴蝶效应,初值的一点更改,就会造成不可挽回的巨大后果,这也是动力系统的独特魅力。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐