五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

從零開始數(shù)值模擬三體問題||Python(For新手)

2021-04-18 10:05 作者:湮滅的末影狐  | 我要投稿

//最近試著自學(xué)了python對初值問題的數(shù)值模擬。

//原理也非常簡單,把微分方程近似為差分方程,然后用循環(huán)語句計算質(zhì)點位置的變化。

//本程序基于python的xlrd,numpy,matplotlib,mpl_toolkits.mplot3D庫實現(xiàn)。

//xlrd可以從excel導(dǎo)入數(shù)據(jù),numpy處理向量運算,matplotlib和mpl_toolkits繪制圖像。

0. 理論基礎(chǔ)

三體系統(tǒng)是著名的混沌系統(tǒng),三個質(zhì)點僅受萬有引力作用而產(chǎn)生復(fù)雜的運動,且決定系統(tǒng)運動的微分方程無法求得解析解,只能數(shù)值求解。同時,系統(tǒng)的后續(xù)運動對初值高度敏感,隨著時間推移數(shù)值近似的解誤差也越來越大。雖然對混沌系統(tǒng)的詳細研究相當(dāng)復(fù)雜,有包括龐加萊截面法、功率譜分析法、分形維數(shù)、李雅普諾夫指數(shù)等刻畫混沌現(xiàn)象的方法,但不影響我們基于基本的微分方程對該系統(tǒng)進行簡單的數(shù)值模擬。

設(shè)三個星體質(zhì)量分別為m_1%2Cm_2%2Cm_3,位置用矢量%5Cvec%20r_1%2C%5Cvec%20r_2%2C%5Cvec%20r_3表示。三體系統(tǒng)的微分方程如下:

m_1%5Cfrac%7B%5Cmathrm%7Bd%7D%5E2%20%5Cvec%20r_1%7D%7B%5Cmathrm%7Bd%7D%20t%5E2%7D%3D%5Cfrac%7BGm_1m_2%7D%7B%7C%5Cvec%20r_1-%5Cvec%20r_2%7C%5E2%7D%5Chat%20r_%7B12%7D%20%2B%5Cfrac%7BGm_1m_3%7D%7B%7C%5Cvec%20r_1-%5Cvec%20r_3%7C%5E2%7D%5Chat%20r_%7B13%7D%20

m_2%5Cfrac%7B%5Cmathrm%7Bd%7D%5E2%20%5Cvec%20r_2%7D%7B%5Cmathrm%7Bd%7D%20t%5E2%7D%3D%5Cfrac%7BGm_1m_2%7D%7B%7C%5Cvec%20r_1-%5Cvec%20r_2%7C%5E2%7D%5Chat%20r_%7B21%7D%20%2B%5Cfrac%7BGm_2m_3%7D%7B%7C%5Cvec%20r_2-%5Cvec%20r_3%7C%5E2%7D%5Chat%20r_%7B23%7D%20

m_3%5Cfrac%7B%5Cmathrm%7Bd%7D%5E2%20%5Cvec%20r_3%7D%7B%5Cmathrm%7Bd%7D%20t%5E2%7D%3D%5Cfrac%7BGm_2m_3%7D%7B%7C%5Cvec%20r_2-%5Cvec%20r_3%7C%5E2%7D%5Chat%20r_%7B32%7D%20%2B%5Cfrac%7BGm_1m_3%7D%7B%7C%5Cvec%20r_1-%5Cvec%20r_3%7C%5E2%7D%5Chat%20r_%7B31%7D%20

在現(xiàn)實中萬有引力屬于相對微弱的作用力(相對其他基本力),因此引力的作用也通常是質(zhì)量極大的天體在相當(dāng)長的時間里相互作用得以體現(xiàn)(相對地球上的日常而言)。所以這個模型中我們簡單起見直接令G%3D1,所有量綱相關(guān)的討論都不考慮。

作為數(shù)值模擬的需要,我們將微分方程化為差分方程,以1質(zhì)點為例:

受力

%5Cvec%20F%3D%5Cfrac%7Bm_1m_2%7D%7B%7C%5Cvec%20r_1-%5Cvec%20r_2%7C%5E2%7D%5Chat%20r_%7B12%7D%20%2B%5Cfrac%7Bm_1m_3%7D%7B%7C%5Cvec%20r_1-%5Cvec%20r_3%7C%5E2%7D%5Chat%20r_%7B13%7D%20

變速

%5Cvec%20v_%7B1%2Ci%2B1%7D%3D%5Cvec%20v_%7B1%2Ci%7D%2B%5Cfrac%20%7B%5Cvec%20F%7D%7Bm_1%7D%5CDelta%20t

位移

