31 views (last 30 days)

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.

Please advise why is this and how to resolve it. Thanking you in advance.

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 at 22:52

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

David Hill
on 13 Jul 2020 at 1:07

function harmonic_average = harmonic_perm(kx,ky)

harmonic_average=zeros(1,4);

for i=1:2

harmonic_average(i) = 2/sum(1./kx(i:i+1));

harmonic_average(i+2)= 2/sum(1./ky(i:i+1));

end

end

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.