2015-09-23 67 views
0

我想爲給定的函數執行一個動畫。動畫給零分區

我現在的問題是,它給了我一個零除,但我不明白這是如何發生的。

我已經把一些打印語句,他們都沒事。

我不確定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

順便說一句你使用'animate'作爲'FuncAnimation'的一個參數並且有一個同名的函數。 – Psytho

+1

你有一個模塊級變量'n',但該變量隱藏在'animate'函數的範圍內,因爲* animate'的*參數也被稱爲'n'。該參數將是一個整數,範圍從0到'len(n)-1'。看到我的答案。 –

+0

你的動畫應該做什麼?你想爲每個n的值計算u_r嗎?或者是其他東西? –

回答

0

當你傳遞一個整數作爲frames說法FuncAnimation,傳遞給你的回調(animate,在這種情況下)的第一個參數將是一個整數,範圍從0到1,小於frames給出的整數。因此,第一次撥打animate(n)的電話號碼爲n = 0,結果在指定的行中除以0。

可能的解決方法是將frames=len(n)更改爲frames=n

+0

:所以,我改爲frames = n,我沒有被零錯誤除,但我也沒有動畫。 (該公式工作正常,經過測試) – George

+0

:這個工作的任何想法?謝謝! – George