
Тема 3. Аппроксимация функций
1. Интерполяция
Формулы Ньютона. Дано: функция у(х), задана таблицей своих значений в n + 1 точках (узлах):
х0 |
х1 |
…. |
xn |
у0 |
у1 |
…. |
yn |
Требуется определить (хотя бы приближенно) ее значение у(х) при х хj, т.е. требуется построить аппроксимирующую функцию Y(x) y(x). При дополнительных условиях Y(xj) = y(xj) (полное совпадение в узловых точках) и Y(x) = Pn (x) (многочлен n-й степени) имеем классическую задачу многочленной интерполяции. Для ее решения существует много методов, наиболее удобна интерполяционная формула Ньютона:
P n (x) = y0 + (х – x0) 1[x0, x1] + (х – x0) (х – x1) 2[x0, x1, x2] + …
+ (х – x0)(х – x1) … (x– xn–1)) n[x0, x1,… xn],
где величины 1[x0, x1], 2[x0, x1, x2], …, n[x0, x1,… xn] называются разделенными разностями, определяемыми по рекуррентным формулам:
,
j = 1, 2, … n;
,
j = 2, 3, … n.
…..
,
j = k, k+1, … n.
Нижний индекс при – порядок разности.
Пример 3.1. Дана таблица значений некоторой функции
при n = 4. Построим многочлен Ньютона.
Строим таблицу разделенных разностей (табл. 3.1). Разности, стоящие в выделенных ячейках используются как коэффициенты формулы Ньютона:
P n (x) = 0 + (х – 0) 0.693147 + (х – 0) (х – 1) (– 0.143841) + (х – 0)(х – 1) (x– 2) 0.028317
+ (х – 0)(х – 1)(х – 2)(х – 3) ( – 0.004861).
Вычислим Pn (1.5) = 0.918. Точное значение интерполируемой функции у = ln(1 + x) равно у(1.5) = 0.916, т.е. точность достаточно большая.
Таблица 3.1 |
|||||
j |
0[xj] = yj |
1[x0, xj] |
2[x0, x1, xj] |
3[x0, x1, x2, xj] |
4[x0, x1, x2, x3, x4] |
0 |
0 |
- |
- |
- |
- |
1 |
0.693147 |
0.693147 |
- |
- |
- |
2 |
1.098612 |
0.549306 |
-0.143841 |
- |
- |
3 |
1.386294 |
0.462098 |
-0.115525 |
0.028317 |
- |
4 |
1.609438 |
0.402359 |
-0.096929 |
0.023456 |
-0.004861 |
Иногда ставится обратная задача: требуется по известному у определить соответствующее значение х – задача обратной интерполяции. Для ее решения применяется обратная интерполяционная формула Ньютона:
Qn (y) = x0 + (y – y0) 1[x0, x1] + (y – y0) (y – y1) 2[x0, x1, x2] + …
+ (y – y0)(y – y1) … (y– yn–1)) n[x0, x1,… xn],
где величины 1[x0, x1], 2[x0, x1, x2], …, n[x0, x1,… xn] называются обратными разделенными разностями, определяемыми по рекуррентным формулам:
,
j = 1, 2, … n;
,
j = 2, 3, … n.
…..
,
j = k, k+1, … n.
Свойства многочленов Ньютона
1) Если все узлы различны, то многочлен Pn (х) всегда существует и единственен. Для наличия аналогичных свойств у Qn (у) дополнительно требуется монотонность функции у(х).
2) Построенный многочлен не зависит от порядка чередования узлов в таблице – это вытекает из свойства 1) (и это очень удобно при подключении новых узлов для построения полинома более высокого порядка).
Замечание. В практике вычислений полиномы степени выше пятой обычно не используют, т.е. число узлов интерполяции не должно превышать шести. Если при таком числе узлов не обеспечивается заданная точность, следует уменьшать расстояние между узлами.
Программы. Приведем фрагменты программы интерполяции.
1. Разделенные разности. Введем массив D[0..n, 0..n], элементы которого являются разделенными разностями, первый индекс – номер узла, второй индекс – порядок разности (напомним, что 0[xi] = уi).
for i := 0 to n do D[i,0] := y[i];
for j := 1 to n do
for i:=j to n do D[i,j]:=(D[i,j–1]–D[j–1,j–1])/(x[i]–x[j–1]);
2. Многочлен. Для вычисления значения Pn (z) удобно использовать обобщенную схему Горнера (обычная схема Горнера – см. “Классификация численных методов. Прямые методы”, пример 1.16).
read(z) ;
p := D[n, n] ;
for i := n – 1 downto 0 do
p := p*(z–x[i]) + D[i,i] ;
write (p) ;