Python 如何解决索引器错误:列表分配索引超出范围错误?

Python 如何解决索引器错误:列表分配索引超出范围错误?,python,python-2.7,Python,Python 2.7,我使用rk4方法编写了求解ode的代码。 代码如下: from __future__ import division import math import numpy as np from math import exp def f(t,y): return 5*t**2-y/math.e**(t+y) def rk4(t,y,h,i): p=[0]*i p[0] = y for n in range(0,i): g=11 k1=round(h*f((t+n*h

我使用
rk4
方法编写了求解
ode
的代码。
代码如下:

from __future__ import division
import math
import numpy as np
from math import exp

def f(t,y):
  return 5*t**2-y/math.e**(t+y)
def rk4(t,y,h,i):
  p=[0]*i
  p[0] = y
  for n in range(0,i):
    g=11
    k1=round(h*f((t+n*h),y),g)
    k2=round(h*f((t+n*h)+(h/2),y+k1/2),g)
    k3=round(h*f((t+n*h)+h/2,y+k2/2),g)
    k4=round(h*f((t+n*h)+h,y+k3),g)
    p[n+1]=p[n]+(1/6)*(k1+2*k2+2*k3+k4)
    print(k1,k2,k3,k4)

a=rk4(0,1,0.1,3)
print(a)
当我试图打印k的系数时,它显示列表分配索引超出范围错误,当我试图打印p的值时,输出为

[1, 0.9666652135433333, 0]
我不明白为什么第三项是0。

如何解决这些问题?

我改进了您的代码片段:

from __future__ import division
import math

def f(t, y):
    return 5 * t**2 - y/math.e**(t + y)

def rk4(t, y, h, i):
    p = list()
    p.append(y)
    for n in range(0, i):
        g = 11
        k1 = round(h * f((t + n * h), y), g)
        k2 = round(h * f((t + n * h) + (h/2), y + k1/2), g)
        k3 = round(h * f((t + n * h) + (h/2), y + k2/2), g)
        k4 = round(h * f((t + n * h) + h, y + k3), g)
        p.append(p[n] + (1/6) * (k1 + 2 * k2 + 2 * k3 + k4))
        print(k1, k2, k3, k4)

rk4(0, 1, 0.1, 3)
输出:


.rk4()
方法中没有任何返回。当我尝试输出p时,我使用了返回p。但是对于k,当我返回k1,k2,k3,k4时,它只显示每个值的一个值,而不是循环中的所有值。非常感谢。成功了。那么,这是否意味着我们可以使用数组的附件?@ RIMA是的,对于Python列表中的添加项,你应该使用<代码> .AppEnter()/代码>,请看这对你有用:@ RIMA,如果你的问题被我的答案解决了,请考虑投票给它:
(-0.03678794412, -0.03373778195, -0.03373873966, -0.0282677314)
(-0.02828710837, -0.02041047991, -0.02041201684, -0.01011306051)
(-0.01011942119, 0.00259988829, 0.0025995445, 0.01774691262)