Опубликован: 25.10.2007 | Уровень: специалист | Доступ: платный | ВУЗ: Московский физико-технический институт
Лекция 7:

Интерполяция функций

6.12. Интерполяция функций двух переменных

Пусть сетка образована пересечением прямых x = xn, n = 0, ..., N и y = ym, m = 0, ..., M, fnm = f(xn, ym)значение функции в узле { xn, ym }. Воспользуемся, например, аппаратом кусочно - многочленной интерполяции. Для этого сначала реализуется кусочно - многочленная интерполяция заданной степени по x на каждой прямой y = ym. Затем при каждом значении x = xn реализуется кусочно - многочленная интерполяция по y с учетом значений функции, полученных на первом шаге. Так, в случае кусочно - линейной интерполяции по обоим переменным этот метод приводит (для случая прямоугольника x \in [x_n, x_{n + 1}], y \in [y_n, y_{n + 1}] ) к интерполяционному многочлену

\begin{gather*}
F(x, y) = f_{nm} \frac{(x - x_{n + 1})(y - y_{m + 1})}{(x_n - x_{n + 1})(y_m - y_{m + 1})} + 
f_{n + 1, m} \frac{(x - x_n)(y - y_{m + 1})}{(x_{n + 1} - x_n)(y_m - y_{m + 1})} + \\
 + f_{n + 1, m + 1} \frac{(x - x_n)(y - y_m)}{(x_{n + 1} - x_n)(y_{m + 1} - y_m)} + 
f_{n, m + 1} \frac{(x - x_{n + 1})(y - y_m)}{(x_n - x_{n + 1})(y_{m + 1} - y_m)}.
\end{gather*}

Сходным образом можно провести последовательную лагранжеву интерполяцию, но при каждом фиксированном значении m, затем — при каждом фиксированном значении n с учетом первого шага интерполяции. Общая формула такого интерполянта аналогична одномерной формуле для интерполяционного полинома в форме Лагранжа:

\begin{gather*}
L_{NM}  (x, y) = \sum\limits_{n = 0}^{N}{\sum\limits_{m = 0}^{M}{f_{nm}\prod\limits_{\substack{ i = 0 \\ 
i \ne n}} ^{N}{\prod\limits_{\substack{ j = 0 \\ 
j \ne m}}^{M}{\frac{(x - x_i)(y - y_j)}{(x_n - x_i)(y_m - y_j)}}} }}.
\end{gather*}

Если fA, fB, fDзначение функции f(x, y) в вершинах A, B, D, некоторого треугольника на треугольной расчетной сетке, то вычислить приближенное значение функции внутри этого треугольника можно с помощью билинейной функции f(x, y) \approx  F(x, y) = ax + by + c, находя коэффициенты a, b, c из условий

axA + byA + c = fA, 
axB + byB + c = fB, 
axD + byD + c = fD,

где {xA, yA}, {xB, yB}, {xD, yD} - координаты вершин A, B, D. Погрешность такой интерполяции для функции f(x, y) с непрерывными вторыми производными будет O(h2), где hдлина наибольшей стороны треугольника АВD.

6.13. Задачи

  1. Выписать интерполяционные полиномы первой и второй степени в форме Лагранжа и Ньютона.

    Решение. Интерполяционные полиномы первой и второй степени в форме Лагранжа:

    \begin{multline*}
L_1 (t) = f(t_0 )\frac{{t - t_1 }}{{t_0 - t_1 }} + f(t_1 )\frac{{t - t_0 }}{{t_1 - t_0 }}, \\
L_2 (t) = f(t_0 )\frac{{(t - t_1 )(t - t_2 )}}{{(t_0 - t_1 )(t_0 - t_2 )}} + f(t_1 )\frac{{(t - t_0 )(t - t_2 )}}{{(t_1 - t_0 )(t_1 - t_2 )}} + \\
 + f(t_2 )\frac{{(t - t_0 )(t - t_2 )}}{{(t_2 - t_0 )(t_2 - t_1 )}}, 
\end{multline*}

    где t0, t1, t2 — узлы интерполяции, f(t1), f(t2), f(t3) - значения интерполируемой функции.

    Интерполяционные полиномы первой и второй степени в форме Ньютона:

    \begin{gather*}
