ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 19.06.2025
Просмотров: 1088
Скачиваний: 1
46
Подставляя найденные значения коэффициентов ak (k = 0, 1, …n) в выражение (5),
получаем первую интерполяционную формулу Ньютона:
Pn(x)=y0+ |
y |
(x–x0) |
[1] |
+ |
2 y |
(x–x0) |
[2] |
+...+ |
n y |
(x–x0) |
[n] |
. |
(6) |
0 |
0 |
0 |
|||||||||||
1! h |
2! h2 |
n! hn |
Для практического использования интерполяционную формулу Ньютона (6) обычно записывают в виде формулы (7), для чего вводится новая переменная
q = x − x0 , h
представляющая собой число шагов, необходимых для достижения точки x, исходя из точки x0. Тогда
Pn(x) = Pn(x0 + qh) = y0 + q∆y0 + q( q − 1) ∆2y0 + ...
2!
+ |
q( q − 1)...( q −( n −1)) |
∆ny0. |
(7) |
||
n! |
|||||
Первая интерполяционная формула Ньютона обычно используется для интерполирования вперед и экстраполирования назад.
Если разности вычислять справа налево, то в этом случае
q = x − xn , h
т. е. q < 0 и интерполяционный многочлен Ньютона можно получить в виде
Pn(x) = Pn(xn + qh) = yn + q∆yn-1 + q( q + 1) ∆2yn-2 + ...
2!
+ |
q( q + 1)...( q + ( n − 1)) |
∆ny0. |
(8) |
||
n! |
|||||
Формула (8) называется вторым интерполяционным многочленом Ньютона
и обычно используется для интерполирования в конце таблицы, т. е. в правой половине отрезка [x0, xn], и экстраполирования вперед.
Погрешность вычисления при интерполировании по формулам Ньютона оценивается остаточным членом:
– для первой формулы
≈ q( q − 1)...( q − n ) Rn(x) +
( n 1)!
– для второй формулы
≈ q( q + 1)...( q + n ) Rn(x) +
( n 1)!
n+1 y0 ;
n+1 yn ,
где предполагается, что n+1y почти постоянны для функции y = f(x) и h – достаточно мало.
47
Замечание. В практических задачах возможна ситуация, когда Dkyi = 0, для некоторого 1< k £ n. Тогда степень полинома равна k–1 < n.
3.2.2.1 Алгоритмы интерполирования многочленами Ньютона
Рассматриваемые алгоритмы интерполирования основаны на формулах (7) и
(8). Для вычисления разностей различных порядков удобно использование следующего рекуррентного соотношения:
Dny = |
ì |
yi , |
если n = 0, |
(9) |
i |
í |
- Dn−1 yi , если n > 0. |
||
îD( Dn−1 yi ) = Dn−1 yi+1 |
||||
Заметим также, что множитель |
|||
q( q − 1)( q − 2 )...( q − ( i − 1)) |
(10) |
||
i! |
|||
в i-ом слагаемом формулы (7) может быть вычислен с использованием предыдущего множителя, а именно
q( q − 1)( q − 2 )...( q −( i − 2 )) × q −( i − 1) . ( i - 1)! i
1444442444443
предыдущий множитель
Аналогичное соотношение имеет место в формуле (8).
Алгоритм расчета по первой интерполяционной формуле Ньютона
1.Ввести значения: n (n+1 – число узлов интерполяции), x0 – начальное значение аргумента, h – шаг интерполирования, yi (i = 0, 1, …, n) –значение функции в i-ом узле интерполяции, x – значение аргумента для интерполирования функции.
2.Вычислить q = (x – x0)/h.
3.Вычислить Pn(x) = y0 – учитываем первое слагаемое в формуле (7).
4.Определить p = 1.
5.Организовать цикл интерполирования, изменяя параметр i =1, 2, … n.
5.1. Вычислить p = p× q −( i − 1) – множитель (10). i
5.2.Вычислить Diy0 по формуле (9).
5.3.Вычислить Pn(x) = Pn(x) + p×Diy0 – суммирование i-го слагаемого в фор-
муле (7).
6.Конец цикла интерполирования по параметру i.
7.Вывод x – значение аргумента, Pn(x) – результат интерполирования функции.
8.Конец вычислений.
Алгоритм расчета по второй интерполяционной формуле Ньютона можно получить модификацией вышеописанного алгоритма, в частности:
1.Вычислить q = (x – xn)/h, где xn = x0 + nh.
2.Вычислить Pn(x) = yn.
48
2.1. Вычислить p = p× q + ( i − 1) . i
2.2. |
Вычислить iyn-i. |
2.3. |
Вычислить Pn(x) = Pn(x) + p × iyn-i. |
Пример 2. Составить программы на языке Turbo Pascal интерполирования функции f(x) на отрезке многочленами Ньютона по системе 5 узлов в точках: M1(1.05, 2.8577), M2(1.09, 2.9743), M3(1.13, 3.0957), M4(1.17, 3.2220), M5(1.21, 3.3535).
{первая интерполяционная формула Ньютона} program pNuton1;
uses crt; const
n = 4; {число узлов интерполяции, счет от нуля} type
Tmas = array[0..n] of real;
{*******функция вычисляет k-ю разность yi} function fdelta( var y : Tmas; i, k : byte) : real; begin
if k = 0 then fdelta := y[i] else fdelta := fdelta(y, i+1, k-1) - fdelta(y,i,k-1) end;
{основная программа} const
y : Tmas = (2.8577, 2.9743, 3.0957, 3.2220, 3.3535); var
i : byte; x0 , x , h , p , pn : real; delta, q : real; begin
x0:=1.05; h := 0.04;
writeln('Введите значение аргумента x для выполнения интерполяции'); readln(x);
pn:=y[0]; q:=(x-x0)/h; p:=1;
for i:=1 to n do {цикл интерполирования}
begin p:=p*(q-(i-1))/i; delta:=fdelta(y,0,i); pn:=pn+p*delta; end; writeln('Для значения x = ', x:12:5, ' получен результат Pn =', pn:12:5 ); writeln('Точное значение: ', exp(x):12:5);
readkey;
end.
{вторая интерполяционная формула Ньютона} program pNuton2;
uses crt; const n=4;
type Tmas=array[0..n] of real; {*******функция вычисляет k-ю разность yi}
49
function fdelta( var y:Tmas;i,k:byte):real; begin
if k = 0 then fdelta := y[i] else fdelta := fdelta(y, i+1, k-1) - fdelta(y, i, k-1) end;
{основная программа} const
y : Tmas = (2.8577, 2.9743, 3.0957, 3.2220, 3.3535); var
i : byte; x0, x, h, p, pn, delta, xn, q : real; begin
h:=0.04; x0:=1.05;
writeln('Введите значение аргумента x для выполнения интерполирования'); readln(x);
pn := y[n]; xn := x0 + n*h; q := (x-xn)/h; p:=1; for i:=1 to n do
begin
p:=p*(q+(i-1))/i; delta:=fdelta(y,n-i,i);{вычисляет i-ю разность y[n-i]} pn:=pn+p*delta;
end;
writeln('x=',x:12:5,' Pn =',pn:12:5); writeln('Точное значение = ',exp(x):12:5); readkey;
end.
3.2.3 Интерполирование функций средствами MachCAD
Система MathCAD предоставляет возможность интерполяции функций с помощью сплайнов. При сплайн-интерполяции исходная функция заменяется отрезками кубических полиномов, проходящих через три смежные узловые точки. Коэффициенты полиномов рассчитываются так, чтобы непрерывными были первая и вторая производные. Линия, которую описывает сплайн-функция, напоминает по форме гибкую линейку, закрепленную в узловых точках.
Для осуществления сплайновой интерполяции предлагается четыре встроенные функции. Три из них служат для получения векторов вторых производных сплайн-функций при различном виде интерполяции:
§cspline (X, Y) – возвращает вектор S вторых производных при приближении в опорных точках к кубическому полиному;
§pspline (X, Y) – возвращает вектор S вторых производных при приближении в опорных точках к параболической кривой;
§lspline (X, Y) – возвращает вектор S вторых производных при приближении в опорных точках к прямой.
Четвертая функция - interp (S, X, Y, z) – возвращает значение у(х) для заданных векторов S, X, Y и заданного значения z.
Выполните в системе MachCAD следующие действия:
1. Организуйте данные в виде отсортированных соразмерных векторов:
50 |
|
X := (1.05 1.09 1.13 1.15 1.17 )T |
Y := (2.8577 2.9743 3.0957 3.1582 3.222 )T |
2. Задайте вектор вторых производных при помощи одной из приведенных выше функций семейства *spline, например lspline:
s1 := lspline(X ,Y)
é |
0 |
ù |
ê |
3 |
ú |
ê |
ú |
|
ê |
ú |
|
ê |
0 |
ú |
ê |
ú |
|
ê |
0 |
ú |
s1 = ê |
ú |
|
ê3.875ú |
||
ê |
ú |
|
ê |
2.5 |
ú |
ê |
ú |
|
ê |
4.25 |
ú |
ê |
ú |
|
ê |
0 |
ú |
ë |
û |
|
3.Задайте функцию interp(s1,x,y, z). В нашем случае:
I1(Z) := interp(lspline(X ,Y) , X ,Y ,Z)
4.Постройте график, выбрав пиктограмму на панели Graph. Пропишите в соответствующих маркерах имя функции интерполяции и переменную. Получили сплайн-интерполяцию с линейным продолжением:
3,3 |
||||
3,2 |
||||
I1 |
3,1 |
|||
3 |
||||
2,9 |
||||
2,8 |
||||
1,05 |
1,1 |
1,15 |
1,2 |
|
Z,X |
5.Аналогичным образом постройте сплайн-интерполяцию, используя функции cspline, pspline. Сравните результаты.
Задания к данной теме приведены в приложении В (1).