擅长:python、mysql、java
<p>由于效率问题,如果可以避免的话,不应该追加数组。追加意味着更改分配的内存大小,这可能会占用不连续的内存空间,因此需要低效的分配或重新分配。这会大大降低程序的速度,特别是对于大型数组。在</p>
<p>如果你要实现一个固定的时间步长Runge Kutta,你事先就知道你的解在时间T时会有多少个点。它是N=(T-t0)/h+1,其中T是最后一个时间,t0是初始时间,h是时间步。您可以用零初始化数组(使用<code>states = np.zeros((N,3))</code>),并在执行过程中填充值,将索引<code>i</code>与时间<code>t[i] = t0 +i*h</code>关联起来。这将在循环内:
<code>states[:,i+1] = states[:,i] + RK4_step(states[:,i])</code>,
其中<code>RK4_step(states[:,i])</code>是一个函数,返回一个数组(列),其中包含Runge-Kutta方法的一个步骤中状态值的变化。在</p>
<p>即使您的时间步长是可变的,您仍然应该这样做,但是时间不均匀<code>t[i] = t0 +i*h</code>。在</p>
<p>或者,您可以使用<code>numpy.integrate.ode_int()</code>,它在需要的时间返回一个ODE的解决方案。在</p>