N_1 (t) = f(t_1 ) + \frac{{f(t_2 ) - f(t_1 )}}{{t_2 - t_1 }}(t - t_1 ), \\  
N_2 (t) = f(t_1 ) + \frac{{f(t_2 ) - f(t_1 )}}{{t_2 - t_1 }}(t - t_1 ) +  \\  
 \frac{1}{{t_3 - t_1 }}\left[{\frac{{f(t_3 ) - f(t_2 )}}{{t_3 - t_2 }} - \frac{{f(t_2 ) - f(t_1 )}}
{{t_2 - t_1 }}}\right](t - t_1 )(t - t_2 ). 
\end{gather*}
  2. Сравните количество арифметических действий, требуемое для вычисления интерполяционного полинома, записанного в двух формах:
    Ln(x) = a0 + a1t + ... + antn, 
    Ln(x) = a0 + t(a1 + t(a2 + t(... (an - 1 + cnt) ...))) (схема Горнера)

    Решение. В первом случае для вычисления значения в одной точке требуется

    $  \frac{n}{2}(n + 1)  $
    умножений и n сложений. Во втором — n умножений и n сложений.

  3. Задана система узлов интерполяции:

    $  t_i = t_0 + \frac{{t_n - t_0 }}{{n - 1}}(i - 1), i = 1, \ldots , n.  $

    Какова погрешность интерполяции, если n = 3?

    Решение. Сделаем замену переменных в выражении для остаточного члена

    $  R_3 (t) = (t - t_0)(t - \frac{t_0 + t_n}{2})(x - t_n), t = \frac{t_0 + t_n}{2} + \frac{t_n - t_0 }{2}z, z \in [- 1;1].  $

    Получим

    $  R_3 (t) = \frac{{(t_n - t_0 )}^3 }{2}(z^3 - z).  $

    Полученный кубический полином имеет на [- 1;1] экстремумы в точках

    $  z_{1, 2} =  \pm  \frac{1}{\sqrt 3 }.  $

    В таком случае

    $  \max \left|{R_3 (t)}\right| = \left\|{R_3 (t)}\right\| = \frac{{(t_n - t_0 )}^3 }{12\sqrt 3 }  $.

  4. Предложите простой рекуррентный алгоритм вычисления коэффициентов a_{i} (i = 0 \div  N - 1) интерполяционного полинома
    Pn(t) = a0 + a1(t - t0 ) + ... + an(t - t0) ... (t - tN - 1).

    Решение. Для коэффициентов полинома получаем систему линейных уравнений с треугольной матрицей:

    \left. \begin{array}{c}
a_0 = f_0, \\  
 a_0 + a_1 (t_1 - t_0 ) = f_1, \\  
 a_0 + a_1 (t_2 - t_0 ) + a_2 (t_2 - t_0 )(t_2 - t_1 ) = f_2, \\  
\cdots \\   
a_0 + a_1(t_N - t_0 ) + \ldots + a_N (t_N - t_0 ) \ldots (t_N - t_{N - 1}) = f_N, 
\end{array} \right.

    которая легко решается от первого уравнения к последнему:

    $  
a_0 = f_0, a_1 = \frac{{f_1 - f_0 }}{{t_1 - t_0 }}, a = \frac{1}{{t_2 - t_1 }}\left({\frac{{f_2 - f_0 }}{{t_2 - t_0 }} + \frac{{f_1 - f_0 }}{{t_1 - t_0 }}}\right), \ldots $
  5. Оценить погрешность приближения функции ln t'(t' = 1, 23) при помощи интерполяционного полинома второй степени по точкам 1, 1; 1, 2; 1, 3.

    Решение. Остаточный член интерполяции будет

    $  R_N (t) = \frac{{f^{(N + 1)} (\xi )}}{{(N + 1)!}}(t - t_0 ) \ldots (t - t_N);  $

    при N = 2 имеем:

    \begin{gather*}
 \varepsilon = \left|{f(x) - L_2 (t)}\right| \le \frac{{\max\limits_{[1, 1;1, 3]} \left|{f^{(3)} (t)}\right|}}{6}\left|{(t - t_0 )(t - t_1 )(t - t_2 )}\right|, \\  
 \max\limits_{[1, 3;1, 2]} \left|{f^{(3)} (t)}\right| = \frac{2}{{1 \cdot 1, 3}}  \approx  1, 5. 
\end{gather*}

    В таком случае

    \begin{gather*}
\varepsilon = \left|{\ln (t^{\prime}) - L_2 (t)}\right| \le \frac{{1, 5}}{6}\left|{(1, 23 - 1, 1)(1, 23 - 1, 2)(1, 23 - 1, 3)}\right|  \approx  \\  
  \approx  6, 9 \cdot 10^{- 5}.
