Інтерполяція Ерміта.
Кубічні сплайни Ерміта
Формула
p
(
t
)
=
(
2
t
3
−
3
t
2
+
1
)
p
0
+
(
t
3
−
2
t
2
+
t
)
m
0
+
(
−
2
t
3
+
3
t
2
)
p
1
+
(
t
3
−
t
2
)
m
1
{\displaystyle {\boldsymbol {p}}(t)=(2t^{3}-3t^{2}+1){\boldsymbol {p}}_{0}+(t^{3}-2t^{2}+t){\boldsymbol {m}}_{0}+(-2t^{3}+3t^{2}){\boldsymbol {p}}_{1}+(t^{3}-t^{2}){\boldsymbol {m}}_{1}}
Підтримується Вікіпроєктом
Вікіпедія:Проєкт:Математика
Кубічні сплайни Ерміта — кубічні сплайни , що використовують інтерполювання поліномами методом Ерміта. Цей метод інтерполювання використовує дві контрольні точки та два вектори напрямків.
Названі на честь французького математика Шарля Ерміта .
Кубічні поліноміальні сплайни широко використовуються у галузі комп'ютерної графіки та геометричного моделювання для отримання кривих або траєкторії руху, що проходять через задані точки площини або тривимірного простору .
f(t)
f(0)
f(1)
f'(0)
f'(1)
h
00
(
t
)
{\displaystyle \ h_{00}(t)}
1
0
0
0
h
01
(
t
)
{\displaystyle \ h_{01}(t)}
0
1
0
0
h
10
(
t
)
{\displaystyle \ h_{10}(t)}
0
0
1
0
h
11
(
t
)
{\displaystyle \ h_{11}(t)}
0
0
0
1
p
(
t
)
{\displaystyle \mathbf {p} (t)}
p
0
{\displaystyle \mathbf {p_{0}} }
p
1
{\displaystyle \mathbf {p_{1}} }
m
0
{\displaystyle \mathbf {m_{0}} }
m
1
{\displaystyle \mathbf {m_{1}} }
Задано початкову точку
p
0
{\displaystyle p_{0}}
з початковим вектором
m
0
{\displaystyle m_{0}}
при
t
=
0
{\displaystyle t=0}
та кінцеву точку
p
1
{\displaystyle p_{1}}
з кінцевим вектором
m
1
{\displaystyle m_{1}}
при
t
=
1
{\displaystyle t=1}
.
Для кубічного полінома та його похідної
p
(
t
)
=
a
0
+
a
1
t
+
a
2
t
2
+
a
3
t
3
{\displaystyle \mathbf {p} (t)=a_{0}+a_{1}t+a_{2}t^{2}+a_{3}t^{3}}
p
′
(
t
)
=
a
1
+
2
a
2
t
+
3
a
3
t
2
{\displaystyle \mathbf {p} \prime (t)=a_{1}+2a_{2}t+3a_{3}t^{2}}
виразимо коефіцієнти
a
0
,
a
1
,
a
2
,
a
3
{\displaystyle a_{0},a_{1},a_{2},a_{3}}
через
p
(
0
)
,
p
(
1
)
,
p
′
(
0
)
,
p
′
(
1
)
{\displaystyle \mathbf {p} (0),\mathbf {p} (1),\mathbf {p} \prime (0),\mathbf {p} \prime (1)}
:
{
p
(
0
)
=
a
0
p
(
1
)
=
a
0
+
a
1
+
a
2
+
a
3
p
′
(
0
)
=
a
1
p
′
(
1
)
=
a
1
+
2
a
2
+
3
a
3
⇒
{
a
0
=
p
(
0
)
a
1
=
p
′
(
0
)
a
2
=
3
(
p
(
1
)
−
p
(
0
)
)
−
2
p
′
(
0
)
−
p
′
(
1
)
a
3
=
p
′
(
0
)
+
p
′
(
1
)
−
2
(
p
(
1
)
−
p
(
0
)
)
{\displaystyle {\begin{cases}\mathbf {p} (0)=a_{0}\\\mathbf {p} (1)=a_{0}+a_{1}+a_{2}+a_{3}\\\mathbf {p} \prime (0)=a_{1}\\\mathbf {p} \prime (1)=a_{1}+2a_{2}+3a_{3}\end{cases}}\Rightarrow {\begin{cases}a_{0}=\mathbf {p} (0)\\a_{1}=\mathbf {p} \prime (0)\\a_{2}=3(\mathbf {p} (1)-\mathbf {p} (0))-2\mathbf {p} \prime (0)-\mathbf {p} \prime (1)\\a_{3}=\mathbf {p} \prime (0)+\mathbf {p} \prime (1)-2(\mathbf {p} (1)-\mathbf {p} (0))\end{cases}}}
Підставивши значення полінома та його похідної із таблиці справа, отримаємо чотири базові ермітові поліноми:
Базис для кубічних ермітових сплайнів.
h
00
(
t
)
=
2
t
3
−
3
t
2
+
1
=
(
1
−
t
)
2
(
1
+
2
t
)
h
01
(
t
)
=
−
2
t
3
+
3
t
2
=
t
2
(
3
−
2
t
)
h
10
(
t
)
=
t
3
−
2
t
2
+
t
=
t
(
1
−
t
)
2
h
11
(
t
)
=
t
3
−
t
2
=
t
2
(
t
−
1
)
{\displaystyle {\begin{matrix}h_{00}(t)&=&2t^{3}-3t^{2}+1&=&(1-t)^{2}(1+2t)\\h_{01}(t)&=&-2t^{3}+3t^{2}&=&t^{2}(3-2t)\\h_{10}(t)&=&t^{3}-2t^{2}+t&=&t(1-t)^{2}\\h_{11}(t)&=&t^{3}-t^{2}&=&t^{2}(t-1)\\\end{matrix}}}
Тоді інтерполяційний поліном визначається як лінійна комбінація чотирьох базових:
p
(
t
)
=
h
00
(
t
)
p
0
+
h
10
(
t
)
m
0
+
h
01
(
t
)
p
1
+
h
11
(
t
)
m
1
,
t
∈
[
0
,
1
]
{\displaystyle \mathbf {p} (t)=h_{00}(t)\mathbf {p_{0}} +h_{10}(t)\mathbf {m_{0}} +h_{01}(t)\mathbf {p_{1}} +h_{11}(t)\mathbf {m_{1}} ,\qquad t\in [0,1]}
Існують такі властивості симетрії:
h
00
(
t
)
+
h
01
(
t
)
=
1
{\displaystyle \ h_{00}(t)+h_{01}(t)=1}
— симетрія відносно осі y=1/2,
h
00
(
t
)
=
h
01
(
1
−
t
)
{\displaystyle \ h_{00}(t)=h_{01}(1-t)}
— симетрія відносно осі x=1/2,
h
10
(
t
)
=
−
h
11
(
1
−
t
)
{\displaystyle \ h_{10}(t)=-h_{11}(1-t)}
— симетрія відносно точки (0, 1/2).
Інтерполяція на інтервалі
(
x
k
,
x
k
+
1
)
{\displaystyle (x_{k}\,,\;x_{k+1})}
[ ред. | ред. код ]
Інтерполяція на цьому інтервалі задається формулою
p
(
x
)
=
h
00
(
t
)
p
0
+
h
10
(
t
)
h
m
0
+
h
01
(
t
)
p
1
+
h
11
(
t
)
h
m
1
,
h
=
x
k
+
1
−
x
k
,
t
=
(
x
−
x
k
)
/
h
.
{\displaystyle \mathbf {p} (x)=h_{00}(t)\mathbf {p_{0}} +h_{10}(t)h\mathbf {m_{0}} +h_{01}(t)\mathbf {p_{1}} +h_{11}(t)h\mathbf {m_{1}} ,\qquad h=x_{k+1}-x_{k},\qquad t=(x-x_{k})/h.}
Чотири базові ермітові поліноми легко виразити через поліноми Бернштейна , що є базисними для кривих Без'є
h
00
(
t
)
=
(
1
−
t
)
2
(
1
+
2
t
)
=
(
1
−
t
)
3
+
3
t
(
1
−
t
)
2
=
b
0
,
3
(
t
)
+
b
1
,
3
(
t
)
h
01
(
t
)
=
t
2
(
3
−
2
t
)
=
t
3
+
3
t
2
(
1
−
t
)
=
b
3
,
3
(
t
)
+
b
2
,
3
(
t
)
h
10
(
t
)
=
t
(
1
−
t
)
2
=
b
1
,
3
(
t
)
/
3
h
11
(
t
)
=
t
2
(
t
−
1
)
=
−
b
2
,
3
(
t
)
/
3
{\displaystyle {\begin{matrix}h_{00}(t)&=&(1-t)^{2}(1+2t)&=&(1-t)^{3}+3t(1-t)^{2}&=&\mathbf {b} _{0,3}(t)+\mathbf {b} _{1,3}(t)\\h_{01}(t)&=&t^{2}(3-2t)&=&t^{3}+3t^{2}(1-t)&=&\mathbf {b} _{3,3}(t)+\mathbf {b} _{2,3}(t)\\h_{10}(t)&=&t(1-t)^{2}&=&&&\mathbf {b} _{1,3}(t)/3\\h_{11}(t)&=&t^{2}(t-1)&=&&&-\mathbf {b} _{2,3}(t)/3\\\end{matrix}}}
Тому кубічний сплайн Ерміта з параметрами
(
p
0
,
p
1
,
m
0
,
m
1
)
{\displaystyle \mathbf {\left(p_{0},p_{1},m_{0},m_{1}\right)} }
аналогічний кубічній кривій Без'є з опорними вершинами
(
p
0
,
p
1
,
p
0
+
m
0
3
,
p
1
−
m
1
3
)
.
{\displaystyle \mathbf {\left(p_{0},p_{1},p_{0}+{\frac {m_{0}}{3}},p_{1}-{\frac {m_{1}}{3}}\right)} .}
Інтерполяції набору точок
(
x
k
,
p
k
)
{\displaystyle (x_{k},{\boldsymbol {p}}_{k})}
для
k
=
1
,
…
,
n
{\displaystyle \ k=1,\ldots ,n}
, здійснюється для кожного інтервалу, і параметри для однієї точки в різних інтервалах вибираються однаковими. Інтерполяційний сплайн отримується неперервно-диференційовним на
(
x
1
,
x
n
)
.
{\displaystyle \ (x_{1},x_{n}).}
Існують декілька способів задання параметрів.
Найпростіший спосіб із застосуванням трьох контрольних точок:
m
k
=
p
k
+
1
−
p
k
2
(
x
k
+
1
−
x
k
)
+
p
k
−
p
k
−
1
2
(
x
k
−
x
k
−
1
)
{\displaystyle {\boldsymbol {m}}_{k}={\frac {{\boldsymbol {p}}_{k+1}-{\boldsymbol {p}}_{k}}{2(x_{k+1}-x_{k})}}+{\frac {{\boldsymbol {p}}_{k}-{\boldsymbol {p}}_{k-1}}{2(x_{k}-x_{k-1})}}}
для індексів
k
=
2
,
…
,
n
−
1
{\displaystyle k=2,\ldots ,n-1}
, і односторонні різниці на кінцях.
m
k
=
(
1
−
c
)
p
k
+
1
−
p
k
−
1
2
{\displaystyle {\boldsymbol {m}}_{k}=(1-c){\frac {{\boldsymbol {p}}_{k+1}-{\boldsymbol {p}}_{k-1}}{2}}}
Параметр
c
∈
(
0
,
1
)
{\displaystyle c\in (0,1)}
.
m
k
=
p
k
+
1
−
p
k
−
1
2
{\displaystyle {\boldsymbol {m}}_{k}={\frac {{\boldsymbol {p}}_{k+1}-{\boldsymbol {p}}_{k-1}}{2}}}