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

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

6.3. Интерполяция обобщенными полиномами

Для того чтобы функция ( обобщенный полином )

F(t) = \sum\limits_{n = 0}^{N}{u_n \varphi_n (t)}
была интерполирующей, необходимо выполнение условий: F(tk) = fk, k = 0 \div  N, где fk — значения функции в точках интерполяции. Для коэффициентов обобщенного полинома получаем систему уравнений:

\left\{ \begin{array}{l}
  u_0  \cdot \varphi_0 (t_0 ) + u_1  \cdot \varphi_1 (t_0 ) + \ldots + u_N  \cdot \varphi_N (t_0 ) = f_0, \\
  u_0  \cdot \varphi_0 (t_1 ) + u_1  \cdot \varphi_1 (t_1 ) + \ldots + u_N  \cdot \varphi_N (t_1 ) = f_1, \\
 \ldots \\
  u_0  \cdot \varphi_0 (t_N) + u_1  \cdot \varphi_1 (t_N) + \ldots + u_N  \cdot \varphi_N (t_N) = f_N , \\
\end{array} \right.

или в векторной форме

{\mathbf{Au}} = {\mathbf{f}},

где

{\mathbf{A}} = \left( \begin{array}{cccc}
{\varphi_0 (t_0 )} & {\varphi_1 (t_0 )} & \ldots & {\varphi_N (t_0 )}  \\
{\varphi_0 (t_1 )} & {\varphi_1 (t_1 )} & \ldots & {\varphi_N (t_1 )}  \\
 \ldots & \ldots & \ldots & \ldots \\
{\varphi_0 (t_N)} & {\varphi_1 (t_N)} & \ldots & {\varphi_N (t_N)}  \\
 \end{array} \right), 
{\mathbf{u}} = \left( \begin{array}{cccc}
{u_0 } & {u_1 } & \ldots & {u_N}  \\
\end{array} \right)^{T}, \\ 
{\mathbf{f}} = \left( \begin{array}{cccc}
{f_0 } & {f_1 } & \ldots & {f_N}  \\
\end{array} \right)^{T}.

Теорема (доказывается в курсе линейной алгебры.) Для того чтобы решение задачи интерполяции существовало и было единственным, необходимо и достаточно, чтобы система базисных функций \varphi_N (t_k) была линейно независима.

Теорема (доказывается в курсе линейной алгебры.) Для того чтобы система функций \varphi_N (t_k) была линейной независимой в точках t0, ..., tn, необходимо и достаточно, чтобы определитель матрицы Грама

{\mathbf{C}} = {\mathbf{A}}^\ast {\mathbf{A}} = \left( \begin{array}{cccc}
 {(\varphi_0, \varphi_0)} & {(\varphi_0, \varphi_1)} & \ldots & {(\varphi_0, \varphi_N)}\\
{(\varphi_1, \varphi_0)} & {(\varphi_1, \varphi_1)} & \ldots & {(\varphi_1, \varphi_N)}\\
 \ldots & \ldots & \ldots & \ldots \\
{(\varphi_N , \varphi_0)} & {(\varphi_N , \varphi_1)} & \ldots & {(\varphi_N , \varphi_N)}
 \end{array} \right),

был отличен от нуля. Здесь каждый элемент матрицы Грама имеет вид

\gamma_{jk} = (\varphi_k , \varphi_j) = \sum\limits_{i = 0}^{N}{\varphi_k (t_i) \cdot 
\varphi_j (t_i)}.

В случае, если система функций \left\{{\varphi_j}\right\}_0^{N} ортогональна на множестве точек \left\{{t_j}\right\}_0^{N}, решение задачи интерполяции значительно упрощается (напомним, что система функций \left\{{\varphi_j}\right\}_0^{N} является ортогональной на множестве точек \left\{{t_j}\right\}_0^{N}, если (\varphi_k , \varphi_j) = 0 при k \ne j и \left({\varphi_k , \varphi_j}\right) \ne 0 при k = j для всех k = 0, 1, ..., N ; j = 0, 1, ..., n ).

Дело в том, что матрица Грама для ортогональной системы функций диагональна, и ее определитель отличен от нуля (всякая ортогональная система функций заведомо линейно независима). Линейная система уравнений представляется как {\mathbf{A}}*{\mathbf{Au}} = {\mathbf{A}}*{\mathbf{f}}, или \mathbf{Cu} = \mathbf{b}, где \mathbf{C} = \mathbf{A}*\mathbf{A}, \mathbf{b} = \mathbf{A}*\mathbf{f} - вектор, а ее решение в случае \mathbf{A}*\mathbf{A} = \mathbf{E} есть {\mathbf{u}} =  {\mathbf{A}}*{\mathbf{f}}.

Примером ортогональной системы являются показательные функции e^{2\pi
ikt_j} на множестве точек tj = {j / N}, j = 0, 1, ..., N (на отрезке [0, 1] ).

6.4. Полиномиальная (алгебраическая) интерполяция

В этом случае (uk(t) = tk) СЛАУ для определения коэффициентов имеет вид

\left\{ \begin{array}{l}
  u_0 + u_1 t_0 + \ldots + u_N t_0^{N} = f_0, \\
  u_0 + u_1 t_1 + \ldots + u_N t_1^{N} = f_1, \\
 \ldots \\
  u_0 + u_1 t_N + \ldots + u_N t_N^{N} = f_N , \\
\end{array} \right.

а ее определитель

\det \left( \begin{array}{cccc}
   1 & {t_0 } & {t_0^2 } & \ldots \\
   1 & {t_1 } & {t_1^2 } & \ldots \\
    \cdots & \cdots & \cdots & \cdots   \\
   1 & {t_N} & {t_N^2 } & \ldots \\
\end{array} \right) = \mathop {\Pi\limits_{i \ne j}}\limits^{N}(t_i - t_j), 0 \le j < i \le N,

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

Ответ на вопрос о существовании и единственности решения СЛАУ оказывается — утвердительным - решение задачи алгебраической интерполяции всегда существует и единственно, но при больших N система оказывается плохо обусловленной. Однако решение этой задачи можно выписать в явном виде

L_N (t) = \sum\limits_{n = 0}^{N}{f_n} \cdot \varphi_n^{N} (t),

где

$  \varphi_n^{N} (t) = {\mathop \Pi\limits^N_{\substack{i = 0 \\ 
i \ne n}}} \frac{t - t_j}{t_n - t_i}  $
- базисные функции, являющиеся полиномами степени N, каждый из которых сопоставлен со своим узлом сетки так, что \varphi_n^{N} (t_k) = \delta_k^{n} . Заметим, что правильнее было бы писать LN(t, {tn}, {fn}), т.е. интерполянт зависит от t, сетки и сеточной функции. Такой вид записи алгебраического интерполяционного полинома не единственен. Выписанный полином называется интерполяционным полиномом в форме Лагранжа. Он удобен для теоретического рассмотрения, но на практике часто оказывается более удобной другая форма представления — полином в форме Ньютона, о котором речь пойдет ниже.

Эдуард Макаров
Эдуард Макаров
Россия, г. Екатеринбург, Уральский федеральный университет, профессор
Иван Кузнецов
Иван Кузнецов
Россия, г. Новосибирск

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
14.0424102850016watchdog( )../bootstrap.inc:0
24.0427102852608module_invoke( )../bootstrap.inc:967
34.0427102854464call_user_func_array ( )../module.inc:462
44.0427102854800devel_watchdog( )../module.inc:462
54.0428102855648decode_entities( )../devel.module:382
64.0428102857568drupal_error_handler( )../devel.module:340
74.0429102861176watchdog( )../common.inc:663
84.0429102863368module_invoke( )../bootstrap.inc:967
94.0429102865224call_user_func_array ( )../module.inc:462
104.0429102865560devel_watchdog( )../module.inc:462
114.0429102866256decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
14.0424102850016watchdog( )../bootstrap.inc:0
24.0427102852608module_invoke( )../bootstrap.inc:967
34.0427102854464call_user_func_array ( )../module.inc:462
44.0427102854800devel_watchdog( )../module.inc:462
54.0428102855648decode_entities( )../devel.module:382
64.0428102857568drupal_error_handler( )../devel.module:340
74.0429102861176watchdog( )../common.inc:663
84.0429102863368module_invoke( )../bootstrap.inc:967
94.0429102865224call_user_func_array ( )../module.inc:462
104.0429102865560devel_watchdog( )../module.inc:462
114.0429102866256decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
14.0424102850016watchdog( )../bootstrap.inc:0
24.0427102852608module_invoke( )../bootstrap.inc:967
34.0427102854464call_user_func_array ( )../module.inc:462
44.0427102854800devel_watchdog( )../module.inc:462
54.0428102855648decode_entities( )../devel.module:382
64.0437102857760drupal_error_handler( )../devel.module:340
74.0437102861448watchdog( )../common.inc:663
84.0437102863640module_invoke( )../bootstrap.inc:967
94.0437102865496call_user_func_array ( )../module.inc:462
104.0437102865832devel_watchdog( )../module.inc:462
114.0437102866632decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
14.0424102850016watchdog( )../bootstrap.inc:0
24.0427102852608module_invoke( )../bootstrap.inc:967
34.0427102854464call_user_func_array ( )../module.inc:462
44.0427102854800devel_watchdog( )../module.inc:462
54.0428102855648decode_entities( )../devel.module:382
64.0437102857760drupal_error_handler( )../devel.module:340
74.0437102861448watchdog( )../common.inc:663
84.0437102863640module_invoke( )../bootstrap.inc:967
94.0437102865496call_user_func_array ( )../module.inc:462
104.0437102865832devel_watchdog( )../module.inc:462
114.0437102866632decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
14.0442102850560watchdog( )../bootstrap.inc:0
24.0442102852752module_invoke( )../bootstrap.inc:967
34.0442102854608call_user_func_array ( )../module.inc:462
44.0442102854944devel_watchdog( )../module.inc:462
54.0443102855648decode_entities( )../devel.module:382
64.0443102857568drupal_error_handler( )../devel.module:340
74.0444102861176watchdog( )../common.inc:663
84.0444102863368module_invoke( )../bootstrap.inc:967
94.0444102865224call_user_func_array ( )../module.inc:462
104.0444102865560devel_watchdog( )../module.inc:462
114.0444102866256decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
14.0442102850560watchdog( )../bootstrap.inc:0
24.0442102852752module_invoke( )../bootstrap.inc:967
34.0442102854608call_user_func_array ( )../module.inc:462
44.0442102854944devel_watchdog( )../module.inc:462
54.0443102855648decode_entities( )../devel.module:382
64.0443102857568drupal_error_handler( )../devel.module:340
74.0444102861176watchdog( )../common.inc:663
84.0444102863368module_invoke( )../bootstrap.inc:967
94.0444102865224call_user_func_array ( )../module.inc:462
104.0444102865560devel_watchdog( )../module.inc:462
114.0444102866256decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
14.0442102850560watchdog( )../bootstrap.inc:0
24.0442102852752module_invoke( )../bootstrap.inc:967
34.0442102854608call_user_func_array ( )../module.inc:462
44.0442102854944devel_watchdog( )../module.inc:462
54.0443102855648decode_entities( )../devel.module:382
64.0449102857760drupal_error_handler( )../devel.module:340
74.0449102861448watchdog( )../common.inc:663
84.0449102863640module_invoke( )../bootstrap.inc:967
94.0449102865496call_user_func_array ( )../module.inc:462
104.0449102865832devel_watchdog( )../module.inc:462
114.0450102866608decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
14.0442102850560watchdog( )../bootstrap.inc:0
24.0442102852752module_invoke( )../bootstrap.inc:967
34.0442102854608call_user_func_array ( )../module.inc:462
44.0442102854944devel_watchdog( )../module.inc:462
54.0443102855648decode_entities( )../devel.module:382
64.0449102857760drupal_error_handler( )../devel.module:340
74.0449102861448watchdog( )../common.inc:663
84.0449102863640module_invoke( )../bootstrap.inc:967
94.0449102865496call_user_func_array ( )../module.inc:462
104.0449102865832devel_watchdog( )../module.inc:462
114.0450102866608decode_entities( )../devel.module:382