2016-11-27 3 views
0

Вопрос Python Я работаю над запросами на создание биномиальной функции, принимает четыре ввода, последний из которых был истинным/ложным. если true возвращает cdf и true по умолчанию. если false возвращает pmf. это то, что я получил до сих пор. Кто-нибудь посоветует мне, как закончить код?Выход биномиального распределения CDF/PMF с использованием Python

def binomial_distribution(x,n,p,cum): 
    """ 
    Computes the probability of having x successes out of n trials. 
    Each trial has a probability of success p 
    """ 
    nCx = combination(n,x) 
    q = 1-p 
    return nCx*(p**x)*(q**(n-x)) 
+2

Что не так с тем, что у вас есть до сих пор? –

ответ

0

Вот код, который требуется. Ниже приводятся следующие примечания:

def factorial(n): 
    if n == 0: return 1 
    factrl = n 
    while n > 2: 
     n -= 1 
     factrl = factrl * n 
    return factrl 

def combination(n, x): 
    return factorial(n)/(factorial(x)*factorial(n-x)) 

def binomial_distribution(x,n,p,cum = True): 
    """ 
    Computes the probability of having x successes out of n trials. 
    Each trial has a probability of success p 
    """ 
    nCx = combination(n,x) 
    q = 1-p 

    #What helps is a conditional return statement as below 
    if cum: return bin_cdf(x, n, p) 
    else: return nCx*(p**x)*(q**(n-x)) 

def bin_cdf(x, n, p): 
    cumul = 0.0 
    while x > 0: 
     print(x) 
     cumul += binomial_distribution(x, n, p, False) #Sums using formula 
     #This kind of recursion is not only possible but encouraged 
     x -= 1 
    return cumul 

Результаты подтверждены с помощью калькулятора третьей стороны. Также обратите внимание, что он не обрабатывает ошибки. Хорошие программы также проверить, если входные значения также действительны (например, что n всегда больше, чем x и p является соответствующее значение вероятности в диапазоне [0,1])

Смежные вопросы