Я ищу некоторую реализацию с открытым исходным кодом (любой из 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, но Педро предположил, что это должно быть моей проблемой поставщика.
источник
Выполнение одноразовых наилучших рациональных приближений часто может быть выполнено с помощью «ручных» итераций алгоритма Ремеза : интерполировать рациональное приближение с (относительными или абсолютными) знакопеременными ошибками знака при первоначальном предположении для точек интерполяции, найти одну (или несколько) точек, где фактическая ошибка превышает ошибки точек интерполяции и точки поворота (замена одной или нескольких угаданных точек на них таким образом, чтобы сохранить ошибки знакопеременных знаков). Это хороший способ понять теорию с нуля. Когда требуемая точность невелика, я обнаружил, что реализация электронных таблиц помогает мне разобраться в вычислениях и адаптировать задачи с помощью метода вырезания и вставки.
Чтобы дать простую иллюстрацию, рассмотрим неполиномиальную функцию на интервале . Секущая линия через конечные точки выглядит следующим образом:Y= 1 / х 1 ≤ x ≤ 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.источник