Компания ALT Linux
Опубликован: 12.03.2015 | Доступ: свободный | Студентов: 576 / 64 | Длительность: 20:55:00
Лекция 12:

Обработка результатов эксперимента. Интерполяция функций

< Лекция 11 || Лекция 12: 12345

12.2 Интерполяция сплайнами

Рассмотрим один из наиболее распространённых вариантов интерполяции кубическими сплайнами. Было установлено [2], что недеформируемая линейка между соседними углами проходит по линии, удовлетворяющей уравнению

\varphi^{IV}(x)=0. ( 12.7)

Функцию

\varphi(x)
будем использовать для интерполяции зависимости y(x), заданной на интервале (a, b) в узлах
a=x_0,x_1...,x_n=b
значениями
y_0,y_1,...y_n

Кубическим сплайном, интерполирующим на отрезке [a, b] данную функцию y(x), называется функция [2]

g_k(s)=a_k+b_k(s-x_k)+c_k(s-x_k)^2+d_k(s-x_k)^3,s\in[x_k-1,x_k],k=1,2,...,n, ( 12.8)

удовлетворяющая следующим условиям:

  • g_k(x_k)=y_k;g_k(x_{k-1})=y_{k-1} (условие интерполяции в узлах сплайна);
  • функция g(x) дважды непрерывно дифференцируема на интервале [a, b];
  • на концах интервала функция g должна удовлетворять следующим соотношениям g_1^{''}(a)=g_n^{''}(b)=0.

Для построения интерполяционного сплайна необходимо найти 4n коэффициента a_k,b_k,c_k,d_k,(k=1,2,...,n)

Из определения сплайна получаем n + 1 соотношение (12.9)

g_1(x_0)=y_0,g_k(x_k)=y_k,k=1,2,...,n ( 12.9)

Из условий гладкой стыковки звеньев сплайна (во внутренних узловых точках совпадают значения двух соседних звеньев сплайна1Звеном сплайна называется функция g_i(x) на интервале [x_{i-1},x_i], их первые и вторые производные) получаем ещё ряд соотношений (12.10–12.11) [2]:

\begin{aligned}g_{k-1}(x_{k-1})=g_k(x_k)\\g_{k-1}^{'}(x_{k-1})=g_k^{'}(x_k),\\g_{k-1}^{''}(x_{k-1})=g_k^{''}(x_k)\\k=2,3,...,n \end{aligned} ( 12.10)
g_1^{''}(x_0)=0,g_n^{''}(x_n)=0 ( 12.11)

Соотношения (12.9)–(12.11) образуют 4n соотношений для нахождения коэффициентов сплайна. Подставляя выражения функций (12.8) и их производных (12.12)

