Рисование значений из нормального распределения для использования в симуляции Монте-Карло - PullRequest
0 голосов
/ 20 ноября 2018

Я определил функцию, в которой вывод производится с помощью симуляции Монте-Карло.Когда я делаю вызов y(p,m,n,d), вывод всегда остается одинаковым "n" -> y = n

Что я делаю не так?

k = [0, 100]

for i in k:
    p = np.random.normal(40,3,i)
    m = np.random.normal(35,1,i)
    n = np.random.normal(50,4,i)
    d = np.random.normal(27,2.5,i)


def fct(p,m,n,d):
    global u1
    global u2
    if np.any( n > 0):
        return n
    u1, u2 = np.asarray[np.log(0.6*n)], np.asarray[(math.e**d)**0.5]
    if np.any(u1 != 0):
        return u1
    if np.any(u2 != 0):
        return u2
    if np.any( p > 0):
        return p    
    G = np.log(p**2) + np.asarray(6*[math.e**(-m)]/u1) + 3/u2
    return G

y = fct(p,m,n,d)    

1 Ответ

0 голосов
/ 20 ноября 2018

Вы всегда используете этот случай:

 if np.any( n > 0):
    return n

Это происходит из-за того, как вы определяете n:

n = np.random.normal(50,4,i)

Среднее значение равно 50, а стандартное отклонение равно 4Таким образом, у вас есть диапазон от 46 до 54, который будет содержать только положительные значения.

...