我想为给定的函数执行动画。
我现在的问题是它给了我一个除零但我看不出这是怎么回事。
我已经放了一些打印陈述,但没关系。
我不确定FuncAnimation是如何工作的,因为如果我省略这个调用而只是运行“animate(n)”,那么我没有错误。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
R = 1
b = 0.02
m0 = 0.02
n = np.linspace( 1,0.01 ,10)
r = np.linspace( 0,R ,10 )
fig, axes = plt.subplots()
line, = axes.plot([], [], lw=2)
def init():
line.set_data([], [])
return line,
def animate(n):
u_r = ( ( b / 2 * m0 ) ** (1/n) ) * ( n/(n+1) ) * ( R**(1+1/n ) - r**(1+1/n) )
print()
print( "1/n = {0} , n/n+1= {1} ,1+1/n = {2}".format( 1/n, n/(n+1),1+(1/n)))
print()
print(u_r)
line.set_data(r, u_r[0]*u_r)
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=len(n),blit=False)
plt.show()
错误在于:
u_r = ( ( b / 2 * m0 ) ** (1/n) ) * ( n/(n+1) ) * ( R**(1+1/n ) - r**(1+1/n) )
答案 0 :(得分:1)
当您传递一个整数作为frames
的{{1}}参数时,传递给回调的第一个参数(在本例中为FuncAnimation
)将是一个整数,范围从0到比animate
给出的整数小一个。因此,对frames
的第一次调用具有animate(n)
,这会导致在指定行处除以0。
可能的解决方法是将n = 0
更改为frames=len(n)
。