我要做的就是计算我正在使用以下公式的数组jx的自相关,
其中n是我希望计算自相关函数的时间,Mt
是最长时间,tk
是从1
到Mt-n
的时间步长。
这是我写的代码。我正在用一个简单的数组jx=linspace(1,10,20)
检查我的程序。我还使程序保存不同n
的自相关值,并用n
绘制它们。
from numpy import *
from pylab import*
jx=linspace(1,10,20)
Mt=len(jx)
def Hcacf(n):
Sum=0.0
coeff1=0
while coeff1 < (Mt-n) :
Sum = Sum + jx[coeff1]*jx[coeff1+n]# + jy[coeff1]*jy[coeff1+n]
coeff1=coeff1+1
avg = Sum*1.0 / (Mt-n)
return avg
autocorrelation=[]
for n in linspace(0,Mt-1,Mt):
ac=Hcacf(n+1)
autocorrelation.append(ac)
lag=linspace(0,Mt-1,Mt)
plot(lag,autocorrelation,marker='o')
show()
但它也会返回以下错误消息:
RuntimeWarning: invalid value encountered in double_scalars
avg = Sum*1.0 / (Mt-n)
我哪里错了?
答案 0 :(得分:2)
看来你的分数为零。它的工作原理如下:
1)在for n in linspace(0,Mt-1,Mt):
行n==Mt-1
,
2)因此,在下一行ac=Hcacf(n+1)
中,您调用函数Hcacf(Mt)
,
3)但是在这个函数Hcacf
中你有一行avg = Sum*1.0 / (Mt-n)
。这是可以除零的地方。
要修复它,您可以排除第一行中间隔的端点。尝试用这一行替换它:
for n in linspace(0, Mt-1, num=Mt, endpoint=False):