Если параметр d опущен, то сплайн-функция будет строиться на основе полиномов третьего порядка (кубические сплайны). Важно отметить, что за пределами узловых точек сплайны обеспечивают экстраполяцию, представляя данные в соответствии с первым полином слева и последним справа.
Технику сплайновой аппроксимации наглядно поясняет рис. 5.13. На нем представлено задание векторов узловых точек X и Y и четырех сплайновых функций, по которым построены их графики. Для одной из функций (кубических сплайнов) показан вид сплайновой функции.
Рис. 5.13. Задание сплайновой аппроксимации и построение графиков полученных функций
Как видно из рис. 5.13, сплайновая функция представляет собой кусочную функцию, определяемую на каждом отдельно. При этом на каждом участке такая функция описывается отдельным полиномом соответствующей степени. Функция plot «понимает» такие функции и позволяет без преобразования типов данных строить их графики. Для работы с кусочными функциями можно использовать функции convert и piecewise.
Обычно удобно представлять на одном графике узловые точки и кривые интерполяции и экстраполяции. На рис. 5.14 дан пример такого рода. Здесь для одних и тех же данных, представленных векторами datax и datay заданы все 4 возможные типа сплайновой интерполяции/экстраполяции (заданы числами, указывающими на степень полиномов сплайн-функций).
Рис. 5.14. Сплайновая интерполяция/экстраполяция при степени полиномов от 1 до 4
Вывод указан для степени полиномов 1, что соответствует линейной интерполяции/экстраполяции. Для других случаев вывод заблокирован двоеточием, поскольку выглядит очень громоздким. Тем не менее, читатель может просмотреть его, заменив двоеточие на точку с запятой. С помощью графической функции display выводятся как все кривые сплайновой интерполяции/экстраполяции, так и узловые точки — рис. 5.15. Полезно обратить внимание на плохую пригодность для экстраполяции сплайнов второго порядка.
Рис. 5.15. Графики, построенные документом, представленным на рис. 5.14
Мы вернемся к рассмотрению сплайновой аппроксимации в конце этой главы при описании пакета расширения CurveFitting.
5.7.3. Полиномиальная интерполяция табличных данных
На самом деле выполнять все расчеты для полиномиальной аппроксимации в Maple 9.5 не нужно, поскольку системы имеет реализующую данный алгоритм встроенную функцию interp(X,Y,v) или, в инертной форме, Interp(X,Y, v). Переменная v указывает имя переменной интерполяционного полинома. Векторы X и Y должны содержать
Рисунок 5.16 показывает технику применения полиномиальной аппроксимации на основе функции interp с построением графика исходных точек и аппроксимирующего полинома. Нетрудно заметить, что график полинома проходит точно через исходные точки — они показаны квадратиками.
Рис. 5.16 Пример осуществления полиномиальной аппроксимации для таблично заданных данных (точек)
В этом примере полезно присмотреться к визуализации результатов вычислений и совместному построению графика интерполирующего полинома и исходных точек. В частности, для построения последних использована обычная функция plot, позволяющая выводить на график точки с заданными координатами, причем не только в виде окружностей, но и в виде точек, маленьких крестиков, кружков, квадратов и других фигур. Для выбора типа точек и других параметров графика его надо выделить (установив указатель мыши в поле графика и щелкнув левой кнопкой) и нажать правую кнопку мыши — появится контекстно-зависимое меню с операциями форматирования графика.
Приведем еще несколько примеров использования функции Interp:
> Interp([2,5,6], [9,8,3], х) mod 11;
> alias(alpha=RootOf(х^4+х+1));
> a := Interp([0,1,alpha],[alpha,alpha^2,alpha^3], x) mod 2;
5.8. Применение числовой аппроксимации функций
5.8.1. Состав пакета numapprox
Для более глубоких и продвинутых операций аппроксимации служит специальный пакет расширения numapprox. Этот пакет содержит небольшое число безусловно очень важных функций:
> with(numapprox);
В их числе функции интерполяции и аппроксимации полиномами Чебышева, рядом Тейлора, отношением полиномов (аппроксимация Паде) и др. Все они широко применяются не только в фундаментальной математике, но и при решении многих прикладных задач. Рассмотрим их, начиная с функций аппроксимации аналитических зависимостей.
5.8.2. Разложение функции в ряд Лорана
Для разложения функции f в ряд Лорана с порядком n в окрестности точки
laurent(f, х=а, n)
laurent(f, x, n)
Представленный ниже пример иллюстрирует реализацию разложения в ряд Лорана:
> laurent(f(х),х=0,4);
> laurent(exp(х),х,5);