动画给出零分割

时间:2015-09-23 13:31:26

标签: python numpy matplotlib

我想为给定的函数执行动画。

我现在的问题是它给了我一个除零但我看不出这是怎么回事。

我已经放了一些打印陈述,但没关系。

我不确定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) )

1 个答案:

答案 0 :(得分:1)

当您传递一个整数作为frames的{​​{1}}参数时,传递给回调的第一个参数(在本例中为FuncAnimation)将是一个整数,范围从0到比animate给出的整数小一个。因此,对frames的第一次调用具有animate(n),这会导致在指定行处除以0。

可能的解决方法是将n = 0更改为frames=len(n)