Усеченное экспоненциальное распределение Python - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь сгенерировать 3 случайных числа, у которых имеет усеченное экспоненциальное распределение с функцией распределения: F(x) = 1-(math.exp(-(x+100*math.log(1-((1-0.05)** (1/100))))/1.5)), когда x>-100*math.log(1-((1-0.05)**(1/100))).

Проблема в том, что я неполучить представление о том, как установить значения х, когда нет верхней границы.Любые идеи, как получить эти 3 числа математически правильно?

1 Ответ

0 голосов
/ 28 апреля 2019

Я не уверен насчет вашей функции распределения, мне она кажется немного грязной (примечание: (1-0.05) ** (1/100) = (0.95 ** 0.01)), но вы можете использовать систему max-ограниченный как верхняя граница для генерации случайной величины x с использованием random.uniform(), тогда вы можете вычислить F(x), чтобы получить случайное значение, принадлежащее вашему распределению.Это можно сделать следующим образом:

import sys
import math 
import random 

def F(x):
    return 1-(math.exp(-(x + 100*math.log(1-(0.95**0.01)))/1.5))

def get_random_value_from_distribution():
    x = random.uniform(-100 * math.log(1- (0.95**0.01)), sys.maxsize)
    y = F(x)
    return y

print("x1:", get_random_value_from_distribution())
print("x2:", get_random_value_from_distribution())
print("x3:", get_random_value_from_distribution())

Примечание. Ваша функция распределения фиксируется на 1 через определенный интервал, поэтому вам необходимо рассмотреть это: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...