Переполнение при попытке вычислить соотношение экспоненциальных функций - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь вычислить поточечные значения функции sinh(k-k*x)/sinh(k), где k=1e4 и x принимают значения в диапазоне от 0 до 1. Эта функция, по сути, является суммой экспоненциальных функций. Конечно, попытка вычислить exp(1e4) приводит к ошибкам переполнения. Однако фактическая функция, приведенная выше, принимает значения только от 0 до 1, поэтому мне интересно, есть ли умный способ вычислить функцию для произвольных значений x в указанном диапазоне.

Функция может быть расширена до вида

exp(k-k*x)/(exp(k)-exp(-k)) - exp(k*x-k)/(exp(k)-exp(-k))

Я подумал сначала попытаться взять логарифмы и посмотреть, не упрощается ли что-нибудь, но я не смог найти пути до конца. Кто-нибудь есть совет для меня, как решить эту проблему? Я сейчас работаю в Python, но я думаю, что здесь язык не так важен.

1 Ответ

1 голос
/ 09 июня 2019

Если вы берете y=1-x, вы пытаетесь оценить это

(e^(ky)-e^(-ky)) / (e^k - e^(-k))

То есть

e^(ky) * (1 - e^(-2ky)) / (e^k * (1 - e^(-2k)))

Тогда

e^(ky)/e^k = (e^k)^y * (e^k)^(-1) = (e^k)^(y-1) = e^(k(y-1)) = e^(-kx)

Другой коэффициент (1 - e^(-2ky)) / (1 - e^(-2k)) может быть оценен без переполнения.

...