RuntimeWarning:在divid中遇到无效值

2024-06-02 10:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须用欧拉方法为“弹簧球”模型编制一个程序

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

我搞不懂,密码怎么了?


Tags: 方法infromimportdtrrzerossqrt
3条回答

Python索引从0(而不是1)开始,因此赋值“r[1,:]=r0”定义r的第二个(即索引1)元素,并将第一个(索引0)元素保留为一对零。for循环中i的第一个值是0,因此r r得到r中第一个条目的点积的平方根(即0),随后行中的除以rr将抛出错误。

我认为你的代码试图“除以零”或“除以NaN”。如果你意识到这一点,不想让它打扰你,那么你可以尝试:

import numpy as np
np.seterr(divide='ignore', invalid='ignore')

有关详细信息,请参见:

除以rr,可能是0.0。检查rr是否为零,并执行一些合理的操作,而不是在分母中使用它。

相关问题 更多 >