【问题标题】:divide by zero encountered in double_scalars for derivative calculations在 double_scalars 中除以零以进行导数计算
【发布时间】:2015-12-17 04:38:52
【问题描述】:

我正在学习使用 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

【问题讨论】:

    标签: python python-2.7 numpy


    【解决方案1】:

    在 Python 2.7 中,整数除法是 floor:

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

    => dx 变成0.0 => 在for 循环体内,它被用作一个分隔符。 (02 = 0)

    您需要将一个(或两个)操作数转换为浮点数以防止除法:

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

    【讨论】:

    • 酷!谢了哥们!解决了我的问题:)
    【解决方案2】:

    你也可以在future下面导入,避免地板分割。

    from __future__ import division
    

    【讨论】:

      猜你喜欢
      • 2019-05-08
      • 1970-01-01
      • 2019-09-03
      • 2020-07-31
      • 2018-08-07
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多