Составители:
которая позволяет корректно обрабатывать вырожденные случаи (например, точки с совпадающими
абсциссами).
Этот алгоритм реализован в подпрограмме BuildLinearLeastSquares.
Полиномиальная аппроксимация по МНК
Частой ошибкой является использование для полиномиальной аппроксимации следующего набора базисных
функций: fi = x
i
. Этот базис является наиболее естественным и, пожалуй, первым приходящим в голову
вариантом. Но хотя с этим базисом удобно работать, он очень плохо обусловлен. Причем проблемы
появляются даже при умеренном числе базисных функций (порядка десяти). Эта проблема была решена путем
выбора базиса из полиномов Чебышева вместо базиса из степеней x. Полиномы Чебышева
линейно
выражаются через степени x и наоборот, так что эти базисы эквивалентны. Однако обусловленность базиса из
полиномов Чебышева значительно лучше, чем у базиса из степеней x. Это позволяет без проблем
осуществлять аппроксимацию полиномами практически любой степени.
Алгоритм работает следующим образом. Входной набор точек масштабируется и приводится к интервалу
[
−1,1], после чего на этом отрезке строится базис из полиномов Чебышева. После аппроксимации по МНК
пользователь получает набор коэффициентов при полиномах Чебышева. Эта задача решается подпрограммой
BuildChebyshevLeastSquares. Полученные коэффициенты могут быть переданы в подпрограмму
CalculateChebyshevLeastSquares, которая вычисляет значение аппроксимирующей функции в требующей
точке.
Если специфика решаемой задачи требует использования именно базиса из
степеней x, то можно
воспользоваться подпрограммой BuildPolynomialLeastSquares. Эта подпрограмма решает задачу с
использованием полиномов Чебышева, после чего преобразовывает результат к степеням x. Это позволяет
отчасти сохранить точность вычислений, т.к. все промежуточные расчеты ведутся в хорошо обусловленном
базисе. Однако все же предпочтительным вариантом является базис из полиномов Чебышева.
В некоторых случаях требуется решение задачи
с ограничениями. Например, мы можем знать, что
аппроксимируемая функция равна 1 на границе, т.е. при x = 0. Если у нас имеется достаточно большое
количество точек в окрестностях x = 0, то построенная функция пройдет в окрестностях точки (0,1). Однако
точного совпадения скорее всего не будет. Во многих случаях точное соблюдение каких-то граничных
условий не требуется.
Однако иногда встречаются задачи, требующие именно точного прохождения
аппроксимирующей функции через несколько заданных точек или равенства производной в некоторых точках
заранее заданным значениям. При этом особые требования предъявляются только к нескольким точкам xk . В
остальных же точках мы просто минимизируем сумму квадратов отклонений.
В таком случае имеет место задача аппроксимации с ограничениями
вида
или
Для решения таких задач предназначен специальный алгоритм, реализованный в подпрограмме
BuildChebyshevLeastSquaresConstrained. В настоящее время подпрограмма способна обрабатывать
произвольное количество ограничений (но строго меньшее, чем M) на значение функции и её первой
производной. Ограничения на значения производных высших порядков не поддерживаются.
4.3Аппроксимация кубическими сплайнами
Ещё одним возможным набором базисных функций являются кубические сплайны. Множество сплайнов с
общими узлами образует линейное пространство, что позволяет применить к ним линейный метод
наименьших квадратов. В качестве базисных функций выбираются сплайны, удовлетворяющие следующим
условиям:
Для простоты мы предполагаем, что аппроксимация строится на отрезке [0,M-1], с узлами, равномерно
распределенными по отрезку. Разумеется, в реальности отрезок, на котором осуществляется аппроксимация,
может быть любым (однако равномерность распределения узлов сохраняется). На графике ниже приведен
пример такой системы базисных функций:
Страницы
- « первая
- ‹ предыдущая
- …
- 90
- 91
- 92
- 93
- 94
- …
- следующая ›
- последняя »
