我必须用欧拉方法为“弹簧球”模型编制一个程序
from pylab import*
from math import*
m=0.1
Lo=1
tt=30
k=200
t=20
g=9.81
dt=0.01
n=int((ceil(t/dt)))
km=k/m
r0=[-5,5*sqrt(3)]
v0=[-5,5*sqrt(3)]
a=zeros((n,2))
r=zeros((n,2))
v=zeros((n,2))
t=zeros((n,2))
r[1,:]=r0
v[1,:]=v0
for i in range(n-1):
rr=dot(r[i,:],r[i,:])**0.5
a=-g+km*cos(tt)*(rr-L0)*r[i,:]/rr
v[i+1,:]=v[i,:]+a*dt
r[i+1,:]=r[i,:]+v[i+1,:]*dt
t[i+1]=t[i]+dt
#print norm(r[i,:])
plot(r[:,0],r[:,1])
xlim(-100,100)
ylim(-100,100)
xlabel('x [m]')
ylabel('y [m]')
show()
我一直有这个错误:
a=-g+km*cos(tt)*(rr-L0)*r[i,:]/rr
RuntimeWarning: invalid value encountered in divide
我搞不懂,密码怎么了?
Python索引从0(而不是1)开始,因此赋值“r[1,:]=r0”定义r的第二个(即索引1)元素,并将第一个(索引0)元素保留为一对零。for循环中i的第一个值是0,因此r r得到r中第一个条目的点积的平方根(即0),随后行中的除以rr将抛出错误。
我认为你的代码试图“除以零”或“除以NaN”。如果你意识到这一点,不想让它打扰你,那么你可以尝试:
有关详细信息,请参见:
除以
rr
,可能是0.0。检查rr
是否为零,并执行一些合理的操作,而不是在分母中使用它。相关问题 更多 >
编程相关推荐