Как бороться с недостаточным количеством ресурсов в научных вычислениях?

Я работаю над вероятностными моделями, и при выполнении вывода по этим моделям предполагаемые вероятности могут стать очень маленькими. Чтобы избежать переполнения, я сейчас работаю в домене журнала (я храню журнал вероятностей). Умножение вероятностей эквивалентно сложению, а суммирование выполняется по формуле:

log(exp(a) + exp(b)) = log(exp(a - m) + exp(b - m)) + m

где m = max (a, b) .

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

Изменить: из соображений эффективности я ищу решение, использующее примитивные типы, а не объекты, хранящие представление вещественных чисел произвольной точности.

Редактировать 2: Я ищу более быстрое решение, чем трюк с доменом журнала, а не более точное решение. Я доволен полученной точностью, но мне нужен более быстрый метод. В частности, суммирование происходит во время умножения матрицы на вектор, и я хотел бы иметь возможность использовать эффективные методы BLAS.

Решение: после обсуждения с Джонатаном Дурси я решил факторизовать каждую матрицу и вектор по их наибольшему элементу и сохранить этот коэффициент в области журнала.Умножения просты. Перед добавлением я должен разложить одну из добавленных матриц / векторов на соотношение двух факторов. Я обновляю коэффициент каждые десять операций.

11
задан Edouard 23 February 2012 в 13:13
поделиться