<p>您的问题不是很清楚,但是您的代码中有一些错误源。</p>
<p>例如,对于<code>i</code>>;0</p>
<pre><code>x[i+1] = x[i]-v[i]*dt+(a[i]*(dt**2)*0.5)
</code></pre>
<p>尝试使用<code>v[i]</code>的值,但该元素尚不存在于<code>v</code>列表中。</p>
<p>举一个具体的例子,当<code>i</code>=1时,您需要<code>v[1]</code>,但该阶段<code>v</code>列表中唯一的东西是<code>v[0]</code>;<code>v[1]</code>直到下一行才计算。</p>
<p>该错误应导致Python解释器显示错误消息:</p>
<pre><code>IndexError: list index out of range
</code></pre>
<p>在寻求有关堆栈溢出的帮助时,请将错误消息与您的问题一起发布,最好从以下行开始:</p>
<pre><code>Traceback (most recent call last):
</code></pre>
<p>这使得人们更容易阅读你的问题来调试你的代码。</p>
<p>FWIW,在<code>for</code>循环的第一次迭代中,当<code>i</code>==0,<code>x[i+1]</code>和<code>x[i-1]</code>都引用同一个元素时,因为在该阶段的<code>x</code>列表中有两个元素,所以<code>x[-1]</code>是<code>x[1]</code>。</p>
<p>另外,奇怪的是,您将<code>t</code>值存储在列表中。你不需要那么做。只需将<code>t</code>存储为一个简单的<code>float</code>值,并在每次循环中递增<code>dt</code>;请注意,<code>t</code>本身不用于任何计算,但您可能需要打印它。</p>
<p>您的公式似乎与维基百科页面上给出的公式不匹配,无论是针对<a href="http://en.wikipedia.org/wiki/Verlet_integration#Basic_St.C3.B6rmer.E2.80.93Verlet" rel="nofollow noreferrer">Basic Störmer–Verlet</a>,还是针对<a href="http://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet" rel="nofollow noreferrer">Velocity Verlet</a>。例如,在我前面引用的代码行中,您要减去<code>v[i]*dt</code>,但您应该添加它。</p>
<p>也许您应该考虑实现相关的<a href="http://en.wikipedia.org/wiki/Leapfrog_integration" rel="nofollow noreferrer">Leapfrog integration</a>方法。同步版本的leapprog很容易编写代码,而且非常有效。</p>
<p>从维基百科链接:</p>
<pre><code>x[i+1] = x[i] + v[i] * dt + 0.5 * a[i] * dt * dt
v[i+1] = v[i] + 0.5 * (a[i] + a[i+1]) * dt
</code></pre>
<p>通常,不需要将<code>a</code>值实际存储在列表中,因为它们将使用相关的力方程从其他参数计算。</p>