Кубическая сплайн-интерполяция

 

Кубическая сплайн-интерполяция позволяет провести кривую через набор точек таким образом, что первые и вторые производные кривой непрерывны в каждой точке. Эта кривая образуется путем создания ряда кубических полиномов, проходящих через наборы из трех смежных точек, состыкованных друг с другом. Для построения кубической сплайн – интерполяции в MathCad 2001 имеются встроенные функции interp() и применяемые совместно с ней функции cspline(vx,vy), lspline(vx,vy) и pspline(vx,vy). Формат функции interp()

 

interp(vs,vx,vy,r)

 

где vs – вектор вторых производных, полученный одной из вспомогательных функций cspline(vx,vy), lspline(vx,vy) и pspline(vx,vy);

  vx – вектор неизвестных, полученный из таблицы данных (характерно и для вспомогательных функций);

  vy – вектор значений функции, полученный из таблицы данных (характерно и для вспомогательных функций);

  r – значение аргумента при котором вычисляется значение функции (подобно параметру r функции linterp()).

При выполнении интерполяции для вычисления вектора vs можно пользоваться тремя функциями:

    cspline(vx,vy) – генерирует кривую сплайна, которая может быть кубическим полиномом в граничных точках;

    lspline(vx,vy) – генерирует кривую сплайна, которая приближается к прямой линии в граничных точках;

    pspline(vx,vy) – генерирует кривую сплайна, которая приближается к параболе в граничных точках.

Для наглядности построим графики кубической интерполяции, используя все три вспомогательные функции. В качестве исходных данных возъмем данные из предыдущего примера, а т.е.:

 

Для построения графиков выполним следующие действия:

 

 

·
Определение вектора неизвестных (берется из таблицы данных. В нашем случае Х можно записать в виде ранжированной переменной, потому что нетрудно увидеть зависимость между последующим и предыдущим значением каждого из Х):

 

 

· Определение вектора Y (берется из таблицы данных):

 

 

· Встроенная функция interp() вычисляет значение в конкретной точке (последний параметр функции), но так как нам необходимо построить график, то мы заменим параметр x0 неизвестной (например, r), не имеющей дискретного значения, и подставим эту переменную в нижний местозаполнитель декартовой системы координат (плоский график). Построим график, отформатируем его по своему усмотрению:

 


На графике показаны узлы сетки и графики, построенные с помощью различных вспомогательных функций (думаю разобраться, что есть что не составит труда) На графике видно, что графики практически схожи, но если приглядеться, а точнее применить Zoom (увеличение. Производится путем вызова контекстного меню на графике и выбора пункта Zoom. Далее выделяется, подлежащая увеличению, область на графике и нажимается кнопка Zoom. Примечание: чтобы вернуться в нормальный режим необходимо нажать Full View (полный вид)) нам представиться следующая картина:

 

 

Данная иллюстрация наглядно показывает различия между вспомогательными функциями.

 

Линейное предсказание

 

Интерполяция дает возможность по значениям табличной функции находить значения в промежуточных точках. Однако бывают случаи, когда необходимо оценить табличную функцию за пределами ее области данных. В MathCAD имеется функция predict(), позволяющая это сделать. Формат функции:

 

predict(vy,m,n)

 

где vy – вектор табличных значений функции (элементы вектора vy должны быть взяты через равные интервалы);

m – число последних исходных значений табличной функции, по которым выполняется прогноз;

  n – число предсказанных значений табличной функции.

Рассмотрим применение функции предсказания на примере:


Пусть дана таблица данных

 

· Определение вектора Y (берется из таблицы данных):

 

 

· Определение m, число известных значений Y по которым будет построена экстраполяция, в нашем случае m = 8;

· Определение n, число значений Y, по которым строится экстраполяция + количество точек которое необходимо предсказать. В нашем случае n = 13.

· Построим график функции предсказания. Для наглядности построим на одном графике исходную функцию (построим по точкам) и функцию предсказания, причем таким образом, чтобы последняя являлась продолжением первой функции. Для этого необходимо провести некоторые манипуляции:

Ø Так как мы имеем 8 значений исходных данных, то будем строить исходную функцию в 8 – ми точках:

 

 

Ø Так как мы собираемся строить экстраполяцию для 13 – ти точек, то:

 

 

Ø Построим график функций. Причем необходимо обратить внимание, что мы сдвинули начало координат для функции предсказания на 8 точек вправо (потому что исходная функция кончается на 8 – й точке) с помощью выражения j+8.

 

 

Дата: 2018-09-13, просмотров: 431.