Хорошо, давайте попробуем на простом примере - у вас есть пневматический пистолет, который стреляет шариками с массой m
и скоростью v
.Вы должны измерить кинетическую энергию
E = m * v 2 / 2
Существует распределение скорости - гауссовское со средним значением 10 и стандартным отклонением 1.
Существует распределение масс - но мы не можем сделать гауссовский, давайте предположим, что оно усечено нормально, с нижним пределом 1, так что нет отрицательных значений, с loc
, равным 5, и масштабом, равным 3.
Итак, что мы будем делать - скорость выборки, масса образца, использовать их, чтобы найти кинетическую энергию, сделать это несколько раз, построить распределение энергии, получить среднее значение, получить стандартное отклонение, нарисовать графики и т. Д.
Простой код Python
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import truncnorm
def sampleMass(n, low, high, mu, sigma):
"""
Sample n mass values from truncated normal
"""
tn = truncnorm(low, high, loc=mu, scale=sigma)
return tn.rvs(n)
def sampleVelocity(n, mu, sigma):
return np.random.normal(loc = mu, scale = sigma, size=n)
mass_low = 1.
mass_high = 1000.
mass_mu = 5.
mass_sigma = 3.0
vel_mu = 10.0
vel_sigma = 1.0
nof_trials = 100000
mass = sampleMass(nof_trials, mass_low, mass_high, mass_mu, mass_sigma) # get samples of mass
vel = sampleVelocity(nof_trials, vel_mu, vel_sigma) # get samples of velocity
kinenergy = 0.5 * mass * vel*vel # distribution of kinetic energy
print("Mean value and stddev of the final distribution")
print(np.mean(kinenergy))
print(np.std(kinenergy))
print("Min/max values of the final distribution")
print(np.min(kinenergy))
print(np.max(kinenergy))
# print histogram of the distribution
n, bins, patches = plt.hist(kinenergy, 100, density=True, facecolor='green', alpha=0.75)
plt.xlabel('Energy')
plt.ylabel('Probability')
plt.title('Kinetic energy distribution')
plt.grid(True)
plt.show()
с выводом типа
Mean value and stddev of the final distribution
483.8162951263243
118.34049421853899
Min/max values of the final distribution
128.86671038372
1391.400187563612