- Crie um programa que calcule o desvio padrão para o lucro das N simulações do exercício anterior (3). Dica: math. sqrt () .
Passo 1
O enunciado pede: criar um programa que calcule o desvio padrão para o lucro das
simulações do exercício anterior. Informações dadas e assumidas:
- Temos uma lista com os lucros das
simulações; chamo essa lista de . - O número de simulações é
(ou seja, tamanho da lista). - A dica indica usar
para obter a raiz quadrada. - Vou assumir que queremos o desvio padrão populacional (denominador
), porque estamos calculando a dispersão dos resultados simulados, todos disponíveis.
O que o programa deve fazer, então:
- Receber os
lucros (por exemplo, uma lista). - Calcular a média dos lucros.
- Calcular a variância populacional.
- Tirar a raiz quadrada da variância para obter o desvio padrão.
- Tratar casos especiais (lista vazia).
Passo 2
O que é média aritmética e como calculá-la aqui.
A média aritmética
de
valores
é a soma dos valores dividida por
:
Explicando as partes:
-
é a média (o “centro” dos dados). -
é o i-ésimo lucro. -
significa somar todos os lucros. - Depois dividimos por
para obter a média.
Na prática, em Python: calcular a soma com
e dividir por
.
Passo 3
O que é variância e por que usamos quadrados das diferenças.
A variância populacional
mede a média dos quadrados das diferenças entre cada valor e a média:
Explicando:
- Cada
é o desvio do i-ésimo valor em relação à média. - Elevamos ao quadrado para que desvios negativos não cancelem positivos e para dar peso maior a desvios maiores.
- Somamos todos esses quadrados e dividimos por
(população).
O desvio padrão
é a raiz quadrada da variância:
Por isso a dica de usar
.
Passo 4
Por que escolhi a fórmula populacional (dividir por
) e não a amostral (dividir por
).
- Fórmula populacional (denom.
) descreve a dispersão dos próprios resultados que você tem — faz sentido quando você tem todas as simulações que quer analisar. - Fórmula amostral (denom.
) é usada quando você quer estimar a variância de uma população maior a partir de uma amostra. Aqui, como a pergunta fala dos lucros das simulações, estamos usando a fórmula populacional.
Se precisar do desvio amostral na prova, a única mudança é dividir porem vez de (e tratar como caso inválido).
Passo 5
Algoritmo passo a passo que o programa fará (duas passagens simples):
- Calcular
número de elementos da lista. Se , lançar erro (não faz sentido calcular). - Calcular
. - Calcular
. - Calcular
. - Calcular
com . - Retornar
.
Complexidade: tempo
(duas passadas sobre os dados) e memória adicional
.
Passo 6
Exemplo numérico passo a passo (para você ver que fica bem “mastigado”).
Suponha os lucros
. Aqui
.
- Média:
- Diferenças e quadrados:
- Soma dos quadrados:
- Variância populacional:
- Desvio padrão:
Isso confirma que o processo funciona e dá números plausíveis.
Passo 7
Casos especiais e escolhas de implementação prática:
- Lista vazia (
): não dá para calcular média; o programa deve levantar um erro (ou retornar None). Vou escolher lançar um ValueError com mensagem clara. - Lista com um único valor (
): variância populacional será zero (diferença ao quadrado é zero), então o desvio padrão é . - Se quiser o desvio amostral em vez do populacional, mudar o divisor para
e exigir . - Se os lucros forem valores grandes, cuidado com erro numérico: implementação em duas passadas (média depois soma dos quadrados das diferenças) é estável o suficiente para a maioria dos casos de prova. Há algoritmos de uma passada (Welford) para maior estabilidade numérica, mas não é necessário aqui.
Passo 8
Implementação em Python (explicação do que cada linha faz, depois eu te dou o código final):
- Importar math.
- Definir uma função que recebe a lista de lucros.
- Calcular
com . - Calcular a média com
. - Somar
para cada . - Dividir pela quantidade
e aplicar . - Retornar o valor.
Agora, no campo de resposta final eu coloco o programa pronto para você copiar e rodar.
Resposta
import math
def desvio_padrao_populacional(lucros):
"""
Calcula o desvio padrão populacional dos lucros.
lucros: iterável de números (lista, tupla, etc.)
Retorna: desvio padrão (float)
Lança ValueError se a lista estiver vazia.
"""
n = len(lucros)
if n == 0:
raise ValueError("A lista de lucros está vazia; não é possível calcular o desvio padrão.")
# média
media = sum(lucros) / n
# soma dos quadrados das diferenças
soma_quadrados = 0.0
for x in lucros:
diff = x - media
soma_quadrados += diff * diff
# variância populacional
variancia = soma_quadrados / n
# desvio padrão
return math.sqrt(variancia)
# Exemplo de uso:
# lucros = [100, 120, 80, 90]
# print(desvio_padrao_populacional(lucros)) # deve imprimir perto de 14.797