The **harmonic mean** is another kind of average value for a discrete data set. To calculate the **harmonic mean** of a set of N data values we need to divide the number of data values N to the sum of inverses of each data value.

In mathematics there is no particular notation for the harmonic mean. For our example we are going to use:

\[x_{HM}=\frac {N}{{\frac {1}{x_{1}}}+{\frac {1}{x_{2}}}+\cdots +{\frac {1}{x_{N}}}}\]The general mathematic formula for the harmonic mean is:

\[x_{HM}=\frac {N}{\sum \limits _{i=1}^{N}{\frac {1}{x_{i}}}}\]We can also write the mathematical expression of the harmonic mean using rational exponents:

\[x_{HM}=\left(\frac {\sum \limits _{i=1}^{N}x_{i}^{-1}}{N}\right)^{-1}\]Example: Calculate the **harmonic mean** (average) of the monthly minimum temperature for the given set of data.

Month | Minimum temperature [°C] |

January | 2 |

February | 4 |

March | 8 |

April | 13 |

May | 16 |

June | 21 |

July | 23 |

August | 22 |

September | 20 |

October | 17 |

November | 13 |

December | 6 |

We are given 12 measurements of the temperatures, the minimum value for each month. The minimum average temperature for the whole year is the **harmonic mean** of the data set:

For a better understanding of the result we are going to plot:

- each monthly minimum temperature as a bar plot
- the harmonic mean (yearly minimum average temperature) as a line

As a programming exercise, we’ll write a **Scilab script** which calculates the **harmonic mean** for the same set of data:

data_N = [2 4 8 13 16 21 23 22 20 17 13 6]; length_N = length(data_N); sum_inv_N = 0; for i=1:length_N sum_inv_N = sum_inv_N + 1/data_N(i); end x_HM = length_N/sum_inv_N; mprintf("The harmonic mean is: %f", x_HM);

For further practicing we are going to write down a **C script** which calculates the **harmonic mean** for the same set of data (temperatures):

#include<stdio.h> #include<math.h> int main(void) { double data_N[12] = {2,4,8,13,16,21,23,22,20,17,13,6}; int i; double sum_inv_N = 0; double x_HM = 0; double length_N = 12; for (i=0;i<length_N;i++){ sum_inv_N = sum_inv_N + 1/data_N[i]; } x_HM = length_N / sum_inv_N; printf("The harmonic mean is %f: \n",x_HM); return 0; }

For any questions or observations regarding this tutorial please use the comment form below.

Don’t forget to Like, Share and Subscribe!