Что ж, вот простая реализация для запуска и повозки с
import math
import random
def BoxMuller():
r1 = random.random()
r2 = random.random()
a = 2.0 * math.pi * r1
v = math.sqrt( -2.0*math.log(1.0 - r2))
return (v * math.sin(a), v * math.cos(a))
g1, g2 = BoxMuller()
q = 900.0 + g1*2.0
...
ОБНОВЛЕНИЕ
Очевидно, что дано FWHM, а не std.dev.Чтобы получить сигму, нужно разделить FWHM на 2*sqrt(2*log(2))
~ 2.355.Таким образом, код выборки должен быть
FWHM = 2.0
q = 900.0 + g1 * FWHM/2.355