\end{gather*}
  6. Показать, что погрешность интерполяции может быть выражена следующим образом:
    f(t) - LN(t) = (t - t0) ... (t - tN)f(t, t0, ..., tN),

    где f(t, t0, ..., tN)разделенная разность порядка N.

    Решение. Из выражения для разделенной разности порядка N + 1

    \begin{gather*}
f(t, t_0, \ldots , t_N) = \frac{{f(t)}}{{(t  -  t_0 ) \ldots (t  -  t_N)}} + \frac{{f(t_0 )}}{{(t_0   -  t)(t_N -  t_0 ) \ldots (t_0 - t_N)}} + \ldots +  \\  
+ \frac{{f(t_N)}}{{(t_N   -  t)(t_N   -  t_0 ) \ldots (t_N - t_{N - 1})}}, 
\end{gather*}

    получим выражение для f(t):

    \begin{gather*}
f(t) = f(t_0 )\frac{{(t - t_1 ) \ldots (t - t_N)}}{{(t_0 - t_1 ) \ldots (t_0 - t_N)}} + f(t_N)\frac{{(t - t_0) \ldots (t - t_{N - 1})}}{{(t_N - t_0 ) \ldots (t_N - t_{N - 1})}} + \\
 + (t - t_0 ) \ldots (t - t_N) \cdot f(t, t_0, \ldots , t_N) = \\
 = L_N (t) + (t - t_0 ) \ldots (t - t_N) \cdot f(t, t_0, \ldots , t_N).
\end{gather*}

    Тогда

    f(t) - L_N (t) \cdot (t - t_0) \ldots (t - t_N) \cdot f(t, t_0, \ldots , t_N).

    Сравнивая полученное выражение с выражением для остаточного члена интерполяции

    $  
R_N (t) = f(t) - L(t) = \frac{{f^{(N + 1)} (\xi )}}{{(N + 1)!}}(t - t_0 ) \ldots (t - t_N), 
  $
    приходим к выводу, что для некоторой точки \xi  \in [t_0, t_N] имеет место соотношение между разделенной разностью и производной порядка N + 1:

    $  f(t, t_0, \ldots , t_N) = \frac{{f^{(N + 1)} (\xi )}}{{(N + 1)!}}.  $
  7. Пусть значения функции f(t) заданы в узлах интерполяции t1, t2, t3. Построить функцию
    $  g(t) = \frac{{a_0 + a_1 t}}{{d_0 + t}}  $,
    для которой выполнялось бы условие интерполяции: g(ti) = f(ti), i = 1, 2, 3 (задача дробно - линейной интерполяции ).

    Решение. Из условий интерполяции

    $  g(t_i) = \frac{a_0 + a_1 t_i}{d_0 + t_i} = f(t_i), i = 1, 2, 3  $
    получаем систему трех линейных уравнений:

    a0 + a1t1 - d0f1 = t1f1, 
    a0 + a1t2 - d0f2 = t2f2, 
    a0 + a1t3 - d0f2 = t3f3.

    Вводя обозначения

    \begin{gather*}
\tau_n = t_n - t_{i - 1}, \bar {\tau} = \frac{{\tau_n + \tau_{n + 1}}}{2}, \quad \Delta_n f = \frac{{f_n - f_{n - 1}}}{{\tau_n}}, \\  
 \Delta_{n + 1} f = \frac{{f_{n + 1} - f_n}}{{\tau_{n + 1}}}, \quad \delta_nf = \frac{{\Delta_{n + 1} f - \Delta_n f}}{{\bar {\tau}}}, 
\end{gather*}

    и применив метод последовательного исключения неизвестных, получим

    \begin{gather*}
a_0 = (2t_n  \Delta_n f \Delta_{n + 1} f - f_n t_n  \delta_n f)/\delta_n (tf), \\  
 a_1 = f_n - 2\Delta_n f \Delta_{n + 1} f, b_0 = - t \delta_n (t f)/\delta_n f.
\end{gather*}

    Здесь учтено, что

    $  \delta_n (tf) = t_n \delta_n f + \frac{{f_{n + 1} + f_{n - 1}}}{{\bar \tau_n}} $.
    Разумеется, знаменатель дробно - рационального выражения не должен обращаться в нуль на рассматриваемом отрезке.

Эдуард Макаров
Эдуард Макаров
Россия, Челябинск, Челябинский политехнический институт, 1966
Иван Кузнецов
Иван Кузнецов
Россия, г. Новосибирск