(Язык: R) Могу ли я оценить e^x численно устойчивым способом?

Справочная информация: я моделирую данные из модели пропорциональных рисков Кокса. Существует метод, предоставленный Bender et. al (2005). Это объяснено и реализовано в R очень хорошо в этом посте. Сложности моделей Кокса не важны для этого вопроса.

Проблема: мне нужно оценить exp(-1 * X * beta). Из-за некоторых особенностей проблемы, над которой я работаю, X или бета должны быть относительно большими, где-то между 50 и 100. Я считаю, что это вызывает проблемы с точностью.

X.stable = seq(from = 0, to = 1, by  = .1)
beta = 1
exp(-1 * X.stable * beta)

1,0000000 0,9048374 0,8187308 0,7408182 0,6703200 0,6065307 0,5488116 0,4965853 0,4493290 0,4065697 0,3678794

X.unstable = seq(from = 0, to = 100, by  = 5)
exp(-1 * X.unstable * beta)

1.000000e + 00 6.737947e-03 4.539993e-05 3.059023e-07 2.061154e-09 1.388794e-11 9.357623e-14 6.305117e-16 [9] 4.248354e-18 2.862519e-20 1.928750e-22 1.299581e- 24 8.756511e-27 5.900091e-29 3.975450e-31 2.678637e-33 [17] 1.804851e-35 1.216099e-37 8.194013e-40 5.521082e-42 3.720076e-44

Я не верю, что значения в конце верны. R действительно вычислил exp(x) до 44 цифр? В конце концов, я вставляю эти значения в функцию и думаю, что получаю бессмысленные ответы. Я не верю в R или я прав. Если это на самом деле проблема, могу ли я что-нибудь с этим сделать?

Я рассмотрел использование только первых 2-3 членов представления ряда Тейлора e^x. Я мог бы сделать это без проблем. Я не знаю, решит ли это мои проблемы, потому что я предполагаю, что R всегда делает что-то подобное под капотом,

Чтобы свести мой вопрос, могу ли я получить точные значения из функции exp(), даже если аргументы велики?

0 ответов

Другие вопросы по тегам