Média Harmônica

A média harmônica de uma amostra é, em termos simples, o inverso da soma dos inversos dos elementos da amostra, dividido pelo tamanho da amostra. Por isso, é uma medida que se torna particularmente útil em situações específicas, como quando os valores são inversamente proporcionais. Por exemplo, podemos aplicá-la no caso da velocidade ou frequência.

Fórmula:

$$\large \begin{matrix} H = \dfrac{n}{(\dfrac{1}{x_1} + \dfrac{1}{x_2} + \ldots + \dfrac{1}{x_n})}\\ \small ou\\ \large H = \dfrac{n}{\sum_{i=1}^{n}(\dfrac{1}{x_i})} \end{matrix}$$

Sendo:

  • $H$: Média harmônica
  • $x, x_{1}, x_{2}, x_{n}$: Elementos da população ou amostra
  • $n$: Número de elementos da amostra.

Python :

H = len(values) / sum(list(map(lambda x: 1/x, values)))

Julia :

H = length(values) / sum(1 ./ values)

 

Libs:

Linguagem Biblioteca Função
Python Statistics st.harmonic_mean( values )
Julia StatsBase harmmean( values )

Exercício 1

Um automóvel fez um percurso com uma velocidade de 100 km/h em determinado dia. Por outro lado, em outro dia, ele fez o mesmo percurso a uma velocidade de 60 km/h. Assim, surge a seguinte questão: qual seria sua velocidade média nesse mesmo percurso?

Python

''' Sem o uso de bibliotecas '''

lista = [100, 60]

# Calculando a média
H = len(lista) / sum(list(map(lambda x: 1/x, lista)))

# RESPOSTA: H = 75 km/h

''' Utilizando a função harmonic_mean da biblioteca Statistics '''

import statistics as st

# Calculando a média
H = st.harmonic_mean([100, 60])

Julia

" Sem o uso de bibliotecas "

valor = [100, 60]

# Calculando a média
H = length(valor) / sum(1 ./ valor)

Exercício 2

Considere um veículo que realizou o trajeto de ida e volta entre as cidades A e B. Na ida, a velocidade média foi de 80 km/h, enquanto na volta, o valor foi de 120 km/h. Levando isso em conta, qual seria a velocidade média ao considerar o percurso completo de ida e volta?

Python
''' Considerando que a distância percorrida na ida e na volta seja a mesma, inicialmente, pode parecer fácil calcular a média das velocidades médias de ida e volta, o que resultaria em 100 km/h. Entretanto, o que se pede no problema é a velocidade média para o percurso total (ida + volta), e não apenas a média aritmética das velocidades. Dessa forma, é importante ressaltar que a velocidade média é, na verdade, a média harmônica entre as duas velocidades médias: ida = 80 km/h e volta = 120 km/h. '''

''' Sem o uso de bibliotecas '''

lista = [120, 80]

# Calculando a média
H = len(lista) / sum(list(map(lambda x: 1/x, lista)))

# RESPOSTA: 96.0 km/h

''' Utilizando a função harmonic_mean da biblioteca Statistics '''

import statistics as st

# Calculando a média
H = st.harmonic_mean([120, 80])
Julia
" Sem o uso de bibliotecas "

valor = [120, 80]

# Calculando a média
H = length(valor) / sum(1 ./ valor)

Mas, afinal, por que a velocidade média seria 96 km/h? Em que exatamente se baseia esse resultado?
Vamos considerar o seguinte: independentemente da distância entre as cidades, sabemos que as velocidades médias foram de 80 km/h na ida e de 120 km/h na volta. Assim, para facilitar a explicação, vamos adotar que a distância entre as cidades A e B seja de 120 km.
Com base nessas informações, podemos calcular que o tempo gasto na ida seria de 1,5 hora, já que a distância dividida pela velocidade média da ida resulta em: 120 km / 80 km/h = 1,5 h.

Analogamente, na volta, o tempo gasto seria de 1 hora: 120 km / 120 km/h = 1 h.
Dessa forma, para percorrer um total de 240 km, o tempo necessário seria de 2,5 horas. Concluímos, então, que a velocidade média seria: 240 km / 2,5 h = 96 km/h.


Exercício 3

Durante uma viagem espacial, foi descoberto um novo elemento. Ao trazê-lo para a Terra, os cientistas perceberam tratar-se de uma mistura completamente homogênea composta de três substâncias:

  • Substância A, com densidade d=0,4 g/cm3d = 0,4 \, \text{g/cm}^3d=0,4g/cm3;
  • Substância B, com densidade d=0,6 g/cm3d = 0,6 \, \text{g/cm}^3d=0,6g/cm3;
  • Substância C, com densidade d=1,2 g/cm3d = 1,2 \, \text{g/cm}^3d=1,2g/cm3.

Sabendo ainda que as massas da substância A e da substância B são as mesmas, como podemos calcular a densidade dessa mistura?

Python

''' Sem o uso de bibliotecas '''

lista = [0.4, 0.6, 1.2]

# Calculando a média
H = len(lista) / sum(list(map(lambda x: 1/x, lista)))

# RESPOSTA: 0,6 g/cm³

Julia

" Sem o uso de bibliotecas "

