Кубическая сплайн-интерполяция позволяет провести кривую через набор точек таким образом, что первые и вторые производные кривой непрерывны в каждой точке. Эта кривая образуется путем создания ряда кубических полиномов, проходящих через наборы из трех смежных точек, состыкованных друг с другом. Для построения кубической сплайн – интерполяции в 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, просмотров: 3439.