1. (poisson1) Se X é uma variável aleatória com distribuição Poisson com parâmetro lambda sua função de probabilidade é
p(x)=exp -lambda lambda^xx!, x=0,1, ldots
Escreva uma função para calcular p(x). Ao implementar, inclua proteções, com mensagens de erro, contra valores fora do espaço paramétrico (lambda) ou suporte (x).

Passo 1

O enunciado pede uma função que calcule a probabilidade de uma variável aleatória Poisson com parâmetro lambda, cuja função de probabilidade é
p(x)=e^-lambda ; lambda^xx!, x=0,1,2,dots
Precisamos implementar isso em código, garantindo que os valores de entrada estejam no espaço paramétrico ( lambda>0) e no suporte ( x inteiro não-negativo) da distribuição.
Na teoria da distribuição de Poisson, lambda representa a média e variância da variável e deve ser um número real estritamente positivo. O suporte de X é o conjunto 0,1,2,dots. Para calcular p(x) usamos a fórmula acima, que envolve a exponencial, potências e o fatorial.

Passo 2

Para estruturar a função em Python, vamos usar o módulo ttmath para e^-lambda, potência e fatorial. A assinatura ficará algo como:
def poisson_p(x, lam):
    ...
Antes de qualquer cálculo, fazemos checagens de validade:
  • Verificar se ttlam é numérico e >0.
  • Verificar se x é inteiro e >=0.
    Se alguma condição falhar, levantamos uma exceção com mensagem de erro explicativa.

Passo 3

Com as entradas validadas, aplicamos a fórmula:
prob = e^-lambda ; lambda^xx!
e retornamos esse valor como um float.
Pronto! A função já está protegida contra entradas inválidas e retorna a probabilidade correta.

Resposta

import math
def poisson_p(x, lam):
“”"
Calcula a probabilidade de X = x para X ~ Poisson(lam).
Parâmetros:
x   : valor inteiro não-negativo (suporte de Poisson)
lam : parâmetro da distribuição, deve ser real estritamente positivo

Retorna:
float  probabilidade P(X = x)

Levanta:
TypeError ou ValueError em caso de entrada inválida
"""
# Verifica tipo e domínio de lam
if not isinstance(lam, (int, float)):
    raise TypeError("Parâmetro 'lam' deve ser numérico")
if lam <= 0:
    raise ValueError("Parâmetro 'lam' deve ser maior que zero")
# Verifica tipo e domínio de x
if not isinstance(x, int):
    raise TypeError("Variável 'x' deve ser do tipo int")
if x < 0:
    raise ValueError("Variável 'x' deve ser um inteiro não-negativo")
# Cálculo da probabilidade
return math.exp(-lam) * (lam ** x) / math.factorial(x)

Exercícios relacionados