Почему mpmath медленнее чем gsl с той же точностью? И какие результаты верны?

Я просто проверяю функцию Клаузена в mpmath и gsl. Код ниже:

mp.prec = 53
time_begin = time.time()
print "mpmath results:"
print clsin(2,3.1415926535897327)
print "time1:"
print (time.time() - time_begin)
time_begin = time.time()
print "gsl results:"
print gsl_sf_clausen(3.1415926535897327)
print "time2"
print (time.time() - time_begin)

Результаты ниже:

mpmath results:
4.19482951966115e-14
time1:
0.00391387939453
gsl results:
4.18544219761e-14
time2
2.69412994385e-05

Из результатов, которые я нашел с той же точностью, результаты очень разные (mpmath:4.19... но gsl:4.18...), я хочу знать, какая из них более точная? И mpmath более чем в 100 раз медленнее, чем gsl_sf_clausen с той же точностью, почему?

Спасибо

1 ответ

Решение

Как вы, наверное, знаете, функция Клаузена равна 0 при x = pi. Вы кормите его числом, очень близким к пи. В зависимости от того, как реализована оценка функции Клаузена, вычисления в этой точке могут повлечь потерю значимости из-за почти полной отмены терминов.

Предположительно, gsl и mpmath не имеют идентичной реализации функции Клаузена, поэтому их время выполнения и выходные данные различаются. Это не необычно. Даже для чего-то такого простого, как нахождение обратной матрицы, вы можете столкнуться с тем, что разные пакеты возвращают разные результаты, работая с одинаковым уровнем точности.

Wolfram Alpha возвращает 4.19620646966946940430... e-14, что ближе к значению mpmath. А также mpmath сам согласится с WolframAlpha, если точность увеличится.

>>> mp.dps = 25
>>> clsin(2, mpf('3.1415926535897327'))
mpf('4.196206469668926047718406898e-14')

Что подводит нас к другому моменту: mpmath предназначен для работы с любой заданной точностью чисел с плавающей запятой, в то время как gsl похоже, использует поплавки двойной точности (я не знаю, что это за внутренности). Поэтому неудивительно, что алгоритм mpmathРазработанный с мыслью, что от него может потребоваться очень высокая точность, для запуска требуется больше времени.

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