Лабораторная работа 6. Аппроксимация функций Аппроксимацией (приближением) функции f (x) называется нахождение такой функции g (x) (аппроксимирующей функции), которая была бы близка заданной. Критерии близости функций f (x) и g (x) могут быть различные. В том случае, когда приближение строится на дискретном наборе точек, аппроксимацию называют точечной или дискретной. В том случае, когда аппроксимация проводится на непрерывном множестве точек (отрезке), аппроксимация называется непрерывной или интегральной. Примером такой аппроксимации может служить разложение функции в ряд Тейлора, то есть замена некоторой функции степенным многочленом. Пусть задан дискретный набор точек xi , ( i = 0,1,..., n ), называемых узлами интерполяции, причем среди этих точек нет совпадающих, а также значения функции y i в этих точках. Требуется построить функцию g (x) , проходящую через все заданные узлы. Таким образом, критерием близости функции является g ( xi ) = yi . В качестве функции g (x) обычно выбирается полином, который называют интерполяционным полиномом. В том случае, когда полином един для всей области интерполяции, говорят, что интерполяция глобальная. В тех случаях, когда между различными узлами полиномы различны, говорят о кусочной или локальной интерполяции. Найдя интерполяционный полином, мы можем вычислить значения функции f (x) между узлами, а также определить значение функции f (x) даже за пределами заданного интервала (провести экстраполяцию). Линейная интерполяция Простейшим случаем локальной интерполяции является линейная интерполяция, когда в качестве интерполяционной функции выбирается полином первой степени, то есть узловые точки соединяются прямой линией. Линейная интерполяция осуществляется с помощью встроенной функции linterp. Пусть требуется провести линейную интерполяцию функции sin(x) на интервале [0,6] используя пять узлов интерполяции и вычислить значения функции в четырех точках xk (рис. 6.1): 1. Зададим значения k и x k ; 2. Зададим интервал изменения x и число узловых точек n ; 3. Определим шаг изменения h переменной x ; 4. Вычислим координаты узлов x k и значения функции y i в них; 5. Проведем линейную интерполяцию с помощью функции linterp; 6. Построим исходную и интерполяционную зависимости; 7. Вычислим значение интерполяционной функции в заданных точках и сравним их с точными значениями. Рис. 6.1. Как видно, результаты интерполяции отличаются от точных значений функции незначительно. Интерполяция сплайнами В настоящее время среди методов локальной интерполяции наибольшее распространение получила интерполяция сплайнами. При этом строится интерполяционный полином третьей степени, проходящий через все заданные узлы и имеющий непрерывные первую и вторую производные. На каждом интервале [xi , xi +1 ] интерполирующая функция является полиномом третьей степени S i ( x ) = ai + bi ( x − xi −1 ) + ci ( x − xi −1 ) 2 + d i ( x − xi −1 ) 3 , xi −1 ≤ x ≤ xi , который удовлетворяет условиям S ( xi ) = y i (6.1) (6.2) Если всего n узлов, то интервалов – n − 1 . Значит, требуется определить 4(n − 1) неизвестных коэффициентов полиномов. Условие (6.2) дает нам n уравнений. Условие непрерывности функции и ее первых двух производных во внутренних узлах интервала дает дополнительно 3(n − 2) уравнений S i ( xi +1 ) = S i +1 ( xi +1 ) S 'i ( xi +1 ) = S 'i +1 ( xi +1 ) (6.2) S ' 'i ( xi +1 ) = S ' 'i +1 ( xi +1 ) Всего имеем 4n − 6 различных уравнений. Два недостающих уравнения можно получить, задавая условия на краях интервала. В частности, можно потребовать нулевой кривизны функции на краях интервала, то есть S ' ' (a) = S ' ' (b) = 0 . Рассмотрим задачу об интерполяции функции sin( x) с помощью сплайнов. Для этого воспользуемся встроенной функцией interp(VS,x,y,z). Переменные x и y задают координаты узловых точек, z является аргументом функции, VS определяет тип граничных условий на концах интервала. 1. Зададим значения k и x k (рис. 6.2); 2. Зададим интервал изменения x и число узловых точек n ; Рис. 6.2. 3. Определим шаг изменения h переменной x ; 4. Вычислим координаты узлов x k и значения функции y i в них; 5. Определим интерполяционные функции для трех типов кубического сплайна; 6. Вычислим значения интерполяционных функций в заданных точках и сравним их с точными значениями. 7. Построим исходную и интерполяционную зависимости для каждого типа сплайнов (рис. 6.3). 7) 1 1 yi gl( z ) yi gp( z ) 0 sin( z ) 0 sin( z ) 1 1 0 2 4 6 0 xi , z , z 2 4 6 xi , z , z 1 yi gc( z ) 0 sin( z ) 1 0 2 4 xi , z , z 6 Рис. 6.3. Обратите внимание, что результаты интерполяции различными типами кубических сплайнов практически не отличаются во внутренних точках интервала и совпадают с точными значениями функции. Вблизи краев интервала отличие становится более заметным, а при экстраполяции за пределы заданного интервала различные типы сплайнов дают существенно разные результаты. Глобальная интерполяция При глобальной интерполяции ищется единый полином для всего интервала. Если среди узлов {xi , yi } нет совпадающих, то такой полином будет единственным, и его степень не будет превышать n . Запишем систему уравнений для определения коэффициентов полинома ⎧a0 + a1 x + ... + a n x n = y 0 ⎪ n ⎪a0 + a1 x + ... + a n x = y1 . (6.3) ⎨ .......... .......... .......... ....... ⎪ ⎪a + a x + ... + a x n = y ⎩ 0 1 n n 1. Зададим значения k и x k (рис. 6.4); 2. Зададим интервал изменения x и число узловых точек n ; 3. Определим шаг изменения h переменной x ; Рис. 6.4. 4. 5. 6. 7. 8. Вычислим координаты узлов x k и значения функции y i в них; Определим матрицу коэффициентов системы уравнений (6.3); Решим систему уравнений матричным методом; Определим интерполяционный полином; Вычислим значение интерполяционного полинома в заданных точках и сравним их с точными значениями. Выведем коэффициенты интерполяционного полинома a i 9. Построим исходную и интерполяционную зависимости (рис. 6.5). 9) 1 yi L( z ) 0 sin( z ) 1 0 2 4 xi , z , z Рис. 6.5. 6 Из-за накопления вычислительной погрешности (ошибок округления) при большом числе узлов (n>10) возможно резкое ухудшение результатов интерполяции. Кроме того, для целого ряда функций глобальная интерполяция полиномом вообще не дает удовлетворительного результата. Индивидуальные задания Задание 1 Провести линейную интерполяцию функции f ( x) на интервале [a, b] используя четыре узла интерполяции и вычислить значения функции в трех произвольных точках x k ∈ [a, b ]. Задание 2. Провести сплайн-интерполяцию функции f ( x) на интервале [a, b] используя четыре узла интерполяции и вычислить значения функции в четырех произвольных точках x k ∈ [a, b]. Задание 3. Провести глобальную интерполяцию функции f (x) на интервале [a, b] используя четыре узла интерполяции и вычислить значения функции в пяти произвольных точках x k ∈ [a, b]. Результаты заданий 1-3 должны быть представлены к защите в распечатанном виде (см. образец). Варианты индивидуальных заданий № варианта f ( x) , [a, b] f ( x) , [a, b] № варианта π 1, 16, 31, 46 cos( x ) , [0, ] 2 9, 24, 39, 54 π π 2, 17, 32, 47 cos( x ) + sin( x ) , [− , ] 3 3 10, 25, 40, 55 e π π 3, 18, 33, 48 cos( x ) − sin( x ) , [− , ] 2 2 11, 26, 41, 56 1/(1 + e ), [0, 4] π π 4, 19, 34, 49 sin( x ) − cos( x ) , [− , ] 4 4 12, 27, 42, 57 sin(x + e π π 5, 20, 35, 50 2sin(2x) − cos(3x) , [− , ] 3 3 13, 28, 43, 58 e π 6, 21, 36, 51 sin(2 x) + 2cos( x) , [0, ] 3 14, 29, 44, 59 cos(x + e π 7, 22, 37, 52 3sin( x) + cos(2 x) , [− , 0] 2 15, 30, 45, 60 e π 8, 23, 38, 53 sin(2 x) − 2cos(2 x) , [− , 0] 2 sin(3x) − 4cos(3x) , [0, π ] 2 -(x + sin x) , [2, 5] -x sin x ), [0, 3] -(x + 1/x) , [1, 3] cos x cos x ), [3, 6] cos x2, [0, 2]