РАСЧЕТНО-ГРАФИЧЕСКАЯ РАБОТА №4 Интерполяция

advertisement
РАСЧЕТНО-ГРАФИЧЕСКАЯ РАБОТА №4
Интерполяция табличных данных
1.1 Краткие теоретические сведения
Задачей приближения или аппроксимации функций (от лат.
approximo — приближаюсь) называется задача замены одних математических объектов другими, в том или ином смысле близкими к исходным. Другими словами, аппроксимация функции это замена исходной функции Y(x) другой функцией f(x) достаточно близкой к
Y(x) на некотором интервале и имеющей либо более простую и удобную форму представления, либо отвечающую необходимым требованиям. Аппроксимация позволяет исследовать числовые характеристики и качественные свойства объекта, сводя задачу к изучению более простых или более удобных объектов. Чаще всего необходимость
такой замены возникает в случаях, когда исходная функция Y(x) задана таблицей значений xi, yi (дискретно), а ее необходимо знать в
любой точке интервала. В этом случае табличная функция заменяется
аналитической функцией f(x), по которой можно вычислить значение
y для любых значений x.
Аппроксимация таблично заданных функций рассматривается в
двух постановках.
1. Функция y(x) определена небольшим количеством дискретных
значений (точек), значения которых можно считать лишенными погрешностей. Тогда приближающую функцию f(x) подбирают так,
чтобы она точно прошла через все заданные точки xi, yi , i=0,1,…,n.
Такое приближение называют интерполяцией (от латинского
interpolatio изменение, переделка), приближающую функцию f(x) –
интерполирующей, точки, через которые проходят исходная функция y(x) и интерполирующая f(x) – узлами интерполяции либо
опорными точками. Интерполяция является частным случаем аппроксимации, при котором интерполирующая функция f(x) обязательно проходит через узлы интерполяции xi, yi и при этом принимает
«разумные» значения для аргументов, лежащих между опорными
точками. Критерий разумности меняется от задачи к задаче и ему,
возможно, никогда не будет дано точного определения. Пример интерполяции табличных данных приведен на рисунке 4.1.
x0, y0, x1, y1, … - узлы интерполяции – точки
определяющие табличные данные
Рисунок 4.1 - Интерполяция табличных данных
2. Табличная функция y(x) задана большим количеством точек,
значения которых получены опытным путем и, из-за погрешностей
эксперимента, определены с погрешностью. В такой ситуации требовать точного прохождения функции f(x) через точки заданные с
ошибками нецелесообразно, поэтому функцию f(x) подбирают достаточно простого вида, которая проходит достаточно близко к заданным точкам, но не обязательно через них. Позволяя значениям f(xi)
отличаться от yi, можно очень хорошо отразить характер изменения
данных и даже поправить некоторые из содержащихся в них ошибок.
Такое приближение называют сглаживанием, функцию f(x) сглаживающей. На рисунке 4.2 приведен пример построения на интервале от
x0 до x4 сглаживающей функции f(x)
Рисунок 4.2 - Сглаживание табличных данных.
f(x) – сглаживающая функция
2
Задача определения значения функции вне диапазона опорных
точек называется экстрополяцией данных.
В отечественной литературе очень часто задачу сглаживания исходных данных называют аппроксимацией исходных данных. В
дальнейшем, термином аппроксимация будем обозначать задачу
сглаживания данных, а интерполяцией называть разновидность аппроксимации, при которой кривая построенной функции проходит
точно через имеющиеся точки данных. Алгоритмы приближения
данных требующих сглаживания рассматриваются в разделе 5 настоящего пособия.
1.2 Постановка задачи интерполяция табличной функции
Пусть исходная функция y(x) определена небольшим количеством дискретных значений xi, yi, i=0,1,…,n, точно определяющих
функцию y(x).
Цели интерполяции разнообразны, но почти всегда необходим
быстрый алгоритм позволяющий вычислять значения функции f(x)
для аргумента, не содержащегося в таблице данных (xi, yi). Компактная таблица данных и небольшая подпрограмма интерполирования
могут заменить очень длинную таблицу значений функции. Иногда
требуется находить значения первой (f '(x)) и второй (f''(x)) производных в промежуточных точках.
1.3 Кусочно-линейная интерполяция
Простейшим видом интерполяции является линейная интерполяция, в основе которой лежит приближение функции y(x) на участке
между соседними точками (xk, yk ) и (xk+1,yk+1 ) прямой линией. Уравнение прямой можно представить в виде
(y − y ) = (y − y )
(x − x k ) (x k +1− x k )
k +1
k
или в виде
y =y
k
+
(y
k
) ( − )
(x k +1− x k ) x x
k +1
−y
k
k
3
(4.1)
Таким образом, зная два табличных значения yk и yk+1 , соответствующих xk и xk+1, с помощью указанных формул можно найти значение функции y при любом значении x в интервале [xk , xk+1]. Получаемая интерполирующая функция состоит из отдельных отрезков,
соединенных в узлах интерполяции. Такая функция называется кусочно-гладкой и относится к классу составных функций. Преимуществами составных функций является то, что каждый ее участок имеет
сравнительно простую форму и, следовательно, определяется простой
аналитической зависимостью. В частности кусочно-линейная интерполяция осуществляется составной функцией, каждое звено которой
представляется уравнением прямой, коэффициенты которой определяются двумя соседними точками исходной функции.
Пример 4.1
В таблице 4.1 даны значения функции y(x) в трех точках. Требуется
определить значения функции в точках х=0,5 и х=2, используя кусочно-линейную интерполяцию.
Таблица 4.1 - Исходные данные для примера 1
Xi
0
1
3
Yi
1
2
10
Подставим значение x=0.5 и x=2 в формулу (4.1). Получим:
y(0.5)=y0 +(0.5-x0 )(y1 - y0 )/(x1 -x0 ) = 1+(0.5-0)(2-1)/(1-0)=1.5
y(2.0)=y1 +(2.0-x1 )(y2 – y1 )/(x2-x1) = 1+(2-1)(10-2)/(3-1)=6.0
Обратите внимание, что если значение аргумента x=2 подставить
в первую формулу (т.е. в уравнение прямой соединяющей первые две
точки функции y(x)), то получится результат y(2)=3 не соответствующий здравому смыслу.
1.4 Интерполяция полиномом
Обычно полагают, что, используя большое число соседних точек
и приближая исходную функцию более сложной линией, можно
уточнить полученный результат. Для этой цели в инженерной практике широко используют полиномы.
4
Полиномом степени n можно записать в виде
P(x) = a0 + a1x + a2x2 + . . . + anxn
(4.2)
В дальнейшем будем рассматривать вещественные полиномы, т.е.
полиномы коэффициенты a0 ; a1 ; a2 ; . . . ; an которых являются вещественными числами.
Внимание инженеров привлекают многие свойства полинома
P(x). Так P(x) является функцией всюду непрерывной и всюду дифференцируемой, легко вычисляется при любом значении x. Производная полинома и его неопределенный интеграл также являются полиномами с теми же свойствами, что и у исходного полинома. Все
производные степени большей, чем n, где n – степень полинома, равны нулю.
Напомним некоторые свойства полиномов.
Полином степени n можно разложить единственным образом в
произведение из n линейных множителей.
P(x) = an (x - α1) (x - α2) … (x - αn)
Если x принимает значение одного из чисел α1, α2, … ,αn , то p(x)
будет иметь нулевое значение; числа α1, α2, … ,αn называются корнями полинома P(x), или решением полиномиального уравнения P(x)=0.
Корни вещественного полинома обладают следующими свойствами:
корни могут повторяться (например, если α1= α2 );
корни могут быть как вещественными, так и комплексными;
комплексные корни встречаются сопряженными парами;
если полином P(x) имеет нечетную степень, то он должен иметь,
по меньшей мере, один вещественный корень.
Для определения n+1 коэффициента ai (i=0, 1, … , n ) полинома
степени n, проходящего через все n+1 заданные в таблице точки (xi ;yi),
где i=0, 1, …, n, необходимо записать интерполяционные условия
прохождения полинома через данные точки Pn(xi) = yi ,при i=0, 1, …,n.
-
В результате получим систему из (n+1)-го линейного уравнений
относительно коэффициентов полинома:
a0 + a1x0 + a2x02 + . . . + anx0n = y0
5
a0 + a1x1 + a2x12 + . . . + anx1n = y1
(4.3)
. . . .
a0 + a1xn + a2xn2 + . . . + anxnn = yn
Из решения системы 4.3, например методом Гаусса, определяются
численные значения коэффициентов полинома интерполирующего
точки (xi; yi), где i=0, 1, …, n. По формуле (4.2) легко можно вычислить значение интерполирующего полинома Р(х) для любого промежуточного аргумента.
Пример 4.2
Для таблично заданной функции представленной в таблице 4.1,
определить значения интерполирующего полинома в точках х=0.5 и
х=2.
Исходная функция задана тремя точками, которые позволят записать три интерполяционных условия прохождения полинома P(x) через данные точки. Из трех условий можно определить три коэффициента полинома P(x), поэтому этот полином будет второй степени.
Запишем интерполяционные условия прохождения полинома
второй степени, через три заданные точки
a0 + a1·0+ a2·02 = 1
a0 + a1·1+ a2·12 = 2
a0 + a1·3+ a2·32 = 10
Очевидно, что решением данной системы будет: a0=1, a1=0, a2=1.
Отсюда полином имеет вид P(x)= 1+x2 . Определим значение полинома при аргументах x=0.5 и x=2
P(0.5)= 1+0.52=1.25
P(2.0)= 1+22 =5
Обратите внимание, что полученные значения отличаются от результатов кусочно-линейной интерполяции, вычисленных в примере
1.1.
1.5 Интерполяционный многочлен Лагранжа
Интерполяционный многочлен для этого метода имеет вид
6
Pn(x) = y0 b0(x) + y1 b1(x) + … + yn bn(x)
, где
yi – ординаты интерполируемой функции определенной n+1 табличным значением (xi ; yi );
bi(x) – многочлен степени n, коэффициенты которых можно найти с помощью n+1 уравнений Pn(xi) = yi , где i=0, 1, … , n
В результате получим систему уравнений
y0 b0(x0) + y1 b1(x0) + … + yn bn(x0) = y0
. . .
y0 b0(xn) + y1 b1(xn) + … + yn bn(xn) = yn
Если значение bj(xi) выбраны так, что
1, при i = j,
b (x ) = 0, при i ≠ j,
j
i
то записанные выше уравнения будут выполняться. Это условие означает, что любой многочлен bj(x) равен нулю при каждом xi , кроме
xj . Следовательно, в общем случае многочлен bj(x) имеет вид ( см.
свойства полиномов)
bj(x)= сj (x-x0) (x-x1) . . . (x-xj-1) (x-xj+1) . . . (x-xn)
Так как bj(xj)=1, то коэффициент сj определится выражением
1
сj= ----------------------------------------------------(x-x0) (x-x1) . . . (x-xj-1) (x-xj+1) . . . (x-xn)
Для искомого многочлена получаем
Введя обозначения
Lj(x)= (x-x0) (x-x1) . . . (x-xj-1) (x-xj+1) . . . (x-xn) ,
можем записать полученный многочлен в более компактном виде
pn ( x) =
L j (x )
∑ yj ( )
j =0
Lj xj
n
7
(4.4)
Это выражение называется формулой интерполяции Лагранжа.
Пример 4.3
Решить задачу, рассмотренную в предыдущем примере, используя формулу интерполяционного многочлена Лагранжа.
Запишем интерполяционную формулу Лагранжа для трех точек
( − )( − )
( − )( − )
( − )( − )
p(x )= y ( x − x )( x − x ) + y (x − x )( x − x ) + y ( x − x )( x − x )
x x x x
x x x x
x x x x
1
2
0
0
2
1
0
1
0
2
0
1
2
1
0
1
2
2
0
2
1
Для наших данных
p( x) = 1
=
( x − 1)( x − 3)
( x − 0)( x − 3)
( x − 0)( x − 1)
+2
+ 10
=
(0 − 1)(0 − 3)
(1 − 0)(1 − 3)
(3 − 0)(3 − 1)
1
10
( x − 1)( x − 3) − x ( x − 3) + x ( x − 1)
3
6
Отсюда P(0.5)=(0.5-1)(0.5-3)/3 – 0.5•(0.5-3)+10•0.5•(0.5-1)/6=1.25
P(2)=(2-1)(2-3)/3 – 2•(2-3)+10•2•(2-1)/6=5
Естественно, что полученный результат совпадает с результатом
предыдущего примера. Однако, благодаря формуле Лагранжа не было необходимости составлять, а затем решать систему линейных
уравнений относительно коэффициентов полинома. Нетрудно заметить, что выполнив предыдущие преобразования в общем виде мы
получили бы ту же формулу полинома, что и в предыдущем примере.
Составим программу, реализующую вычисления интерполяционной формулы Лагранжа.
Sub Lagrang(X( ), Y( ) , N, Xt, Yt)
'
подпрограмма вычисления многочлена Лагранжа
' Входные данные:
'
X(N),Y(N) – значения табличной функции
'
N - число точек в табличной функции
'
Xt – значение аргумента, при котором вычисляется
' многочлен Лагранжа
8
Выходные данные:
Yt – Значение интерполяционного многочлена Лагранжа
' в точке Xt
Dim P As Single ' описания переменной для вычисления произведения
Dim i As Integer, j As Integer ' описание рабочих переменных
Yt = 0 ' обнуляем переменную в которой вычисляется значение многочлена
For i = 1 To N ' цикл для накапливания N слагаемых
P = 1 ' начальное значение переменной для вычисления очередного сомножителя
For j = 1 To N ' цикл для вычисления сомножителя
If i <> j Then P = P * (Xt - X(j)) / (X(i) - X(j))
Next j
' конец цикла j
Yt = Yt + Y(i) * P ' добавляем к многочлену очередное слагаемое
Next i
' конец цикла i
End Sub ' возврат в основную программу
'
'
Sub primer2()
' пример использования подпрограммы Lagrang
' программа для вычисления значений предыдущего примера
Dim X(1 To 3)
' определяем размерности массивов
Dim Y(1 To 3)
' с координатами точек
X(1) = 0: X(2) = 1: X(3) = 3
' задаем значение координат X
Y(1) = 1: Y(2) = 2: Y(3) = 10 ' задаем значение координат Y
Call Lagrang(X, Y, 3, 0.5, y1)
MsgBox "Для Х=0.5 значение полинома равно" & Str(y1)
Call Lagrang(X, Y, 3, 2, y1)
MsgBox " Для Х=2.0 значение полинома равно " & Str(y1)
End Sub
Результат выполнения программы
Для Х=0.5 значение полинома равно = 1.25
Для Х=2.0 значение полинома равно = 5
9
1.6 Приближение функций сплайнами
При наличии (n+1) точек приближаемой функции, степень интерполяционного полинома будет равна n. Это значит, что данный
полином может иметь n вещественных корней, а, следовательно, и
(n-1) максимумом и минимумов. Это приводит к появлению на полиноме нежелательных осцилляций, тенденция к которым усиливается с
ростом степени полинома, т.е. с увеличением числа интерполируемых точек.
Поэтому в инженерных приложениях полиномы степени выше 6ой практически не используются. В некоторых приложениях используют специальные полиномы, в формулу которых включают дополнительные компоненты подавляющие нежелательные осцилляции.
Другой способ устранения осцилляций – это построение составной кривой, в которой полиномы низкой степени последовательно
применяются для интерполяции групп точек. Полученная в результате кусочно-полиномиальная функция будет непрерывной, но в общем
случае может иметь разрывы производных в точках соединения последовательных отрезков кривых, как, например, в каждом узле при
кусочно-линейной интерполяции. Однако для большинства приложений требуется определенная гладкость получаемых кривых, поэтому
такие функции использовать нельзя.
Указанный недостаток кусочно-полиномиальной функции можно
преодолеть, если при ее построении учитывать требуемую гладкость
в узлах стыковки. Рассмотри последовательность точек (x0 , y0), (x1 ,
y1 ), … (xn , yn ), c x0< x1 <…< xn . Наша цель – провести через эти
точки составную кривую φ(x),имеющую следующие свойства:
- на каждом интервале xi-1< x < xi , i=0,1,…,n, функция φ(x) является кубическим полиномом;
- φ(x) и ее первые и вторые производные непрерывны в узлах интерполяции.
Полученная гладкая кусочно-кубическая кривая называется кубическим сплайном. Физическим аналогом кубического сплайна являются гибкие рейки, используемые плазовщиками при ручной про10
работке плаза кузова автомобиля, фюзеляжа самолета или корпуса
корабля.
Для некоторых приложений требуются еще более гладкие функции, обладающие в узлах непрерывной третьей и четвертой производной в каждом узле. В этих случаях используют сплайны более высокого порядка, например пятой. Простейший сплайн, сплайн первой
степени, представляет собой кусочно-линейную функцию рассмотренную выше.
11
Download