Материал: Спецглавы высшей математики. численные методы. Пантелеев И.Н

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

V.ИНТЕРПОЛИРОВАНИЕФУНКЦИЙ

Вданном рассмотрим основные методы решения задачи об интерполяции функции, заданной таблично (интерполяционный полином, полином Лагранжа, полином Ньютона, сплайн-интерполяция) и опишем соответствующие алгоритмы и их программные реализации, а также обсудим использование соответствующих функций пакета MATLAB.

5.1. Постановказадачи

Пусть известные значения некоторой функции f(х) образуют следующую таблицу:

Исходные данные в задаче интерполяции

X

Хо

Х 1

. . .

Хп

f(x)

Уо

У1

. . .

Уп

 

 

 

 

 

Требуется получить значение функции f(x) для значения аргумента xє [ x0, xn ], несовпадающего ни с одним из значений хi (i = 0, 1, ..., n).

Решение задачи сводится к поиску некоторой приближающей функции F(х), близкой в определенном смысле к функции f(x), для которой известно аналитическое выражение.

Классический подход к решению задачи построения приближающей функции основан на требовании строгого совпадения значений функций f(x) и F(x) в точках x,(i = 0, 1,...,n)

F(x0) = y0,F(x1) = y1 ,..., F(xn) = yn.

(V.1)

108

В данном случае нахождение приближенной функции называется интерполированием, а точки х0, x1 ,..., хn называются узлами интерполяции.

Будем искать интерполирующую функцию F(x)

в виде

многочлена степени n:

 

 

 

 

n

n k

 

Pn (x) = a0xn + a1xn -1

+ … an -1x + an = ak n

 

(V.2)

k 0

Условия (V.1), наложенные на многочлен, позволяют однозначно определить его коэффициенты. Действительно, требуя для Рn(х) выполнения условий (V.1), получаем линейную систему, состоящую из (n + 1) уравнения:

n

 

 

ak xi n k yi ,

i 0, 1, , n.

(V.3)

k 0

Решив систему (V.3) относительно неизвестных а0, а1, … , аn , находим значения этих неизвестных и, подставив в (V.2), находим аналитическое выражение аппроксимирующей функции.

Система (V.4) всегда имеет единственное решение, т. к. ее определитель

x n

x n 1

1

 

 

 

 

 

0

0

 

 

 

 

x n

x n 1

1

 

,

(V.4)

1

1

 

 

 

 

 

 

x n

x n 1

1

 

 

 

n

n

 

 

 

 

 

 

 

 

известный в алгебре как определитель Вандермонда, отличен от нуля. Следовательно, интерполяционный многочлен Рn(х) существует и единственен.

109

Пример V.1. Решить, используя пакет MATLAB, задачу интерполяции с помощью полинома n-ой степени для функции f (х) = sin (x), заданной таблично в восьми точках на интервале [0, 2π].

1.Задайте табличные значения интерполируемой функции.

»N = 8;

»1=1: N;

»x(i)=2*pi/(N-l)*(i-l);

»y=sin(x);

2. Визуализируйте табличную зависимость и истинные значения функции (рис. V.1).

Рис. V.1. График функции f (x) = sin (x) и табличных значений, используемых для решения задачи интерполяции

110

»М=1000;

»j=l:M;

»X(j)=2*pi/(M-l)*(j-1);

»Y=sin(X) ,

»plot(x,y, 'о');

»hold on

»plot (x,y)

3. Создайте файл Pol.m (листингV.1), содержащий описание функции, возвращающейзначенияполинома(V.2).

Листинг V.1. Файл Pol. M function z=Pol (x,a)

N = length(a); M= length(x); for j=l:M s=0;

for i=l:N

s= s+a(i)*x(j).^(N-i); end;

z(j)=s;

end;

4. Создайте файл Vandermortd.m (листинг V.2), содержащий описание функции, возвращающей значения элементов матрицы Вандермонда.

Листинг V.2. Файл Vandermond. m function z = Vandermond (x)

N = length(x);

z = ones (N,N) ; for i = 1:N

z(i,j) = x(i). ^(N-j); end;

end;

111

5.Вычислите значения элементов матрицы Вандермонда. » M=Vandennond(x) ;

6.Вычислите значения коэффициентов полинома.

» а = М^ - 1*у';

7.Вычислите значения полинома в заданных промежуточных точках

» Y1=Pol (X,a);

8.Постройте разность между точными и интерполированными значениями функции (рис. V.2).

Рис. V.2. Погрешность аппроксимации функции f (x) = sin (x) полиномом 8-й степени.

112

5.2. Интерполяционный полином Лагранжа

Для функции, заданной табл. V.1, построим интерполяционный многочлен Ln(x), степень которого не выше п и выполнены условия (V.1).

Будем искать Ln (x) в виде

Ln(x) = lo(x) + l1(x) + … + ln (x) ,

(V.5)

где li – многочлен степени n, причем

 

li (xk) =

yi , если i = к

 

.

(V.6)

0, если i ≠ к

Очевидно, что требование (V.6) с учетом (V.5) обеспечивают выполнение условий (V.1).

Многочлены li ,(x) составим следующим образом:

li (x)=ci (x –x0)(x - xi) · …· (x – xi-1)(x – xi+1)· …·(x - xn), (V.7)

где сi— постоянный коэффициент, значение которого находится из первой части условия (V.6):

сi

 

 

yi

,

(V.8)

(xi x0 )

(xi xi 1)(xi xi 1) (xi xn )

 

 

 

 

