当标准差是另一个量的函数时,如何计算正态分布?
How to calculate normal distribution when its standard deviation is a function of another quantity?
最近在看一篇论文。其中粒子速度均值,mu = 0 和标准偏差,sigma = b/D^2,其中 D 是粒子的直径,b = 11000 um^2 是拟合参数。逆相关性允许较小的粒子具有较高的初始速度。还给出了颗粒的平均直径和标准偏差分别为 132 um 和 45 um。因此,根据这些信息,我尝试了以下
import numpy as np
da = 132*1e-06 # mean diameter
sd = 45*1e-06 # standard deviation in particle size
b = 11000*1e-12 # 11000 um^2
d = np.random.normal(da, sd, 100) # 100 randomly choosen particles
def norm(mu, sigma, x):
return 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (x - mu)**2 / (2 * sigma**2))
v = np.array([norm(0, b/(i**2), i) for i in d])
但是最终的速度分布对我来说是相反的。较大的粒子具有较高的速度。
我不清楚你希望从这个函数调用中得到什么。这是确定性值的 closed-form 计算,而不是正态分布的随机事件。
def norm(mu, sigma, x):
return 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (x - mu)**2 / (2 * sigma**2))
norm(0, b/(i**2), i)
我认为关键点是表达式(x - mu)**2
;您似乎已将每个粒子的直径用作其 Z-score。相反,您需要为每个粒子提取一个随机值,并使用 that 作为 Z-score。 built-in normal
函数会为你做这件事。例如.
v = np.array([np.random.normal(0, b/(i**2), 1) for i in d])
最近在看一篇论文。其中粒子速度均值,mu = 0 和标准偏差,sigma = b/D^2,其中 D 是粒子的直径,b = 11000 um^2 是拟合参数。逆相关性允许较小的粒子具有较高的初始速度。还给出了颗粒的平均直径和标准偏差分别为 132 um 和 45 um。因此,根据这些信息,我尝试了以下
import numpy as np
da = 132*1e-06 # mean diameter
sd = 45*1e-06 # standard deviation in particle size
b = 11000*1e-12 # 11000 um^2
d = np.random.normal(da, sd, 100) # 100 randomly choosen particles
def norm(mu, sigma, x):
return 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (x - mu)**2 / (2 * sigma**2))
v = np.array([norm(0, b/(i**2), i) for i in d])
但是最终的速度分布对我来说是相反的。较大的粒子具有较高的速度。
我不清楚你希望从这个函数调用中得到什么。这是确定性值的 closed-form 计算,而不是正态分布的随机事件。
def norm(mu, sigma, x):
return 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (x - mu)**2 / (2 * sigma**2))
norm(0, b/(i**2), i)
我认为关键点是表达式(x - mu)**2
;您似乎已将每个粒子的直径用作其 Z-score。相反,您需要为每个粒子提取一个随机值,并使用 that 作为 Z-score。 built-in normal
函数会为你做这件事。例如.
v = np.array([np.random.normal(0, b/(i**2), 1) for i in d])