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

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

6. 2. Особенностизадачичисленногодифференцирования функций, заданныхтаблицей

Пусть известны табличные значения функции f(x) в конечном числе точек отрезка [а,b]. Требуется определить значение производной в некоторой точке отрезка [а,b].

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

f ' (x) F ' (x) .

(VI.8)

n

 

Полагая, что погрешность интерполирования определяется формулой

Rn (x) f (x) Fn (x) ,

(VI.9)

находим оценку погрешности вычисления полинома

r (x)

f ' (x) F ' (x) .

(VI.10)

n

n

 

Отметим, что задача численного дифференцирования является некорректной, т. к. погрешность производной полинома может существенно превышать погрешность интерполяции.

6.3.Интегрирование функций, заданных аналитически

Сгеометрической точки зрения определенный интеграл

F b

f (x)dx

(VI.11)

a

 

 

— есть площадь фигуры, ограниченная графиком функции f(x) и прямыми х = а , х = Ь (рис. VI.3).

138

y

f(x)

a b x

Рис. VI.3 К объяснению геометрического смысла определенного интеграла

Разделим отрезок [а,b] на N равных отрезков длиной x, где

x

b a

.

(VI.12)

 

 

N

 

Тогда координата правого конца i-го отрезка определяется по формуле

xi x0

i x ,

(VI.13)

где x0 a , i

0, 1, , N .

 

Рис. VI.4. Геометрическая интерпретация метода левых прямоугольников

139

Рис. VI.5. Геометрическая интерпретация метода правых прямоугольников

Простейшая оценка площади под кривой f(x) может быть получена как сумма площадей прямоугольников, одна из сторон которого совпадает с отрезком [ xi , xi 1 ] , а высота равна

значению функции в точке xi , (метод левых прямоугольников, рис. VI.4) или в точке xi 1 (метод правых прямоугольников,

рис. VI.5). Погрешность вычисления значения интеграла на каждом шаге показана на рисунках закрашенными фигурами. Значение определенного интеграла вычисляется по формулам

N 1

 

FL f (xi ) x

(VI.14)

i 0

 

N

 

FR f (xi ) x

(VI.15)

i 1

дляметодовлевыхиправыхпрямоугольников, соответственно. Можно повысить точность вычисления определенного интеграла, если заменять реальную функцию на каждом

интервале

[ xi , xi 1 ] ,

проходящей

через

(xi , f (xi )),(xi 1 , f (xi 1))

i 0,1, , N 1

 

отрезком прямой,

точки

с

координатами

- линейная интерполяция. 140

В этом случае фигура, ограниченная графиком функции и прямымиx xi , x xi 1 , является трапецией. Искомый определенный интеграл определяется как сумма площадей всех трапеций:

N 1

1

( f (xi 1) f (xi )) x

1

N 1

1

f (xN )

 

FN

f (x0 ) f (xi )

x.

2

 

2

i 0

2

i 1

 

 

 

 

 

 

 

 

(VI.16)

Более высокая точность вычисления интегралов обеспечивается при использовании параболической интерполяции (полиномом второй степени) по трем соседним точкам:

y ax2 bx c .

(VI.17)

Для нахождения коэффициентов а,b,с полинома, проходящего через точки (x0 , y0 ), (x1, y1), (x2 , y2 ), нужно найти решение

следующей системы линейных уравнений:

y

ax 2

bx

c,

 

0

0

0

 

 

y1

ax12

bx1

c,

(VI.18)

 

2

bx2 c,

 

y2 ax2

 

относительно неизвестных а ,b , с.

Решив систему (VI.18) относительно неизвестных а, b, с любым известным методом (например, Крамера), подставив найденные выражения в (VI.17) и выполнив элементарные преобразования, получаем

y y

 

(x x1 )(x x2 )

 

y

(x x0 )(x x2 )

y

 

(x x0 )(x x1 )

.

 

 

)

 

 

 

