#python #distribution
#python #дистрибутив
Вопрос:
Я хотел бы выбрать соответствующее значение из дистрибутива
Мой дистрибутив следует усеченному распределению Леви
x = [(r r0)**(-a)] * exp(−r/κ)
Функция
def levy(r0, a, k, r):
return (r r0)**(-a)*exp(-r/k)
Я хотел бы для заданного случайного числа x
найти относительное r
.
Например
r0 = 100
a = 2
k = 1500
import random
x = random.uniform(0, 1)
### Write a function to find r given x
Комментарии:
1. Знаете ли вы, что поиск в O (N) может подразумевать недетерминированное количество шагов? Я рекомендую просто написать обратную математическую функцию.
2. @Atterson проблема в том, чтобы найти обратную такую функцию
3. Абсолютно. Но найдите математика, он напишет это в кратчайшие сроки. mathematica.stackexchange.com
4. Есть ли какая-то причина, по которой вы не можете использовать обратный CDF сбора, найденного в Википедии ?
5. Для чего будет использоваться range
r
? [0… бесконечность] ?
Ответ №1:
Вообще говоря, то, что вы хотите, это:
- напишите кумулятивную функцию, F
- напишите его обратное значение, F_inv
- запустите F_inv(x). Это даст вам случайные числа из вашего дистрибутива.
Если вы не можете выполнить первый шаг аналитически (), вы можете, по крайней мере, выполнить его численно с некоторым заданным разрешением, чтобы не застрять с чем-то недетерминированным.