Интерполяционный многочлен Эрмита

Общая информация

Интерполирование по Эрмиту есть специальный вид многоинтервальной интерполяции, при котором интерполирующий многочлен $H_n(х)$ обеспечивает не только равенство $H_n(х)$ значениям $f(x)$, но и совпадение некоторого количества производных в узлах интерполяции.

Многочлен Эрмита единственный, это следует из однозначности его построения.

Формула для остаточного члена при интерполяции с кратными узлами для функции $f ∈ C$ $m[a, b]$ приведена в следующей теореме:

Теорема. Если функция $f(x)$ является $m = a_1+a_2+\cdots +a_n$ раз непрерывно дифференцируемой, то существует точка $ξ$ такая, что

$$r(x)= f(x) - H(x) = \frac{f^{(m)}(\xi )}{m!}\Omega (x),$$

где $\Omega (x) = (x-x_1)^{a_1}(x-x_2)^{a_2}\cdots (x-x_n)^{a_n}$.

Алгоритм построения

Представим себе, что на плоскости в координатах x,y нарисовано несколько точек. Задача соединить их плавной кривой так чтобы в итоге получился график гладкой функции y=ƒ(x).

На каждом отдельном участке между соседними точками это должен быть многочлен третьей степени и при этом соседние многочлены должны каким-то образом гладко сопрягаться.

Для того, чтобы решить эту задачу, сначала решим частную задачу: представим себе что на отрезке [0; 1] у нас задана функция - многочлен третьей степени:

ƒ(x)=а0+a1x+a2x2+a3x3

Нам неизвестны коэффициенты a0,a1,a2,a3 и мы хотим определить их по следующим данным: ƒ(0)=y0, ƒ(1)=y1, ƒ' (0)=z0, ƒ'(1)=z1

Производная функции ƒ определяется следующим образом:

ƒ'(x)=a1+2a2x+3a3x2

Запишем наши уравнения:

f(0)=a0=y0

f'(0)=a1=z0

f(1)=a0+a1+a2+a3=y1

f'(1)=a1+2a2+3a3=z1

Было бы удобно записать эти уравнения в матричном виде:
$$
P = \begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
1 & 1 & 1 & 1 \\
0 & 1 & 2 & 3 \\
\end{bmatrix}
$$

Вектор-столбец неизвестных переменных обозначим
$$
A = \begin{bmatrix}
a_0 \\
a_1 \\
a_2 \\
a_3 \\
\end{bmatrix}
$$

Правая часть системы линейных уравнений, это столбец с координатами y0,z0,y1,z1
$$
B = \begin{bmatrix}
y_0 \\
z_0 \\
y_1 \\
z_1 \\
\end{bmatrix}
$$

Тогда нам нужно решить систему линейных уравнений P*A=B

В общем случае решением будет:

A=P-1*B

Воспользуемся алгоритмом Гаусса: для этого в левой части таблицы запишем матрицу P, a справа приписывается единичная матрица

$$
\begin{bmatrix}
\left.\begin{matrix}
1& 0 & 0 & 0 \\
0& 1& 0& 0 \\
1& 1& 1& 1\\
0& 1& 2& 3\\
\end{matrix}\right| &
\begin{matrix}
1& 0& 0& 0 \\
0& 1& 0& 0\\
0& 0& 1& 0\\
0& 0& 0& 1\\
\end{matrix}
\end{bmatrix}
$$

Задача привести матрицу некоторыми преобразованиями к такому виду, чтобы слева оказалась единичная матрица, а то, что получим в правой половине и будет обратной матрицей

(P│E)→ (E│P-1)

Итак,

По значениям в концах отрезка [0,1] и их производных, мы восстановили всю функцию:

a0=y0
a1=z0
a2=-3y0-2z0+3y1-z1
a3=2y0+z0-2y1+z1
ƒ(x)=y0+z0x+(-3y0-2z0+3y1-z1)x2+(2y0+z0-2y1+z1)x3

Пусть нужно произвести интерполяцию на отрезке [x0;x1], тогда график функции необходимо сдвинуть на x0 и растянуть в x1-x0 раз, а поскольку z0,z1 в x1-x0 раз меньше, чем требуется, то их необходимо домножить.

Для удобства введем k=(x-x0)/(x1-x0) и h=x1-x0.

Функция примет вид:

ƒ(k)=y0+z0hk+(-3y0-2z0h+3y1-z1h)k2+(2y0+z0h-2y1+z1h)k3

Аналогичным образом определяется многочлен любой степени.

При добавлении значений производных (до некоторого порядка m) в точках добавляются дополнительные слагаемые.
Точность растет с увеличением количества известных значений производных в точках.