Python動(dòng)力系統(tǒng)驗(yàn)證三體人是否真的存在
隨機(jī)三體
目前來說我們并不關(guān)心真實(shí)的物理對(duì)象,而只想看一下三個(gè)隨機(jī)的點(diǎn)放在三個(gè)隨機(jī)的位置,賦予三個(gè)隨機(jī)的速度,那么這三個(gè)點(diǎn)會(huì)怎么走。所以其初始化過程為
m = np.random.rand(3) x = np.random.rand(3) y = np.random.rand(3) u = np.random.rand(3) v = np.random.rand(3)
得到三個(gè)隨機(jī)的運(yùn)動(dòng)為



這幾個(gè)隨機(jī)的三體均有一個(gè)共同的結(jié)局,二體尚存,三體皆四散而去,至于能不能重新相聚,那就很難說了,代碼為
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
m = np.random.rand(3)
x = np.random.rand(3)
y = np.random.rand(3)
u = np.random.rand(3)
v = np.random.rand(3)
fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(xlim=(-2e11,2e11),ylim=(-2e11,2e11))
ax.grid()
trace0, = ax.plot([],[],'-', lw=0.5)
trace1, = ax.plot([],[],'-', lw=0.5)
trace2, = ax.plot([],[],'-', lw=0.5)
pt0, = ax.plot([x[0]],[y[0]] ,marker='o')
pt1, = ax.plot([x[0]],[y[0]] ,marker='o')
pt2, = ax.plot([x[0]],[y[0]] ,marker='o')
k_text = ax.text(0.05,0.85,'',transform=ax.transAxes)
textTemplate = 't = %.3f days\n'
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 in range(3):
for j in 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)
def animate(n):
trace0.set_data(xs[:n,0],ys[:n,0])
trace1.set_data(xs[:n,1],ys[:n,1])
trace2.set_data(xs[:n,2],ys[:n,2])
pt0.set_data([xs[n,0]],[ys[n,0]])
pt1.set_data([xs[n,1]],[ys[n,1]])
pt2.set_data([xs[n,2]],[ys[n,2]])
k_text.set_text(textTemplate % ts[n])
return trace0, trace1, trace2, pt0, pt1, pt2, k_text
ani = animation.FuncAnimation(fig, animate,
range(N), interval=10, blit=True)
plt.show()
ani.save("3.gif")
經(jīng)過多次畫圖,基本上沒發(fā)現(xiàn)能夠穩(wěn)定運(yùn)行的三體,所以從經(jīng)驗(yàn)來說,隨機(jī)三體在自然界中應(yīng)該是很難存在的——畢竟很快就解散了。
三星問題
短時(shí)間內(nèi)穩(wěn)定的三體還是有很多的,比如比如在高中出鏡率極高的三星問題:
即等距等質(zhì)量三星如何運(yùn)動(dòng)?現(xiàn)假設(shè)三個(gè)質(zhì)量相同的等距質(zhì)點(diǎn),分別給一個(gè)隨機(jī)的速度,看看它們?cè)趺催\(yùn)動(dòng)。
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)


總之只要看到它們互相靠近,那么結(jié)果注定分道揚(yáng)鑣,像極了人生。
如果再讓它們速度相等,那么神奇的一幕出現(xiàn)了


但更神奇的是,只要對(duì)速度做出一點(diǎn)點(diǎn)的更改,例如令第三顆星在橫軸方向更改 δ ,則會(huì)出現(xiàn)如下場(chǎng)景

δ=0.0001

這就是所謂的蝴蝶效應(yīng),初值的一點(diǎn)更改,就會(huì)造成不可挽回的巨大后果,這也是動(dòng)力系統(tǒng)的獨(dú)特魅力。
以上就是Python動(dòng)力系統(tǒng)驗(yàn)證三體人是否真的存在的詳細(xì)內(nèi)容,更多關(guān)于Python驗(yàn)證三體人是否存在的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python 的第三方調(diào)試庫 ???pysnooper?? 使用示例
這篇文章主要介紹了Python 的第三方調(diào)試庫 ???pysnooper?? 使用示例的相關(guān)資料,需要的朋友可以參考下2023-02-02
python實(shí)現(xiàn)高斯(Gauss)迭代法的例子
今天小編就為大家分享一篇python實(shí)現(xiàn)高斯(Gauss)迭代法的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python子進(jìn)程subpocess原理及用法解析
這篇文章主要介紹了Python子進(jìn)程subpocess原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
在pytorch中動(dòng)態(tài)調(diào)整優(yōu)化器的學(xué)習(xí)率方式
這篇文章主要介紹了在pytorch中動(dòng)態(tài)調(diào)整優(yōu)化器的學(xué)習(xí)率方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06
基于Python實(shí)現(xiàn)Excel轉(zhuǎn)Markdown表格
Markdown(也簡(jiǎn)稱md)作為一種輕量級(jí)標(biāo)記語言,因其易寫易讀,效果美觀大方,不僅被眾多網(wǎng)站使用,也是程序員們做筆記、寫文檔的首選。本文將利用Python實(shí)現(xiàn)Excel轉(zhuǎn)Markdown表格,感興趣的可以了解一下2022-04-04
Django與pyecharts結(jié)合的實(shí)例代碼
這篇文章主要介紹了Django與pyecharts結(jié)合的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
查看已經(jīng)安裝的python版本和相關(guān)路徑信息的三種方法
Python是一門計(jì)算機(jī)程序編程語言,更是一種面向?qū)ο蟮膭?dòng)態(tài)類型語言,隨著版本的不斷更新和語言新功能的添加,越來越多被用于獨(dú)立的、大型項(xiàng)目的開發(fā),那么如何查看已安裝Python版本和路徑呢?我們通過這篇文章來了解一下2025-03-03