0 (x

x )(x

x

1 (x

x

)(x

x

)

 

2 (x

x

)(x

x )

 

 

0

1

0

2

 

 

1

2

1

2

 

 

2

0

2

1

 

(VI.19)

Отметим, что формула (VI.19) совпадает с интерполяционным полиномом Лагранжа, подробно рассмотренным в главе V, при интерполяции по трем точкам.

141

Площадь под параболой у = у(х) на интервале [ x0 , x2 ]

находится посредством

элементарного

интегрирования

(VI.19):

 

1

 

 

 

 

 

 

 

F

 

( y

 

4y y

 

) x,

(VI.20)

 

0

2

0

3

 

 

1

 

 

 

 

 

 

 

 

 

 

где x x1 x0 x2 x1 .

Искомый определенный интеграл находится как площадь всех параболических сегментов (формула Симпсона):

FN

 

1

f (x0 ) 4 f (x1) 2 f (x2 ) 4 f (x3 )

(VI.21)

3

 

 

2 f (xN 2 ) 4 f (xN 1) f (xN ) x .

 

 

 

Обратите внимание на то обстоятельство, что в формуле Симпсона N должно быть четным числом.

/ 2

Пример VI.2. Вычислить интеграл sin(x)dx методом

0

прямоугольников в пакете MATLAB.

Решение:

»f=inline('sin(x)'); % задание подынтегральной функции

»Xmin=0;

»Xmax=pi/2;

»N=2001;

»i=l:N;

»dx=(Xmax-Xmin)/(N-l); % шаг интегрирования

»x=Xmin:dx:Xmax; % вычисление координат узлов сетки

»y=feval(f,x); % вычисление значений функции в узлах сетки % вычисление интеграла по формуле правых прямоугольников

»m=2:N;

»yl(m-l)=y(m) ;

»Fr=sum(yl) *dx

Fr =

 

1.0004

 

» Fr-1

 

ans =

142

 

3.9284e-004

%вычисление интеграла по формуле левых прямоугольников

» m=l:N-l;

» yl (m) =у (m) ; » Fl=sum(yl)*dx Fl =

0.9996 » Fl-1 ans =

-3.9295e-004

%вычисление интеграла методом трапеций

» s=0;

for i=2:N-l s=s+y[i];

end;

Ft=(0.5*y(l)+s+0.5*y(N))*dx Ft =

1.0000

»Ft-1 ans =

-5.1456e-008

% вычисление интеграла методом Симпсона

»s=0;

for i=2:N-l

if i-2*ceil(i/2)= =0 k=4;

else k=2;

end;

s=s+k*y(i);

end;

Fs=(y(l)+s+y(N))*dx/3 Fs =

1.0000

143

» Fs-1 ans =

1.5543e-015

Для вычисления значений определенных интегралов в пакете

MATLAB есть функции quad ( ), guadl( ), trapz( ), cumtrapz( ),

которые имеют следующий синтаксис:

q = quad (fun, a, b) — возвращает значение интеграла от функции fun на интервале [а, b], при вычислении используется адаптивный метод Симпсона;

q = quad(fun,a,b,tol) — возвращает значение интеграла от функции fun с заданной относительной погрешностью tol (по умолчанию tol=10-3);

q = quad (fun, a, b,tol, trace) — возвращает значение интеграла от функции fun на интервале [а, b] на каждом шаге итерационного процесса;

q = quad(fun,a,b, tol, trace, pi,p2,...) — возвращает значение интеграла от функции fun на на интервале [а, b] на каждом шаге итерационного процесса, pi, р2 — параметры, передаваемые в функцию fun;

[q,fcnt] = quadi(fun,a,b,...) — возвращает в переменную fcnt до-

полнительно к значению интеграла число выполненных итераций.

Функция guad1 ( ) возвращает значения интеграла, используя для вычислений метод Лоббато (Lobbato). Синтаксис этой функции аналогичен синтаксису функции quad ().

/ 2

Пример VI.3. Вычислить интеграл sin(x)dx с

0

использованием функций quard ().

Решение:

»q=quad('sin',0,pi/2,10^-4) q =

1.0000

»q-1

ans =

144

-3.7216e-008

» q=quad('sin',0,pi/2,10^-6,'trace');

 

9

0.0000000000

4.26596866e-001

0.0896208493

11

0.4265968664

7.17602594e-001

0.4966040522

13

0.4265968664

3.58801297e-001

0.2032723690

15

0.7853981634

3.58801297e-001

0.2933317183

17

1.1441994604

4.26596866e-001

0.4137750613

»q-1 ans =

-2.1269e-009

»[q, fnct]=quad( 'sin' ,0, pi/2 , 10^-6, 'trace' ) ;

9

0.0000000000

4.26596866e-001

0.0896208493

11

0.4265968664

7.17602594e-001

0.4966040522

13

0.4265968664

3.58801297e-001

0.2032723690

15

0.7853981634

3.58801297e-001

0.2933317183

17

1.1441994604

4.26596866e-001

0.4137750613

» 17

Функция trapz( ) вычисляет интеграл, используя метод трапеций. Синтаксис этой функции следующий:

z = trapz(Y) — возвращает значение определенного интеграла

в предположении,

что Х=1 : length (Y) ;

z = trapz(Х,Y) —

возвращает значение интеграла на

интервале [х(1), x(N)];

z = trapz(Х,Y,dim) — интегрирует вектор Y, формируемый из чисел, расположенных в размерности dim многомерного массива.

Функция cumtrapz( ), вычисляет интеграл, как функцию с переменным верхним пределом. Синтаксис функции cumtrapz() аналогичен синтаксису функции trapz( ).

145

/ 2

Пример VI.4. Вычислить интеграл sin(x)dx dx с

0

использованием встроенной функции пакета MATLAB.

Решение:

»x =0:0.01:pi/2; % задание координат узловых точек

»y= sin(x); % вычисление значений подынтегральной функции

%в узловых точках

»trapz (у) % вычисление значения интеграла в предположении

%о том, что шаг интегрирования равен единице

ans = 99.9195

»trapz (х, у) % вычисление значения интеграла на отрезке

 

 

 

 

%

0,

2

сшагоминтегрирования0.01

ans = 0.9992

Пример VI.5. Вычислить интеграл с переменным верхним

x

пределом sin( )d на интервале 0, 3 / 2 .

0

Решение:

»х=0:0.01:3*pi/2; % задание координат узловых точек

»y=sin(x); % вычисление значений подынтегральной функции

%в узловых точках

»z=cumtrapz(x,y); % вычисление значений интеграла с

%переменным верхним пределом в узловых точках

» plot(x,y,x,z) % построение графиков подынтегральной

%функции и интеграла с переменным

%верхним пределом (рис. VI.6)

146

x

Рис. VI.6. Графики функций f(x)=sin (x) (1), (x) sin( )d

0

6.4. Погрешность численного интегрирования

Для нахождения зависимостей погрешности вычисления определенного интеграла на отрезке [а, b] от числа отрезков

разбиения

интервала

 

интегрирования

 

разложим

подынтегральную функцию в ряд Тейлора:

 

 

f (x) f (xi ) f '(xi )(x xi )

1

f ''(xi )(x xi )2

 

(VI.22)

2

 

 

 

 

 

 

 

 

, xi 1 будет

Тогда интеграл от данной функции на отрезке xi

равен:

 

 

 

 

 

 

 

 

(VI.23)

f (x)dx f (xi ) x 1 f '(xi )( x)2 1 f ''(xi )( x)3

xi 1

 

 

 

 

 

 

 

 

 

xi

2

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

Оценим погрешность метода левых прямоугольников. Погрешность интегрирования i, на отрезке xi , xi 1 равняется

разности между точным значением интеграла и его оценкой f (xi ) x : 147

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