Python 错误,'int' 对象不可订阅
Python error, 'int' object is not subscriptable
我正在尝试使用 Vertel 算法求解微分方程,但我无法摆脱这个错误。有什么建议吗?
def Vertel(dt, x0, v0, t, tstop, pravastrana, M=1):
i = 0
x = x0
v = v0
k = 1 # Spring constant
m = 1
while t <= tstop:
a = -(k/m)* x[i]
if i == 0:
v_next = v[i] + a* dt
x_next = x[i] + v_next* dt
else:
x_next = 2* x[i] - x[i-1] + a* dt** dt
x.append(x_next)
t.append(t[i] + dt)
i = i + 1
t = t + dt
return(x, t)
print(*Vertel(0.1 ,1 ,1 , 0, 10, pravastrana_1, ))
在线上,我定义a
的地方我得到了错误信息:
> 'int' object is not subscriptable
感谢任何帮助,谢谢
您想将 x
和 v
初始化为列表,
x = [x0]
v = [v0]
为了获得 Verlet 算法的正确顺序,您可能还考虑将第一步初始化为更高的顺序,如
v_next = v[i] + 0.5*a* dt
x_next = x[i] + v_next* dt
因为这给出了二次项的正确泰勒展开。请注意,速度现在对于半步位置是正确的,因为它将用于 Leapfrog Verlet 变体。
会有被第一个错误掩盖的问题,例如 t
同时作为标量变量和列表的实际双重处理,可能更多。
我正在尝试使用 Vertel 算法求解微分方程,但我无法摆脱这个错误。有什么建议吗?
def Vertel(dt, x0, v0, t, tstop, pravastrana, M=1):
i = 0
x = x0
v = v0
k = 1 # Spring constant
m = 1
while t <= tstop:
a = -(k/m)* x[i]
if i == 0:
v_next = v[i] + a* dt
x_next = x[i] + v_next* dt
else:
x_next = 2* x[i] - x[i-1] + a* dt** dt
x.append(x_next)
t.append(t[i] + dt)
i = i + 1
t = t + dt
return(x, t)
print(*Vertel(0.1 ,1 ,1 , 0, 10, pravastrana_1, ))
在线上,我定义a
的地方我得到了错误信息:
> 'int' object is not subscriptable
感谢任何帮助,谢谢
您想将 x
和 v
初始化为列表,
x = [x0]
v = [v0]
为了获得 Verlet 算法的正确顺序,您可能还考虑将第一步初始化为更高的顺序,如
v_next = v[i] + 0.5*a* dt
x_next = x[i] + v_next* dt
因为这给出了二次项的正确泰勒展开。请注意,速度现在对于半步位置是正确的,因为它将用于 Leapfrog Verlet 变体。
会有被第一个错误掩盖的问题,例如 t
同时作为标量变量和列表的实际双重处理,可能更多。