Полиномиальное решение с произвольной точностью

Мы использовали GSL для решения полиномов. Однако мы хотим использовать произвольную точность для решения полиномов. Я заглянул в GMP и Boost Multi-Precision Library, однако, я не смог найти никакой процедуры для полиномиального решения с коэффициентами с плавающей запятой.

  1. Существует ли какая-либо библиотека, которая является бесплатной и с открытым исходным кодом, для решения полиномов с произвольной точностью или очень высокой точностью (> 200 позиций после десятичной дроби)?

  2. Можно ли использовать процедуру полиномиального решателя GSL с изменением типа данных на произвольную точность GMP?

  3. Было бы легко написать полиномиальный решатель, используя один из стандартных алгоритмов, с типами данных произвольной точности GMP?

Пожалуйста, не стесняйтесь комментировать, если это не ясно.

1

Решение

Если вы знаете какой-либо алгоритм для решения полиномиального уравнения (и вы найдете его во многих учебниках), вы можете адаптировать и кодировать его для использования GMP.

Так как GMP имеет Интерфейс класса C ++ с обычным взглядом operator + … и т. д., вы можете скопировать и вставить некоторый существующий код на C, а затем адаптировать его к GMP.

1

Другие решения

  1. MPSolve предоставляет библиотеку для решения полиномов с использованием мульти-точности. Внутренне он использует GMP.

    Можно наблюдать следующее:

    • Вычисления могут быть выполнены с целочисленной, рациональной и произвольной точностью с плавающей запятой.
    • Коэффициенты полинома и различные другие параметры задаются как входные данные через файл. Можно настроить исходный код так, чтобы он напрямую вызывал функцию из собственной программы.
    • Решения могут быть представлены в различных форматах, таких как экспоненциальный, только реальный и т. Д.
    • Решатель был проверен для нескольких стандартных полиномиальных тестовых случаев и проверен.
    • Решатель использует случайное число, которое просеивается через /dev/random на машине Linux. Это вызывает проблему из-за того, что решатель работает медленно при последующих запусках, так как энтропия Сгенерировано недостаточно перед началом будущих запусков. Это можно обойти, заменив его стандартными псевдослучайными генераторами.
    • Была сделана попытка интегрировать решатель в виде библиотеки. Однако возникают серьезные ошибки сегментации, которые трудно отладить. Следовательно, решатель использовался, вызывая его исполняемый файл. Примечание: это только из моего опыта, и, надеюсь, это может быть сделано лучше.
    • Разрабатывается новая версия C ++, которая, надеюсь, решит эти проблемы.

  1. Утомительно разбирать полиномиальный решатель GSL на использование типа данных GMP. Это будет гораздо проще, а также код будет лучше контролировать и понимать, если решатель написан (см. № 3).

  1. Как предлагается в ответ, GMP а также MPFR могут быть использованы библиотеки с высокой точностью, а полиномиальный решатель может быть записан с использованием стандартных методов полиномиального решения, таких как Алгоритм Дженкинса-Трауба или QR-методы.

Boost C ++ библиотеки обеспечить обертки для использования GMP и MPFR, которые могут быть очень удобны в использовании.

1

По вопросам рекламы [email protected]