2015-12-17 27 views
4

我正在學習使用python進行數值計算。我想用中心差分法來計算導數。當我嘗試設置我的間隔dx時,即使實際值是(1/6),python也會將其設置爲0?任何方式擺脫這一點?除以零在遇到double_scalars衍生計算

下面的代碼:

import numpy as np 
import matplotlib.pyplot as plt 

a = 0 
b = 1 
n = 7 
dx = np.float(((b-a)/n)) 
x = np.linspace(a,b,n) 
xpp = np.zeros(n) 

for ii in range(1,n-1): 
    xpp[ii] = (x[ii-1] - 2*x[ii+1] + x[ii+1])/(pow(dx,2)) 
print xpp 

回答

2

在Python 2.7,整數除法確實floor

>>> a = 0 
>>> b = 1 
>>> n = 7 
>>> (b - a)/n 
0 

=>dx成爲0.0 =>內部for循環體,它被用作一個dividor。 (0 = 0)

你需要轉換的一個(或兩個)操作數的浮動,以防止地板分:

>>> float(b - a)/n 
0.14285714285714285 
+0

酷!謝了哥們!解決了我的問題:) –

0

還可以導入以下未來避免地板師。

from __future__ import division