Подставивс, в(V.7) идалеев(V.5), окончательнополучим:

 

 

n

 

(x x0 ) (x xi 1) (x xi 1) (x xn )

 

Ln (x) yi

 

. (V.9)

 

(xi x0 ) (xi xi 1)(xi xi 1) (xi xn )

 

i 0

 

 

Формула (V.9) решает поставленную задачу.

Пример V.2. Решить, используя пакет MATLAB, задачу интерполяции с помощью многочлена Лагранжа для функции f(x) = sin(x), заданной таблично в восьми точках на интервале [0, 2π].

1. Задайте табличные значения интерполируемой функции.

113

»N=8;

»i = 1:N;

»x(i)= 2*pi/(N-1)*(i-1);

»y=sin(x);

2. Создайте файл Lagrange.m (листинг V.3), содержащий описание функции возвращающей значение многочлена li ,(x).

function z=Lagrange (x, i , X, Y)

%x - абсцисса точки интерполяции

%I - номер полинома Лагранжа

%X - вектор, содержащий абсциссы узлов интерполяции

%Y - вектор, содержащий ординаты точек интерполяции

N=length(X);

L=l;

for j=l:N

if not(j==i)

L=L*(x-X(j)) / (X(i)-X(j)); end;

end; z=L*Y(i);

3. Создайте файл Pol_Lagr.m (листинг V.4), содержащий описание функции, возвращающей значения полинома Лагранжа.

Листинг V.4 . Файл Lagr. m function z=Pol_I<agr(x,X,Y)

%x - абсцисса точки интерполяции

%i - номер полинома Лагранжа

%X - вектор, содержащий абсциссы узлов интерполяции

%Y - вектор, содержащий ординаты точек интерполяции

N=length(X); s=0,-

for i=l:N

s=s+Lagrange (x , i , X, Y ); end;

z=s;

114

4.Задайте число промежуточных точек, вычислите их координаты и точные значения интерполируемой функции. » М=1000;

» j=1:M;

» X(j) =2*pi / (M-1) * (j -1); » Y = sin (X)

5.Вычислите значения полинома Лагранжа в промежуточных точках.

» for j=l:M

Y2 ( j ) =Pol_Lagr (X ( j ) , x , у) ; end;

6.Постройте разность между точными и интерполированными значениями функции (рис. V.3).

Рис. V.3. Погрешность аппроксимации функции f (х) = sin (х) полиномом Лагранжа

115

5.3. Интерполяционный полином Ньютона для равноотстоящих узлов

Интерполяционные формулы Ньютона строятся для функций, заданных таблицами с равноотстоящими значениями аргумента h:

h = xi +1 – xi (i =1, 2, … , n )

(V.10)

5.3.1 . Конечныеразности

Для функции, заданной табл. V.1 с постоянным шагом (V.10), определим разности между значениями функции в соседних узлах интерполяции:

yi = yi +1 – yi . (V.11)

Такое выражение называют конечными разностями первого порядка. Из конечных разностей первого порядка можно образовать конечные разности второго порядка:

2yi = yi +1– yi=(yi +2–yi +1)–(yi +1–yi)=yi +2– 2yi +1+yi. (V.12)

Аналогично получают выражение для конечных разностей третьего порядка:

3yi = 2yi +1 – 2yi = (yi +3 – 2yi +2 + yi +1) – (yi +2 – 2yi +1 + yi) =

 

 

= yi +3 – 3yi +2 + 3yi +1 – yi .

(V.13)

Методом математической индукции можно доказать, что

k

 

k(k 1)

 

k

 

 

yi yi k kyi k 1

 

 

yi k 2 ( 1)

 

yi .

(V.14)

2!

 

5.3.2. Перваяинтерполяционнаяформула Ньютона

Будем искать интерполяционный полином в виде: 116

Pn (x) a0

a1(x x0 ) a2

(x x0 )(x x1)

(V.15)

an (x x0 ) (x xn 1)

 

Значения коэффициентов a0, a1, … , an найдем из условия совпадения значений исходной функции и многочлена в узлах. Полагая х = х0 , из (V.15) найдем у0 = P0(x0) = a0 , откуда а0 = у0. Далее, последовательно придавая х значения x1, и х2, получаем:

yi Pn (x1 ) a0 a1 (x1 x0 ) a0 a1h,

откуда

 

 

a y0

,

 

 

 

 

 

1

h

 

 

 

 

 

 

 

 

 

 

 

 

y2 Pn (x2 ) a0 a1 (x2 x0 ) a2 (x2 x0 )(x2 x1 )

a

0

a 2h a

2

2h2 .

 

 

т.е.

 

1

 

 

 

 

 

 

 

2h2 y

 

 

 

 

 

 

a

2

2

a 2h a

0

.

 

 

 

 

1

 

или 2ha

y

2

2 y

y

y

2

2(y

y

) y

y

2

2y

y

2 y

,

2

 

0

0

 

 

 

 

 

1

0

0

 

1

0

0

откуда

 

 

 

 

 

 

 

a2

 

2 y0

.

 

 

 

 

 

 

 

 

 

 

 

 

 

2!h2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Затем, проведя аналогичные действия, можно получить

 

 

 

 

 

 

 

a3

3 y0

 

 

 

 

 

 

 

 

 

 

 

 

 

3!h2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В общем случае выражение для ак будет иметь вид

 

 

 

 

 

 

 

an

 

n y0

 

 

.

 

 

 

 

(V.16)

 

 

 

 

 

n!h2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

117

Источник: https://studfile.net/preview/16565850/