Остаточный член ряда Фурье. Погрешности приближения функций. Численное дифференцирование, страница 2

14.Численное дифференцирование.

Необходимость численного дифференцирования возникает, если дифференцируемая функция задана таблично или в виде сложного аналитического выражения, от которого по известным правилам математически нельзя взять производную.     Пусть f(x) функция принадлежит классу непрерывных, дифференцируемых функций и представлена на интервале [a,b] в виде некоторой реализации (таблицы) , f(xi), iÎ[0,N] причем xi+1-xi=h , iÎ[0,N-1]что, как правило, имеет место при решении практических задач. Разложим f(x) в ряд Тейлора в окрестности точки xi      f(x)=f(xi) + f ’(xi)(x-xi)/1! + f ‘’(xi)(x-xi)2/2! + … + R(x), где R(x) – остаточный член ряда Тейлора.     Если на элементарном интервале [xi,xi+1] ограничиться двумя членами ряда Тейлора, то можно записать f(xi+1) = f(xi) + hf ‘(xi) + R(x) , откуда f ‘(xi) @ [f(xi+1) – f(xi)]/h а методическая погрешность дифференцирования, определяемая через R(x) , может быть оценена в виде e1£(h/2) max |f ‘’(x)| где xÎ[xi, xi+1].      Однако, поскольку реализация f(xi) , iÎ[0,N] практически всегда содержит случайные погрешности df(xi), iÎ[0,N] , дифференцированию подлежит на самом деле функция f*(xi)=f(xi)+df(xi).     При этом производная вычисляется в виде f*’(xi)@(f(xi+1)-f(xi))/h + (df(xi+1)-df(xi))/h .     Уменьшение шага h , с одной стороны , приводит к увеличению точности вычисления производной ( в пределе, при h->0 получается истинное значение _ , с другой стороны , увеличивает близость значений f(xi+1) и f(xi) . Таким образом, при уменьшении h в первом слагаемом будут  вычитаться очень близкие друг к другу числа, в результате чего верные значащие цифры могут привестись, а обрабатываться будут вычислительные погрешности, а второе слагаемое при h->0 неограниченно возрастает. Данное положение приводит к тому , что решение задачи численного дифференцирования становится неустойчивым , что нарушает корректность постановки задачи.     Регуляризацию можно осуществить путем ограничения шага h снизу. В частности, если не принимать во внимание вычислительную погрешность и учитывая, что |df(xi)|£D, iÎ[0, N] , шаг дифференцирования рекомендуется выбирать при условии e1£(h/2) max |f ‘’(x)| где xÎ[xi, xi+1] в виде h @ 2(D/M2)1/2, M2=max|f ‘’(x)| где xÎ[a,b] .      Выражение f ‘(xi) @ [f(xi+1) – f(xi)]/h с погрешностью e1£(h/2) max |f ‘’(x)| где xÎ[xi, xi+1] представляет собой формулу численного дифференцирования первого порядка точности ( относительно h ).     Производные могут вычисляться по формулам дифференцирования второго порядка точности, которые для первой и второй производных записываются в виде f ‘(xi) @ [f(xi+1) – f(xi-1)]/(2h) , e2 £ (h2/6)max |f(3)(x)| где xÎ[xi-1, xi+1] , f ‘’(xi) @ [f(xi+1) – 2f(xi)      + f(xi-1) ]/(h2) , e2 £ (h2/12)max |f(4)(x)| где xÎ[xi-1, xi+1].     Рассмотрим другой подход к получению формул численного дифференцирования, базирующийся на замене дифференцируемой функции интерполяционным полиномом. В этом случае для вычисления первой производной можно записать f ‘(x) = P’n(x) +R’n(x) , где P’n(x) – производная интерполяционного полинома, которая может быть взята аналитически, а R’n(x) – производная остаточного члена интерполяции, xÎ[a, b].                    Однако и в этом случае возникает проблема точности вычисления производной, поскольку близость дифференцируемой f(x) и полинома Pn(x) вовсе не означает близость их производных. Тем не менее описанный подход используется для вычисления производных, в том числе и более первого порядка, хотя каждая производная понижает степень интерполяционного полинома.     В предположении, что дифференцируемая функция y=f(x) имеет необходимое число производных и на интервале задана в равноотстоящих точках xi , iÎ[0, n] , запишем для нее интерполяционный полином Ньютона      Pn(x) = y0+tDy0 + [t(t-1)D2y0]/2! + [t(t-1)(t-2)D3y0]/3! + Rn(x) , t = (x-x0)/h , h=xi+1-xi=const, iÎ[0, n-1] .     Учитывая , что      dy/dx=[dy/dt]*[dt/dx]=[1/h]*[dy/dt] первую и вторую производные можно вычислять в виде      P’n(x) = [1/h]*[Dy0 + (2t-1)*(D2y0)/2 + (3t2-6t+2)*(D3y0)/6 + R’n(x)] ,      P’’n(x) = [1/h2]*[D2y0 + (t-1)*(D3y0) + R’’n(x)] . По аналогии определяются производные более высоких порядков.     Отметим, что эти выражения записаны для случая, когда производные определяются в некоторой точке xÎ[a, b] , которая не является узлом интерполяции. В целях увеличения точности дифференцирования в качестве точки x0 рекомендуется выбирать ближайшее к точке x значение узла.     Если дифференцирование производится в узлах xi , iÎ[0, n] , то эти формулы , существенно упрощаются. Так, полагая x=x0 и t=0 , получаем P’n(x) = [1/h]*[Dy0 - (D2y0)/2 + (D3y0)/3 - (D4y0)/4 + R’n(x)] ,      P’’n(x) = [1/h2]*[(D2y0) - (D3y0) + (11/12)*(D4y0) + R’’n(x)] , .     Погрешность дифференцирования можно определить, воспользовавшись оценкой остаточного члена интерполяционной формулы и , например, при вычислении первой производной, поскольку    [d/dt][t(t-1)(t-2)…(t-n)]t=0=(-1)nn! , она имеет вид ex=x0 @ [(-1)n]*[(Dn+1y0)/(h(n+1))] .      В заключение отметим, что при необходимости дифференцируемую функцию вместо интерполяционного полинома можно приблизить в виде обобщенного ряда Фурье.