valor = [0.4, 0.6, 1.2]

# Calculando a média
H = length(valor) / sum(1 ./ valor)


Harmônico Global

O harmônico global, em resumo, refere-se à média harmônica de todos os dados disponíveis em um conjunto de dados. Por essa razão, ele leva em consideração a totalidade dos elementos da amostra. É especialmente utilizado em aplicações que exigem a análise da tendência central de uma população inteira, como, por exemplo, na avaliação de desempenho de uma equipe esportiva ou de uma empresa.

Fórmula:

$$\large \begin{matrix} Hg = \dfrac{1}{(\dfrac{1}{x_1} + \dfrac{1}{x_2} + \ldots + \dfrac{1}{x_n})}\\ \small ou \\ \large Hg = \dfrac{1}{\sum_{i=1}^{n}(\dfrac{1}{x_i})} \end{matrix}$$

Sendo:

  • $Hg$: Harmônico global
  • $x, x_{1}, x_{2}, x_{n}$: Elementos da população ou amostra

Python :

Hg = 1 / sum(list(map(lambda x: 1/x, values)))

Julia :

Hg = 1 / sum(1 ./ values)

Exercício 1

Imagine o seguinte cenário: uma torneira é capaz de encher uma caixa-d’água em 3 horas. Entretanto, outra torneira realiza a mesma tarefa em 5 horas. Se abrirmos ambas simultaneamente, qual será o tempo necessário para que a caixa-d’água fique completamente cheia?

Python

''' Sem o uso de bibliotecas '''

lista = [3, 5]

Hg = 1 / sum(list(map(lambda x: 1/x, lista)))

# Como o resultado foi 1.875, temos que converter em um valor temporal

# Descobrindo as horas
horas = int(Hg)
resto_horas = Hg - int(Hg)

# Descobrindo os minutos
minutos = int(60 * resto_horas)
resto_minutos = 60 * resto_horas - int(minutos)

# Descobrindo os segundos
segundos = int(60 * resto_minutos)

# RESPOSTA: Harmônico global: 1.875, sendo este, 1 hora, 52 minutos e 30 segundos

Julia

" Sem o uso de bibliotecas "

valor = [3, 5]

Hg = 1 / sum(1 ./ valor)

# Descobrindo as horas
horas = floor(Int, Hg)
resto_horas = Hg - horas

# Descobrindo os minutos
minutos = floor(Int, 60 * resto_horas)
resto_minutos = 60 * resto_horas - minutos

# Descobrindo os segundos
segundos = floor(Int, 60 * resto_minutos)

Exercício 2

Considere uma residência cuja caixa-d’água é enchida pela rede pública de água em 5 horas. Por outro lado, os moradores da casa consomem a água dessa caixa a ponto de esvaziá-la completamente em 9 horas. Assim, se a entrada e a saída de água estiverem funcionando simultaneamente, quanto tempo será necessário para que a caixa-d’água fique completamente cheia? Indique o tempo em horas, minutos e segundos.

Python

''' Sem o uso de bibliotecas '''

lista = [5, -9]

Hg = 1 / sum(list(map(lambda x: 1/x, lista)))

Hg = float(f'{Hg:.2f}')

# Como o resultado foi 11.25, temos que converter em um valor temporal

# Descobrindo as horas
horas = int(Hg)
resto_horas = Hg - int(Hg)

# Descobrindo os minutos
minutos = int(60 * resto_horas)
resto_minutos = 60 * resto_horas - int(minutos)

# RESPOSTA: Harmônico global: 11.25, sendo este, 11 horas e 15 minutos

Julia

" Sem o uso de bibliotecas "

valor = [5, -9]

Hg = 1 / sum(1 ./ valor)

# Descobrindo as horas
horas = floor(Int, Hg)
resto_horas = Hg - horas

# Descobrindo os minutos
minutos = round(Int, 60 * resto_horas)
resto_minutos = 60 * resto_horas - minutos

Exercício 3

Uma pessoa sozinha consegue construir um muro em 6 horas, enquanto outra pessoa é capaz de realizar a mesma tarefa em 9 horas. Sabendo disso, se ambas trabalharem em conjunto, qual será o tempo total, t, necessário para construir o muro?

Python

''' Sem o uso de bibliotecas '''

lista = [6, 9]

Hg = 1 / sum(list(map(lambda x: 1/x, lista)))

Hg = float(f'{Hg:.1f}')

''' Convertendo o resultado em um valor temporal '''
# Como o resultado foi 3.6, temos que converter em um valor temporal

# Descobrindo as horas
horas = int(Hg)
resto_horas = Hg - int(Hg)

# Descobrindo os minutos
minutos = int(60 * resto_horas)
resto_minutos = 60 * resto_horas - int(minutos)

# RESPOSTA: Harmônico global: 3.6, sendo este, 3 horas e 36 minutos

Julia

" Sem o uso de bibliotecas "

valor = [6, 9]

Hg = 1 / sum(1 ./ valor)

# Descobrindo as horas
horas = floor(Int, Hg)
resto_horas = Hg - horas

# Descobrindo os minutos
minutos = round(Int, 60 * resto_horas)
resto_minutos = 60 * resto_horas - minutos