\begin{aligned}g_k^{'}(s)=b_k+2c_k(s-x_k)+3d_k(s-x_k)^2,\\ g_k^{''}(s)=2c_k+6d_k(s-x_k)\end{aligned} ( 12.12)

в соотношения (12.9)–(12.11) и принимая во внимание соотношение

h_k=x_k-x_{k-1},k=1,2,...,n ( 12.13)

получим следующую систему уравнений (12.14)–(12.20)

a_1-b_1h_1+c_1h_1^2-d_1h_1^3=y_0 ( 12.14)
a_k=y_k,k=1,2,...,n ( 12.15)
a_{k-1}=a_k-b_kh_k+c_kh_k^2-d_kh_k^3,k=2,3,...,n ( 12.16)
b_{k-1}=b_k-2c_kh_k+ 3d_kh_k^2,k=2,3,...,n ( 12.17)
c_{k-1}=c_k-3d_kh_k,k=2,3,...,n ( 12.18)
c_1-3d_1h_1=0 ( 12.19)
c_n=0 ( 12.20)

Задача интерполяции свелась к решению системы (12.14–12.20). Из соотношения (12.15) следует, что все коэффициенты a_k=y_k,k=1,2,...,n. Подставив соотношения (12.14), (12.15) в (12.16) и используя фиктивный коэффициент c_0=0, получим соотношение между b_k,c_k и d_k:b_kh_k-c_kh_k^2+d_kh_k^3=y_k-y_{k-1}

Отсюда коэффициенты b k вычисляются по формуле

b_k=\frac{y_k-y_{k-1}}{h_k}+c_kh_k-d_kh_k^2,k=1,2,...,n ( 12.21)

Из (12.18) и (12.19) выразим d_k через c_k (с учётом коэффициента c_0=0)

d_k =\frac{c_k-c_{k-1}}{3}h_k,k=1,2,...,n ( 12.22)

Подставим (12.22) в (12.21)

b_k = \frac{y_k-y_{k-1}}{h_k}+\frac{2}{3}c_kh_k +\frac{1}{3}h_kc_{k-1},k=1,2,...,n ( 12.23)

Введём обозначение

l_k=\frac{y_k-y_{k-1}}{h_k},k=1,2,...,n ( 12.24)

после чего соотношение (12.23) примет вид:

b_k=l_k+\frac{2}{3}c_kh_k+\frac{1}{3}h_kc_{k-1},k=1,2,...,n ( 12.25)

Подставим (12.25) и (12.22) в соотношение (12.17), получим систему относительно c_k

b_{k-1}c_{k-2}+2(h_{k-1}+h_k)c_k=3(l_k-l_{k-1}),k=2,3,...,n ( 12.26)
c_0=0,c_n=0 ( 12.27)

Систему (12.26) можно решить, используя метод прогонки (http://ru.wikipedia.org/wiki/Метод_прогонки). Этот метод сводится к нахождению прогоночных коэффициентов по формулам прямой прогонки

\delta_1 =-\frac{1}{2}\frac{h_2}{h_1+h2},\lambda_1=\frac{3}{2}\frac{l_2-l_1}{h_1+h_2}, ( 12.28)
\begin{aligned}\delta_{k-1}=-\frac{h_k}{2h_{k-1}+2h_k+h_{k-1}\delta_{k-2}},\\ \lambda_{k-1}=\frac{3l_k-3l_{k-1}-h_{k-1}\lambda_{k-2}}{2h_{k-1}+2h_k+h_{k-1}-\lambda_{k-2},\\k=3,4,...,n \end{aligned} ( 12.29)

а затем к нахождению искомых коэффициентов c_k по формулам обратной прогонки

c_{k-1}=\delta_{k-1}c_k+\lambda_{k-1},k=n,n-1,...,2 ( 12.30)

После нахождения коэффициентов c по формуле (12.30), находим b и d по формулам (12.22), (12.25).

Таким образом, алгоритм расчёта коэффициентов интерполяционного сплайна можно свести к следующим шагам.

Шаг 1. Ввод значений табличной зависимости y(x), массивов x и y.

Шаг 2. Расчёт элементов массивов h и l по формулам (12.13) и (12.25).

Шаг 3. Расчёт массивов прогоночных коэффициентов δ и λ по формулам (12.28), (12.29).

Шаг 4. Расчёт массивов коэффициентов c по формуле (12.30).

Шаг 5. Расчёт массивов коэффициентов b по формуле (12.25).

Шаг 6. Расчёт массивов коэффициентов d по формуле (12.22).

После этого в формулу (12.8) можно подставлять любую точку s и вычислять ожидаемое значение.

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

В случае линейной интерполяции в качестве сплайна выступает линейная функция

f_k(s)=a_k+b_ks,s\in[x_{k-1},x_k],k=1,2,...,n, ( 12.31)

удовлетворяющая условию интерполяции в узлах сплайна f_k(x_k)=y_k;f_k(x_{k-1})=y_{k-1}. Коэффициенты a и b в этом случае рассчитываются по формулам (12.32), которые получаются из уравнения прямой,проходящей через две точки с координатами

(x_{k-1},y_{k-1}),(x_k,y_k)
.

a_k=y_{k-1}-\frac{y_k-y_{k-1}}{x_k-x_{k-1}}x_{k-1},b_k=\frac{y_k-y_{k-1}}{x_k-x_{k-1}} ( 12.32)

Найдя коэффициенты линейного сплайна, можно рассчитать значения в любой точке интервала [x_0, x_n]. Линейная интерполяция даёт достаточно хорошие результаты при практическом счёте внутри интервала [x_0, x_n], когда от получаемой функции не требуют дополнительных свойств (дифференцируемости и т.д.).

Таблица 12.3. Данные к примеру 12.2
Напряжение U_1, В 132 140 150 162 170 180
Мощность P_0, Вт 330 350 385 425 450 485

Рассмотрим реализацию сплайн-интерполяции в Octave. Это можно сделать запрограммировав рассмотренные выше методы сплайн-интерполирования или воспользовавшись функцией interp1:interp1(x, y, xi, method), где x — массив абсцисс экспериментальных точек, y — массив ординат экспериментальных точек, xi — точки, в которых необходимо вычислить значение с помощью сплайна, method — определяет метод построения сплайна, для реализации сплайн-интерполяции параметр method может принимать одно из следующих значений: ’linear’ — линейная интерполяция, ’spline’ — кубический сплайн.

Рассмотрим несколько практических задач.

< Лекция 11 || Лекция 12: 12345
Алексей Игнатьев
Алексей Игнатьев

Возможна ли разработка приложения на Octave с GUI?

Евгений Ветчанин
Евгений Ветчанин

Добрый день. Я самостоятельно изучил курс "Введение в Octave" и хочу получить сертификат. Что нужно сднлать для этого? Нужно ли записаться на персональное обучение с тьютором или достаточно перевести деньги?