簡體   English   中英

3D 球坐標系中的隨機游走-Python

[英]Random Walk in a 3D spherical coordinates system-Python

我目前正在嘗試 map 並顯示光子從太陽中心到到達表面並發射的路徑。 我還想展示發生這種情況所花費的時間。

到目前為止,我所做的只是設置參數(太陽的密度、湯普森橫截面、electron 的質量、質子的質量)並使用這些參數我能夠找到光子在太陽中的平均自由路徑。 我知道我將不得不設置某種數組,並為每個隨機游走創建隨機數。 我不知道如何進行隨機游走,以便光子可以在 x、y 或 z 值的任何方向上 go。

我也不知道我應該循環什么來創建這個隨機游走。 我需要它,以便當 d 等於或大於太陽的半徑時隨機游走將停止。 我知道 d=l*sqrt(N),其中 l 是每一步的平均大小,或平均自由路徑,N 是所走的步數。

最后,我不知道從哪里開始繪制結果。 我想展示一個光子從中心穿過球體的 animation,該球體類似於太陽。

以下是我迄今為止唯一的代碼,任何幫助將不勝感激。

from random import random, seed, randint
import numpy as np
import matplotlib.pyplot as plt

N=100000
rho=1408.6 #the mass density of the sun
thompson=6.65*10**-29 #Thompson cross-section for an electro 
proton=1.67*10**-27 #mass of a proton
electron=9.11*10**-31 #mass of an electron
radius=6.9634*10**8 #radius of a sun
c=2.99*10**8

mfp=(electron+proton)/(rho*thompson*np.sqrt(2))
timestep=mfp/c

你腦子里有偽代碼。 只需轉換為方程式。

對於 3d 中的隨機游走,我能想到的最簡單的方法是,不是讓光子向任何方向移動,而是在每一步調用一個隨機數來決定它將向哪個方向移動(x、y 或 z)以及哪個方向方向(正或負)。 以簡單的形式,像這樣。

import numpy as np

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

mfp = 1
num_steps=10000

walks = [[0,0,0]]
for step in range(num_steps):
    walk = np.zeros(3)
    move_in_direct = np.random.choice(3)
    move_pos_or_neg = np.random.choice([-1,1])
    walk[move_in_direct] = move_pos_or_neg*mfp
    walks.append(np.array(walks[-1])+walk)

walks = np.transpose(walks)

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(*walks, label='parametric curve')
ax.legend()
plt.show()

嘗試理解它並改進/適應它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM