# Calculating Harmonic Average in Matlab Function

22 views (last 30 days)
Mizo Amreya on 12 Jul 2020
Commented: Mizo Amreya on 13 Jul 2020
Hello,
I'm trying to calculate harmonic average in a Matlab function.
When I wrote the code below, I noticed Matlab doesn't seem to understand (i) as a counter variable.
In main code I have:
kx = [10,20,30];
ky = [70,80,90];
In a function, I have:
function [harmonic_average] = harmonic_perm(kx,ky)
kxharmforward(i) = 2*(kx(i)*kx(i+1))/(kx(i)+kx(i+1)); % harmonic average for 20 & 30
kxharmbackward(i) = 2*(kx(i)*kx(i-1))/(kx(i)+kx(i-1)); % harmonic average for 10 & 20
kyharmupward(i) = 2*(ky(i)*ky(i+1))/(ky(i)+ky(i+1)); % harmonic average for 80 & 90
kyharmdownward(i) = 2*(ky(i)*ky(i-1))/(ky(i)+ky(i-1)); % harmonic average for 70 & 80
end
This is the error I get when I run the code
Array indices must be positive integers or logical values.
Error in harmonic_perm (line 3)
harmonic_average(i) = 2*(kx(i)*kx(i+1))/(kx(i)+kx(i+1));
Error in Main_Code (line 139)
harnomic_average(i)=harmonic_perm(kx(i),ky(i))

David Hill on 12 Jul 2020
What is ky? Why not just perform vectorized? No need to index into k. k can be any length vector and the below will calculate the harmonic mean.
function harmonic_average = harmonic_perm(k)
harmonic_average = numel(k)/sum(1./k);
end
Mizo Amreya on 13 Jul 2020
Thank you