python - IndexError:列表分配索引超出范围。我该如何解决这个问题?
问题描述
我正在尝试 Newmark 的恒定平均加速度法。我收到此错误。我如何从这个错误中恢复?
IndexError Traceback(最近一次调用最后一次)
41 for i in range(len(t)):
42 pn[i+1] = p[i+1]+ a1*u[i] + a2*v[i] + a3*a[i]
43 u[i+1] = pn[i+1]/kn
44 v[i+1] = y*(u[i+1]-u[i])/(b*dt) + (1-y/b) v[i] + dt (1-y/(2 *b))*a[i]
IndexError:列表分配索引超出范围
y = 1/2
b = 1/4
u = []
v = []
t = []
p = [0,25,43.3013,50,43.3013,25,0,0,0,0,0,0]
a = []
pn = []
pn.append(0)
x = 0.0
for i in range(11):
z = 0.0 + x
t.append(z)
x = x + 0.1
m = 0.45594
k = 18
c = 0.2865
u.append(0)
v.append(0)
a.append((p[0]-c*v[0]-k*u[0])/m)
dt = 0.1
a1 =(m/(b*dt*dt)+y*c/(b*dt))
a2 = (m/(b*dt)+(y/b-1)*c)
a3 = (((1/(2*b))-1)*m + dt*((y/(2*b))-1)*c)
kn = k + a1
for i in range(len(t)-1):
pn[i+1] = p[i+1]+ a1*u[i] + a2*v[i] + a3*a[i]
u[i+1] = pn[i+1]/kn
v[i+1] = y*(u[i+1]-u[i])/(b*dt) + (1-y/b)*v[i] + dt* (1-y/(2*b))*a[i]
a[i+1] = (u[i+1]-u[i])/(b*dt*dt) - v[i]/(b*dt)-(1/(2*b)-1)*a[i]
解决方案
您pn, a, u, v
被定义为长度为 1 的列表,因此没有诸如pn[1]
. 您可以使用append
或定义具有所需长度的列表。
for i in range(len(t)):
pn.append(p[i+1] + a1*u[i] + a2*v[i] + a3*a[i])
u.append(pn[i+1]/kn)
v.append(y*(u[i+1]-u[i])/(b*dt) + (1-y/b)*v[i] + dt* (1-y/(2*b))*a[i])
a.append((u[i+1]-u[i])/(b*dt*dt) - v[i]/(b*dt)-(1/(2*b)-1)*a[i])
或者
pn, a, u, v = [0]*11, [0]*11, [0]*11 [0]*11
pn[0], u[0], v[0] = 0, 0, 0
a[0] = (p[0]-c*v[0]-k*u[0])/m
...
for i in range(len(t)-1):
pn[i+1] = p[i+1] + a1*u[i] + a2*v[i] + a3*a[i]
u[i+1] = pn[i+1]/kn
v[i+1] = y*(u[i+1]-u[i])/(b*dt) + (1-y/b)*v[i] + dt* (1-y/(2*b))*a[i]
a[i+1] = (u[i+1]-u[i])/(b*dt*dt) - v[i]/(b*dt)-(1/(2*b)-1)*a[i]
推荐阅读
- gmap.net - 有很多标记的 Gmap 性能?
- python - 列表的 Python 问题 (API/JSON)
- python-3.x - 如何临时更改默认 python3 路径
- pandas - Pandas 将一个数据帧拆分为多个数据帧
- python-3.x - Python 3 线程发布请求传递标头参数和数据
- c# - 使用 C# Http post 上传图片
- javascript - 变量替换解析错误(意外的标记,预期的“...”)
- ruby-on-rails - 在测试中阻止 SFTP 连接 - Ruby on Rails
- bash - 意外标记 `$'do\r'' 附近的语法错误
- multithreading - 停止 .net 核心服务器中所有正在运行的线程