Python 板


LINE

N body simulation 自己也有點興趣所以試著看了一下 import numpy as np #Numpy是科學計算常用的套件,運算量大時會比原生list快 particle = np.random.standard_normal((nParticles, 3)) #三維陣列, 存放 nParticles個球的x,y,z座標 #ex. nParticles = 100 #這邊是用隨機產生的座標 particlev = np.zeros_like(particle) #存放每個球的速度的陣列,形狀跟particle一樣 #初始值為零 def nbody_np(particle, particlev): # NumPy arrays as input ''' 從初始條件開始,計算每個球受的重力 時間軸每次增加0.01,總共跑五次 ''' t0 = time.time(); nSteps = 5; dt = 0.01 particle_result = np.zeros(nParticles,3,nSteps+1) #原本我貼的例子只告訴你花多少時間算 #這裡用particle_result記錄每個時間點的球的位置 particle_log = np.copy(particle) #從起始點開始 for step in range(1, nSteps + 1, 1): Fp = np.zeros((nParticles, 3)) #每個球受的重力 for i in range(nParticles): dp = particle - particle[i] #計算第i個球到每個球之間的距離 #也就是dx, dy, dz drSquared = np.sum(dp ** 2, axis=1) #(dx)^2 + (dy)^2 +(dz)^2 h = drSquared * np.sqrt(drSquared) #原程式錯了 #不是相加而是相乘 #數值運算有解析度問題 #這邊設定重力不能小於10^-10 #至於重力為什麼是1/(r^(3/2)), #是假設重力常數跟所有球的質量都是1 #3/2次方的原因是來自向量方程式 drPowerN32 = 1. / np.maximum(h, 1E-10) Fp += -(dp.T * drPowerN32).T #最後每個球會受到所有球的重力所以要相加 particlev += dt * Fp #球的速度在t+dt後就是原速度+dt*重力 particle_log += particlev * dt particle_result[:,:,step] += particle_log #球的新位置是 原位置+球的速度*dt return particle_result python科學運算原則上能向量化就向量化 除非是用c之類的編譯語言寫否則儘量避免for loop會比較好 向量化之後應該沒有幫每個球取名的必要吧? 至於Nbody simulation如果球不是一個質點的情況 你的運動方程式會更複雜喔,不知道高中物理現在是有沒有這麼難 XD ※ 引述《lefan (紅氣球雯雯)》之銘言: : 謝謝Neisseria大介紹globals函數讓我解決了幫球自動取名的問題 : 但又碰上新的問題, : 我希望在每一個迴圈中,自動把每個球的位置塞入新的list中, : 好讓我可以每個迴圈重新計算球與球間的距離。 : 若不用迴圈我會這樣寫: : b_new_pos_list = [] : b_new_pos_list.append(ball_0.pos) : b_new_pos_list.append(ball_1.pos) : b_new_pos_list.append(ball_2.pos) : b_new_pos_list.append(ball_3.pos) : 相同的,我想利用for loop自動把每個球的位置放入b_new_pos_list中 : 因此我嘗試這樣寫。 : b_new_pos_list=[] : for N in range(0,4,1): : b_new_pos_list.append(ball_N.pos) : 但當然還是不行,因為系統沒辦法自動判斷出ball_N.pos指的就是 : ball_0~3.pos : 再次感謝。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 130.203.95.180
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1453395445.A.6EB.html
1F:推 alen332l: 推 01/22 09:25
2F:推 hsnusonic: 推 01/22 09:54
3F:推 lefan: 感謝。 01/22 10:42







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP