omega_z = 422500*2*np.pi
n_dt = 1000 # Resolution (number of time-steps for one omega_z period)
dt = 2*math.pi/(n_dt*omega_z) # Time-step duration
i_init = 2000 # number of periods
n_init = n_dt*i_init # Number of time-steps in total
time_simu = np.linspace(0,n_init*dt,n_init)
sol = solve_ivp(derivs,
t_span = [time_simu[0], time_simu[-1]],
y0 = [2e-6,0],
method='RK45',
t_eval=time_simu,
rtol = 1e-6)
np.savez(filename,
time_simu = time_simu[limits[0]:limits[1]],
r_z = sol.y[0][limits[0]:limits[1]],
v_z = sol.y[1][limits[0]:limits[1]])
derivs
r_z
的衍生物。然后,我使用
v_z
保存y0
,在某个地方定义了两个限制之间。请注意,我仅向您展示程序的一部分,下一步是在其他情况下求解其他41个其他时间段,这将使GB数据成为GB数据,因此我在sol
循环中如此
np.savez
+
solve_ivp()
。因此,时间数组从SIMU时间的0到末尾都不完整。分析程序i打开数据,检索
savez()
,for
和r_z
。我需要“填补时间阵列的空白”,以便相对于某些频率参考跟踪v_z
和time_simu
的相位。我重新创建时间阵列
r_z
然后,如果我比较了从数据阵列(
v_z
)获得的时间步骤与从分析代码(
omega_z = 422500*2*math.pi
dt = 2*math.pi/(n_dt*omega_z)
n_dt = 1000
i_init = 2000
n_init = n_dt*i_init
time_secular = np.linspace(0,n_init*dt,n_init)
# time_simu is the time imported from the data array
)获得的时间不同。
time_simu
输出
time_secular
discussion
所以差异是
2.8820544184511335e-19
print(time_simu[2] - time_simu[1])
print(time_secular[2] - time_secular[1])
不能成为原因,因为它仅输出
2.366865088469783e-09
2.3668650887579883e-09
# ^^^^^^^
和2.8820544184511335e-19
,但是时间我直接将其从数组中保存。可以是solve_ivp
?
Bro差异(2.8820544184511335E-19)仅仅是浮点算术的结果,而不是因为
x
或
v
甚至
np.savez