在double_scalars中遇到的除以零的导数计算

时间:2015-12-17 04:38:53

标签: python python-2.7 numpy

我正在学习使用python进行数值计算。我想用中心差分法计算导数。当我尝试设置我的间隔dx时,即使实际值为(1/6),python也会将其设为0?有什么方法可以摆脱这个吗?

以下是代码:

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 个答案:

答案 0 :(得分:4)

在Python 2.7中,整数除法执行floor

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

=> dx成为0.0 =>在for循环体内,它被用作dividor。 (0 2 = 0)

您需要将一个(或两个)操作数转换为float以防止分层:

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

答案 1 :(得分:1)

您也可以在以后下方导入,以避免分手。

class cTextbox : public cControl{
public:
    ...
protected:
    void onUpdate(bool* keys);
}

class cControl{
public:
    ...
protected:
    virtual void onUpdate(bool*) = 0;
}