RuntimeWarning:在与 np.sqrt 相关的 double_scalars 中遇到无效值
RuntimeWarning: invalid value encountered in double_scalars related to np.sqrt
我定义了一个包含 np.sqrt(正数)的数学函数。
它 return 是我的 RuntimeWarning。
在我将它简化为任何人都可以手动求解的非常简单的数学函数之后,它仍然return我的错误。
下面是简化的函数:
import numpy as np
n=30
def f0(x,k):
bot = 9.37 * 10**(-4) * k**(0.25)
x_0 = 2*bot
#print(x_0)
E_c = 4730 * np.sqrt(k)
#print(E_c)
r = E_c/(E_c - k/bot)
#print(r)
top = x/(1+(x/x_0)**n)**(1/n)
return (top/bot)**r
a = f0(-0.001,36)
它returns:
RuntimeWarning: invalid value encountered in double_scalars
而a
是nan
如果输入x >= 0
效果很好,或者我去掉np.sqrt()
得到np.sqrt()
里面的数的平方根的结果。
这是什么原因。
我注意到 np.sqrt 的类型与另一个数字有点不同。是这个原因吗?
您的问题不在于 numpy
平方根。您尝试 return 到 a
的值涉及将负数提高到 non-integer 次方。这在数学上是未定义的。
虽然我很确定python使用不同的数值近似值,但数学运算是:
x = 5
r = 1.234
x**r # 7.2866680501380845
import math
math.exp(r*math.log(x)) # 7.286668050138084
现在想象一下如果 r
为负数会发生什么:您尝试取负数的自然对数。这将导致 NaN
。根据所使用的功能,您将看到一系列错误。
解决方案是强制数量 top/bot
为正数。
当您使用值 f0(-0.001,36)
调用函数时,您可以看到变量的值。
(top/bot) # value -0.43569721500945896
r # value 2.2355433614695648
有时,当你有负数和分数指数时,你会发现根是虚数,但有时它只会给你带来错误。有关更多信息,您可以查看 .
我定义了一个包含 np.sqrt(正数)的数学函数。 它 return 是我的 RuntimeWarning。
在我将它简化为任何人都可以手动求解的非常简单的数学函数之后,它仍然return我的错误。 下面是简化的函数:
import numpy as np
n=30
def f0(x,k):
bot = 9.37 * 10**(-4) * k**(0.25)
x_0 = 2*bot
#print(x_0)
E_c = 4730 * np.sqrt(k)
#print(E_c)
r = E_c/(E_c - k/bot)
#print(r)
top = x/(1+(x/x_0)**n)**(1/n)
return (top/bot)**r
a = f0(-0.001,36)
它returns:
RuntimeWarning: invalid value encountered in double_scalars
而a
是nan
如果输入x >= 0
效果很好,或者我去掉np.sqrt()
得到np.sqrt()
里面的数的平方根的结果。
这是什么原因。
我注意到 np.sqrt 的类型与另一个数字有点不同。是这个原因吗?
您的问题不在于 numpy
平方根。您尝试 return 到 a
的值涉及将负数提高到 non-integer 次方。这在数学上是未定义的。
虽然我很确定python使用不同的数值近似值,但数学运算是:
x = 5
r = 1.234
x**r # 7.2866680501380845
import math
math.exp(r*math.log(x)) # 7.286668050138084
现在想象一下如果 r
为负数会发生什么:您尝试取负数的自然对数。这将导致 NaN
。根据所使用的功能,您将看到一系列错误。
解决方案是强制数量 top/bot
为正数。
当您使用值 f0(-0.001,36)
调用函数时,您可以看到变量的值。
(top/bot) # value -0.43569721500945896
r # value 2.2355433614695648
有时,当你有负数和分数指数时,你会发现根是虚数,但有时它只会给你带来错误。有关更多信息,您可以查看