Я хочу оценить следующую формулу:
c = exp{x}*erfc{y}
(см. Определения x
и y
в приведенном ниже коде.)
Проблема в том, что x и y становятся достаточно большими, и я получаю очень большие значения для exp{x}
и очень маленькие значения для erfc(y)
.
import numpy as np
import scipy as sci
k = 5.7e-3
D = 1.53e-8
R = 1.5e-5
r = 1e-6
t = np.linspace(0.0,12,10)
x = (r/R) + (D/(R*R) - k)*t
y = (r/(2*np.sqrt(D*t))) + np.sqrt(D*t)/R
exp_x = np.exp(x)
erfc_y = sci.special.erfc(y)
print("x = \n{} ".format(x))
print("y = \n{}".format(y))
print("exp(x) = \n{}".format(exp_x))
print("erfc(y) = \n{}".format(erfc_y))
print("exp(x) * erfc(y)= \n{}".format(exp_x*erfc_y))
Моя идея состояла в том, чтобы изменить оценку на
log{exp(x)*erfc(y)} = log{exp(x)} + log{erfc(y)} = x + log{erfc(y)}
потом я могу вычислить
exp(x + log{erfc(y)})
Но вот проблема:
Когда я хочу вычислить
log{erfc(y)} = log{1 - erfc(y)}
У меня похожая проблема, что erfc будет близко к 1, и у меня будут проблемы с точностью.
Есть идеи, чтобы решить мою проблему?