Реализация рационального приближения к функции с открытым исходным кодом


15

Я ищу некоторую реализацию с открытым исходным кодом (любой из Python, C, C ++, Fortran в порядке) рационального приближения к функции. Что-то в статье [1]. Я даю ему функцию, и она возвращает мне два полинома, отношение которых является приближением на данном интервале, и ошибка колеблется с той же амплитудой, и это оптимальное приближение или близко к нему.

Вот что я нашел:

  • Похоже, что Chebfun может сделать это, но у меня нет доступа к Matlab *.

  • В разделе 5-13 "Рациональная чебышевская аппроксимация" в "Числовых рецептах" есть простая программа.

  • Mathematica имеет экономную рациональную аппроксимацию и минимальную аппроксимацию

Мне было интересно, есть ли что-то более новое (возможно, лучше протестированное), чем код NR.

Мое приложение состоит в том, что у меня есть набор специальных функций, около 10, которые задаются либо в виде гипергеометрических рядов, либо в виде некоторой формулы, которая имеет числовые сокращения, и я хочу иметь надежную, быструю и точную функцию оценки, которая вызывается в самый внутренний цикл вычисления двухчастичных матричных элементов в вычислениях Хартри Фока. Я привел простой пример функции, которая работает для меня в [2]. Как вы можете видеть, это либо прямая формула, либо ряд около x = 0, который я вычислил с помощью SymPy. Это вроде работает, но точность не велика, около x = 1 теряется около половины значащих цифр (но для x = 0.1, а также x = 1e5 он точен почти для всех значащих цифр). Я ищу лучшее приближение.

[1] Deun, J. & Trefethen, LN (2011). Надежная реализация метода Каратеодори-Фейера для рационального приближения. БИТ Численная математика, 51 (4), 1039–1050. doi: 10.1007 / s10543-011-0331-7 ( электронная печать в июне 2010 г. )

[2] https://gist.github.com/3831580

(*) Ни на веб-сайте chebfun, который дает мне 404, но Педро предположил, что это должно быть моей проблемой поставщика.

Ответы:


4

Может ли это помочь? http://www.alglib.net/interpolation/rational.php


1
Спасибо, думаю это подойдет. Мне нужно научиться им пользоваться. В данный момент я нахожусь под прессом времени, поэтому я просто использовал MiniMaxApproximation от Mathematica, чтобы выполнить работу, но я хочу научиться делать это, используя инструменты с открытым исходным кодом.
Ондржей Чертик

10

Выполнение одноразовых наилучших рациональных приближений часто может быть выполнено с помощью «ручных» итераций алгоритма Ремеза : интерполировать рациональное приближение с (относительными или абсолютными) знакопеременными ошибками знака при первоначальном предположении для точек интерполяции, найти одну (или несколько) точек, где фактическая ошибка превышает ошибки точек интерполяции и точки поворота (замена одной или нескольких угаданных точек на них таким образом, чтобы сохранить ошибки знакопеременных знаков). Это хороший способ понять теорию с нуля. Когда требуемая точность невелика, я обнаружил, что реализация электронных таблиц помогает мне разобраться в вычислениях и адаптировать задачи с помощью метода вырезания и вставки.

Чтобы дать простую иллюстрацию, рассмотрим неполиномиальную функцию на интервале . Секущая линия через конечные точки выглядит следующим образом: Yзнак равно1/Икс1Икс2введите описание изображения здесь

Если мы понизим прямую линию на половину расстояния в точке «максимальной ошибки», то у нас будет три «равно-колебательных» точки абсолютной ошибки, считая две конечные точки и эту критическую точку внутри. Таким образом, наилучшее линейное полиномиальное приближение к гладкой выпуклой функции можно найти почти путем проверки.

Программное обеспечение Chebfun само по себе является открытым исходным кодом ( лицензия BSD-стиль ) , так как v4.0. Не уверен, почему ссылки на их сайт могли дать ошибку 404 в то время, но они сейчас на v5.2.1. (У них также есть репозиторий GitHub .) Проект Chebfun нацелен на более чем рациональные приближения, причем центральным понятием является вектор-подобный синтаксис Matlab для (одномерных действительных) функций на интервале.

Для завершения круга потребовалось бы заставить его работать под Октавой, а не под Матлабом. В 2010 году была опубликована статья о разработчиках Octave, сопровождающая эту тему . В статье 2012 года, опубликованной авторами / авторами Chebfun, говорится, что некоторые усилия были направлены на совместимость Octave с их стороны.

Если посмотреть на страницу проектов, связанных с Chebfun, можно предположить, что, поскольку программное обеспечение Chebfun имеет открытый исходный код, возможно, можно сделать этот порт или использовать один из перечисленных там пакетов с открытым исходным кодом, таких как Olivier Verdier's pychebfun, Python Chebyshev Functions Проект размещен на GitHub.


1
Эта ссылка на веб-сайте Chebfun содержит документацию о том, как делать рациональные приближения, используя ее: chebfun.org/docs/guide/guide04.html
Ondřej Čertík
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.