numpy:除以零误差,但数学上的函数显然已定义

时间:2019-05-29 17:27:49

标签: python-3.x numpy

我正在测试一些适合数据的功能,其中一个功能(二维)是

f(x) = (1/(1-x)) / (1 + 1/(1-x))

根据WolframGoogle绘图仪,这将为您提供结果

f(1) = 1

我试图在不对案例进行硬编码的情况下使它起作用

if x == 1:
    return 1

但是我最终得到一个nan和一个RunTimeWarning,通知我我确实被零除。

import numpy as np


def f(x):
    return 1/(1-x) / (1 + 1/(1-x))


x_range = np.linspace(0, 1, 50)
y = f(x_range)
print(y)

是否有比仅引入硬编码的if更好的解决方案?

2 个答案:

答案 0 :(得分:1)

是否有理由将其保留为这种形式,您可以将其简化为:

def f(x):
    return 1/(2-x)

Wolfram和Google可能也进行了某种代数简化。

答案 1 :(得分:0)

只需简化f(x)=(1 /(1-x))/(1 + 1 /(1-x))的方程式。简化的方程将是(1 /(2-x))。现在将程序更新为:

import numpy as np
def f(x):
    return 1/(2-x)
x_range = np.linspace(0, 1, 50)
y = f(x_range)
print(y)

输出:

[0.5        0.50515464 0.51041667 0.51578947 0.5212766  0.52688172
 0.5326087  0.53846154 0.54444444 0.5505618  0.55681818 0.56321839
 0.56976744 0.57647059 0.58333333 0.59036145 0.59756098 0.60493827
 0.6125     0.62025316 0.62820513 0.63636364 0.64473684 0.65333333
 0.66216216 0.67123288 0.68055556 0.69014085 0.7        0.71014493
 0.72058824 0.73134328 0.74242424 0.75384615 0.765625   0.77777778
 0.79032258 0.80327869 0.81666667 0.83050847 0.84482759 0.85964912
 0.875      0.89090909 0.90740741 0.9245283  0.94230769 0.96078431
 0.98       1.        ]