Обнаружено переполнение: умножение exp () на erfc () - PullRequest
0 голосов
/ 15 января 2019

Я хочу оценить следующую формулу:

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, и у меня будут проблемы с точностью.

Есть идеи, чтобы решить мою проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...