indexError: слишком много индексов в массиве для рядов Фурье - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь вписать ряд Фурье в поэтапные данные для лабораторного задания, и с помощью функции curve_fit я получаю IndexError. Я знаю, что Фурье верны, но он мог работать, когда изначально был основан на исходном времени.

B_filter = 'B.tsv'
V_filter = 'V.tsv'
R_filter = 'R.tsv'

B = np.loadtxt(B_filter, usecols=(5, 16, 18), skiprows=1)
V = np.loadtxt(V_filter, usecols=(5, 16, 18), skiprows=1)
R = np.loadtxt(R_filter, usecols=(5, 16, 18), skiprows=1)

B_period = 0.059621194
V_period = 0.0596944625 # period is in days
R_period = 0.0597119658
t_o_B = B[1,0]
t_o_V = V[1,0]
t_o_R = R[1,0]
I_B = np.floor((B[:,0] - t_o_B)/B_period)
I_V = np.floor((V[:,0] - t_o_V)/V_period)
I_R = np.floor((R[:,0] - t_o_R)/R_period)
Phi_B = (B[:,0] - t_o_B)/B_period - I_B # Phased time 
Phi_V = (V[:,0] - t_o_V)/V_period - I_V
Phi_R = (R[:,0] - t_o_R)/R_period - I_R

tB1 = np.array([Phi_B])
tB = np.zeros(38)
for i in range(len(tB)):
     tB[i] = tB1[0,i]
tV = np.array([Phi_V])
print np.shape(tB)
print np.shape(tV)

tR1 = np.array([Phi_R])
tR = np.zeros(38)
for i in range(len(tR)):
   tR[i] = tR1[0,i]
print np.shape(tR)

Phi=np.array([tB,tV,tR])
# Mean brightness
N=38
mavg_B = sum(B[:,1])/N
mavg_V = sum(V[:,1])/N
mavg_R = sum(R[:,1])/N
mavg = np.array([mavg_B, mavg_V, mavg_R])
# Frequencies
f_B = 16.7725591
f_V = 16.7519726
f_R = 16.7470621
f = np.array([f_B, f_V, f_R])

# The actual fourier do 3 with 9 summations
 def fourierB(Phi, A1, A2, A3, A4, A5, A6, A7, A8, A9, Phi_1, Phi_2, Phi_3, Phi_4, Phi_5, 
Phi_6, Phi_7, Phi_8, Phi_9):
return mavg[0] + A1*np.sin(2*1*np.pi*f[0]*Phi[0] + Phi_1) + A2*np.sin(2*2*np.pi*f[0]*Phi[0] 
+ Phi_2) + A3*np.sin(2*3*np.pi*f[0]*Phi[0] + Phi_3) + A4*np.sin(2*4*np.pi*f[0]*Phi[0] + 
Phi_4) + A5*np.sin(2*5*np.pi*f[0]*Phi[0] + Phi_5) + A6*np.sin(2*6*np.pi*f[0]*Phi[0] + Phi_6) 
+ A7*np.sin(2*7*np.pi*f[0]*Phi[0] + Phi_7) + A8*np.sin(2*8*np.pi*f[0]*Phi[0] + Phi_8) + 
A9*np.sin(2*9*np.pi*f[0]*Phi[0] + Phi_9)
def fourierV(Phi_V, A1, A2, A3, A4, A5, A6, A7, A8, A9, Phi_1, Phi_2, Phi_3, Phi_4, Phi_5, 
Phi_6, Phi_7, Phi_8, Phi_9):
return mavg[1] + A1*np.sin(2*1*np.pi*f[1]*Phi[1] + Phi_1) + A2*np.sin(2*2*np.pi*f[1]*Phi[1] 
+ Phi_2) + A3*np.sin(2*3*np.pi*f[1]*Phi[1] + Phi_3) + A4*np.sin(2*4*np.pi*f[1]*Phi[1] + 
Phi_4) + A5*np.sin(2*5*np.pi*f[1]*Phi[1] + Phi_5) + A6*np.sin(2*6*np.pi*f[1]*Phi[1] + Phi_6) 
+ A7*np.sin(2*7*np.pi*f[1]*Phi[1] + Phi_7) + A8*np.sin(2*8*np.pi*f[1]*Phi[1] + Phi_8) + 
A9*np.sin(2*9*np.pi*f[1]*Phi[1] + Phi_9)
def fourierR(Phi_R, A1, A2, A3, A4, A5, A6, A7, A8, A9, Phi_1, Phi_2, Phi_3, Phi_4, Phi_5, 
Phi_6, Phi_7, Phi_8, Phi_9):
return mavg[2] + A1*np.sin(2*1*np.pi*f[2]*Phi[2] + Phi_1) + A2*np.sin(2*2*np.pi*f[2]*Phi[2] + Phi_2) + A3*np.sin(2*3*np.pi*f[2]*Phi[2] + Phi_3) + A4*np.sin(2*4*np.pi*f[2]*Phi[2] + Phi_4) + A5*np.sin(2*5*np.pi*f[2]*Phi[2] + Phi_5) + A6*np.sin(2*6*np.pi*f[2]*Phi[2] + Phi_6) + A7*np.sin(2*7*np.pi*f[2]*Phi[2] + Phi_7) + A8*np.sin(2*8*np.pi*f[2]*Phi[2] + Phi_8) + A9*np.sin(2*9*np.pi*f[2]*Phi[2] + Phi_9)

poptB, pcovB = curve_fit(fourierB, Phi[0,0], Phi[0]) # ----> this is where I'm getting the 
error
poptV, pcovV = curve_fit(fourierV, Phi[1,0], Phi[1])
poptR, pcovR = curve_fit(fourierR, Phi[2,0], Phi[2])

Я не могу понять это, поэтому любые идеи будут великолепны. Phi [0,0] должно быть первой точкой данных, я думаю, что это может быть проблемой, но я не знаю, как еще представить Phi_0

...