Calculating Harmonic Average in Matlab Function

조회 수: 4 (최근 30일)
Mizo Amreya
Mizo Amreya 2020년 7월 12일
댓글: Mizo Amreya 2020년 7월 13일
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))

답변 (1개)

David Hill
David Hill 2020년 7월 12일
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
  댓글 수: 5
David Hill
David Hill 2020년 7월 13일
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
Mizo Amreya
Mizo Amreya 2020년 7월 13일
Thank you

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by