【发布时间】:2021-09-24 13:58:48
【问题描述】:
我想在 Python 中对以下表达式进行数值计算
exp((x^2))*Erfc(x).
其中 Erfc 表示互补误差函数 (https://en.wikipedia.org/wiki/Error_function#Complementary_error_function)。 Erfc(x) 可从 Scipy Special 获得。即使对于较大的 x,$exp(x^2)$ 发散,该乘积也具有有限值。准确的说
Lim x->\infinity exp((x^2))*Erfc(x) = 1/(sqrt(Pi) * x)。
不幸的是,Python 不计算这个表达式,并且对于较大的 x 值返回 NaN。有没有办法实现这个函数,使得对于大 x,Python 仍然产生正确的答案? (我的代码和输出如下。)
import numpy as np
import scipy
from scipy import special as spl
def my_fun(x):
return np.exp(x**2)*spl.erfc(x);
print (my_fun(10))
print (my_fun(50))
print (my_fun(100))
0.05614099274382259
Warning (from warnings module):
File "/Users/spjoy/Working/Projects/Wigner Crystal/Python/num_eval.py", line 7
return np.exp(x**2)*spl.erfc(x);
RuntimeWarning: overflow encountered in exp
Warning (from warnings module):
File "/Users/spjoy/Working/Projects/Wigner Crystal/Python/num_eval.py", line 7
return np.exp(x**2)*spl.erfc(x);
RuntimeWarning: invalid value encountered in double_scalars
nan
nan
【问题讨论】:
-
你能告诉我们你的 Python 代码和你所做的测试吗?
-
我已经在我更新的问题中添加了代码和输出,谢谢!
标签: python function numpy scipy nan