所以我试图通过使用两个步长来计算错误,一个尺寸是另一个尺寸的两倍。我设置了两个温度阵列,使用两种不同的步长计算。当我注意到在我的循环中我称之为在时间= 5分钟时打印温度值时,我的错误值得疯狂,我写错了。如果我将它替换为任何数字,它会打印相同的值。是np.where(t = 5)在这种情况下使用不正确?对于每个不同的步长,产生的曲线具有对应于每次的温度值。我希望能够打印时间步长的值及其相应的错误。
> auto.arima(ts,trace=T)
ARIMA(2,0,2) with non-zero mean : Inf
ARIMA(0,0,0) with non-zero mean : 365.0674
ARIMA(1,0,0) with non-zero mean : 367.4462
ARIMA(0,0,1) with non-zero mean : 367.4406 <<- (I Need to get this)
ARIMA(0,0,0) with zero mean : 381.969
ARIMA(1,0,0) with non-zero mean : 367.4462
ARIMA(0,0,1) with non-zero mean : 367.4406
ARIMA(1,0,1) with non-zero mean : 369.1222
Best model: ARIMA(0,0,0) with non-zero mean
答案 0 :(得分:0)
首先,在dt
间隔的相同温度上循环,然后加倍dt
是没有意义的。与尝试in your previous post的分析解决方案进行比较更有意义。
要在某个温度下打印结果的值,您可以 - 在您知道该值实际位于数组内的条件下 - 按条件索引数组。
E.g。
t = np.array([1,55,77])
x = np.array([1,2,3])
print x[t == 55]
在这种情况下:
import numpy as np
r = 0.024 #cooling rate per minute
te_init = 90.0
te_surr = 17
def f(te):
return -r*(te - te_surr) # the derivative
dt_values = [0.05, 0.025, 0.01, 0.005]
for dt in dt_values:
t = np.arange(0,100,dt) #time
te = np.zeros(len(t)) #temperature array
te[0] = te_init
for i in range(1,len(t)): #eulers method for computing temperature
p1=f(te[i-1])
p2 =f(te[i-1]+dt*p1)
te[i] = te[i-1] + (p1 + p2)*(dt/2)
te_ana = te_surr - (te_surr - te_init)*np.exp(-r*t)
print dt,
print te[t==10] - te_ana[t==10]