%5Cvec%20r_%7B1%2Ci%2B1%7D%3D%5Cvec%20r_%7B1%2Ci%7D%2B%5Cvec%20v_%7B1%2Ci%7D%5CDelta%20t

其中%5CDelta%20t是程序中設(shè)定的一個很小的時間間隔。越小則誤差越小,但計算量越大。

I. 準備工作

開始之前你需要確認你的python裝有前面提到的xlrd,numpy,matplotlib,mpl_toolkits幾個庫。如果你使用的IDE是Anaconda,這些包都是自帶的,不需要額外安裝。關(guān)于其他如Pycharm, Visual Studio等環(huán)境我也不是很了解,但總之如果你缺少某個包(例如numpy),只要在命令行中運行以下命令:

系統(tǒng)就會自動從網(wǎng)絡(luò)上搜索相關(guān)庫并安裝。確認所有需要的庫都安裝后就可以開始了!

II. 開始編程

①包與數(shù)據(jù)導(dǎo)入

我們首先在程序中導(dǎo)入所有需要的庫:

由于本系統(tǒng)需要的初始條件高達21個(每個質(zhì)點的質(zhì)量、初始位置三個分量、初速度三個分量),我們?nèi)绻胕nput()命令在程序運行時逐個輸入麻煩且不直觀,我們選擇把初值寫在excel文件中并利用xlrd包導(dǎo)入。首先找一個地方創(chuàng)建一個Excel文件DataInput.xlsx,例如在D盤的文檔中。Python文件中利用以下命令:

就可以將數(shù)據(jù)來源指定為DataInput.xlsx的sheet1。在excel中,按如圖方式將三個質(zhì)點的質(zhì)量、初位置、初速度寫入,保存。(你可以根據(jù)自己的喜好指定初始值,圖中的數(shù)據(jù)僅供參考)

初值設(shè)置界面

接下來我們將這些數(shù)據(jù)存儲在變量m, 數(shù)組r,v中,作為后續(xù)計算的準備工作:

注意雖然我們的數(shù)據(jù)是從第2行第2列開始的,但代碼中是從(1,1)開始導(dǎo)入數(shù)據(jù)的,這是因為大部分編程語言中數(shù)組或類似結(jié)構(gòu)下標都默認從0開始,下標要注意減1.

② 計算準備

我們需要準備九個空列表存放各個質(zhì)點坐標隨時間的變化:

設(shè)置%5CDelta%20t和總步數(shù):

創(chuàng)建一個三維圖,用于可視化結(jié)果:

我們定義幾個函數(shù),求點間的施力:

四個函數(shù)的功能分別是:輸入兩個位置返回距離;輸入距離和質(zhì)量返回引力大小;輸入兩個位置返回連接它們的單位矢量(以數(shù)組形式);調(diào)用引力大小和單位矢量函數(shù)返回引力矢量(數(shù)組形式)。其中,調(diào)用了numpy中的數(shù)學(xué)、數(shù)組運算函數(shù)。

接下來,定義兩個void函數(shù),用于進行質(zhì)點的移動和受力改變速度:

③ 計算

準備工作都做好了,現(xiàn)在只需要一次循環(huán)語句完成所有計算即可。

④ 繪圖

所有數(shù)據(jù)的計算都完成了,接下來就簡單了,以下命令將幾個質(zhì)點的軌跡繪制在前面定義的三維圖中:

最后輸入預(yù)覽命令

我們就會成功看到前面的封面圖片了!

預(yù)覽窗口

可以看到,確實很混沌。

如果你希望保存這個圖片,即可以直接在預(yù)覽窗口上點擊保存,也可以用命令

來保存這個結(jié)果。

那么以上就是這樣一個新手向的Python數(shù)值計算筆記了。當(dāng)然本人也只是Python初學(xué)者,偶爾用它來數(shù)據(jù)分析,這個程序可能沒有寫出最簡潔高效的代碼,如果你有更好的方法也歡迎指出。

從零開始數(shù)值模擬三體問題||Python(For新手)的評論 (共 條)

分享到微博請遵守國家法律
绥中县| 东城区| 澎湖县| 文山县| 新源县| 方山县| 平乡县| 墨竹工卡县| 乌兰县| 泽州县| 全椒县| 宿松县| 灵宝市| 和硕县| 工布江达县| 顺义区| 富源县| 安康市| 湖北省| 岫岩| 平顶山市| 卢龙县| 上高县| 忻州市| 革吉县| 兴业县| 中宁县| 偏关县| 旌德县| 剑川县| 两当县| 桓仁| 焦作市| 姜堰市| 鹤庆县| 前郭尔| 揭阳市| 正蓝旗| 松潘县| 彝良县| 汽车|