Данная задача заключается в решении определенного интеграла по квадратурной формуле Чебышева. Как известно, вычисление определенного интеграла сводится к вычислению площади криволинейной трапеции, ограниченной кривыми x = 0, y = a, y = b и y = f(x).
При вычислении определенного интеграла можно воспользоваться известной всем, формуле Ньютона – Лейбница, при условии f(x) непрерывна на отрезке [a, b], а также определена ее первообразная F(x). Но во многих случаях первообразная получается очень сложной для вычисления, да и функция часто задается таблично. Поэтому большое значение приобретает приближенное и в первую очередь численное интегрирование, задача которого заключается в нахождении приближенного значения интеграла по заданным или вычисленным значениям подынтегральной функции f(x) в некоторых точках (узлах) отрезка [a, b].
Механическая квадратура — численное значение однократного интеграла, и формулы численного интегрирования соответственно называют квадратурными.
Меняя подынтегральную функцию каким-либо интерполяционным многочленом, получаем квадратурные формулы, где x k — выбранные узлы интерполяции; A k — коэффициенты, зависящие только от выбора узлов, но не от вида функции (k = 0, 1, 2,........,n); R — остаточный член, или погрешность квадратурной формулы, отбросив который получим погрешность усечения. Далее, при расчете к погрешности усечения добавляются другие погрешности округления.
Разбив отрезок интегрирования [a, b] на n равных частей получим следующее: x i = x o + i .. h; (i = 0, 1, 2,......,n) x o = a; x n = b; h= (b-a)/n. Вычислим подынтегральную функцию в полученных узлах: y i = f(x i); (i = 0, 1, 2,......,n).
Для выведения формул численного интегрирования воспользуемся интерполяционным полиномом Лагранжа.
Пусть для функции y = f(x) известны в n + 1 точках X0, X1, X2, Xn промежутка [a,b] соответствующие определения f(xi)=yi (i=0,1,2..n). По заданным значениям Yi строим полином Лагранжа, заменяя f(x) полиномом Ln(x), где Rn(f) — ошибка квадратурной формулы. Воспользовавшись выражением для Ln(x), получим приближенную квадратурную формулу.
Однако заметим, следующее: коэффициенты Ai при данном расположении узлов не зависит от выбора функции f(x); для полинома степени n последняя формула точная.
Считая, что y = xK (k = 0, 1, 2..,n), получим линейную систему из n + 1 уравнений, где (k = 0, 1,..,n), из которой можно определить коэффициенты А0, А1,..,АN. Определитель системы есть определитель Вандермонда/
Но также необходимо заметить, что при применении данного метода фактически построение полинома Лагранжа Ln(x) является излишним. Простой метод подсчета погрешности квадратурных формул разработан С. М. Никольским.
Применяя метод трапеций и средних прямоугольников, интеграл будет численно равняться сумме площадей прямоугольных трапеций, где основание трапеции какая-либо малая величина (точность), и сумме площадей прямоугольников, где основание прямоугольника какая-либо малая величина (точность), а высота определяется по точке пересечения верхнего основания прямоугольника, график функции должен пересекать в середине.
Определим общую формулу Симпсона (параболическая формула) по следующим условиям: пусть n = 2m есть четное число и yi = f(xi) (i = 0, 1, 2...n) - значения функции y = f(x) для равноотстоящих точек а = x0, x1, ... ,xn=b с шагом h. Применив формулу Симпсона к каждому удвоенному промежутку [x0,x2], [x2,x4] ... [x2m-2,x2m] длины 2h и введя обозначения s 1 =y 1 +y 2 + ... +y 2m-1 s 2 =y 2 +y 4 + ... +y 2m получим обобщенную формулу Симпсона и остаточный член формулы Симпсона в общем виде, где x k I (x 2к-2 ,x 2к).
Рассмотрим квадратурную формулу Чебышева: пусть дана функция f(x) в виде многочлена f(x)=a o +a 1 x+...+a n x n. Проинтегрировав, преобразовав и подставив значения многочлена в узлах:
f(x 1)=a 0 +a 1 x 1 +a 2 x 12 +a 3 x 13 +...+a n x 1n
f(x 2)=a 0 +a 1 x 2 +a 2 x 22 +a 3 x 23 +...+a n x 2n
f(x 3)=a 0 +a 1 x 3 +a 2 x 32 +a 3 x 33 +...+a n x 3n
f(x n)=a 0 +a 1 x n +a 2 x n2 +a 3 x n3 +...+a n x nn
получим формулу Чебышева.
Значения х1,х2,..,хn для различных n приведены ниже в таблице:
n |
I |
t i |
n |
i |
t i |
2 |
1;2 |
± 0,577350 |
6 |
1;6 |
± 0,866247 |
3 |
1;3 |
± 0,707107 |
|
2;5 |
± 0,422519 |
|
2 |
0 |
|
3;4 |
± 0,266635 |
4 |
1;4 |
± 0,794654 |
7 |
1;7 |
± 0,883862 |
|
2;3 |
± 0,187592 |
|
2;6 |
± 0,529657 |
5 |
1;5 |
± 0,832498 |
|
3;5 |
± 0,321912 |
|
2;4 |
± 0,374541 |
|
4 |
0 |
|
3 |
0 |
|
|
|
Решение контрольного примера: f(x) = sin(x); где a = 0; при n = 5.
i |
x i |
y i |
1 |
0,131489 |
0,131118 |
2 |
0,490985 |
0,471494 |
3 |
0,785 |
0,706825 |
4 |
0,509015 |
0,487317 |
5 |
0,868511 |
0,763367 |
x 1 = p /4+ p /4*t 1 = p /4+ p /4(-0,832498) = 0,131489
x 2 = p /4+ p /4*t 2 = p /4+ p /4(-0,374341) = 0,490985
x 3 = p /4+ p /4*t 3 = p /4+ p /4*0=0,785
x 4 =1- x 2 = 1-0,490985 = 0,509015
x 5 =1- x 1 = 1-0,131489 = 0,868511
y 1 = sin(x 1) = sin(0,131489) = 0,131118
y 2 = sin(x 2) = sin(0,490985)=0,471494
y 3 =sin(x 3) = sin(0,785) = 0,706825
y 4 =sin(x 4) = sin(0,509015) = 0,487317
y 5 =sin(x 5) = sin(0,868511) = 0,763367
I = p /10(0,131118+ 0,471494+0,706825+0,487317+0,763367) = p /10*2,560121=0,8038779
Описание алгоритма программы.
Процедура TABL — это подпрограмма, осуществляющая вывод таблицы узлов (аргумент — функция).
Процедура CHEB — используя массивы x i и y i, высчитывает по квадратурной формуле Чебышева приближенное значение интеграла.
Процедура FORM — используя массив, содержащий аргументы x i заполняет массив y i.
Процедура VVOD — заполняет массив, содержащий в себе аргументы x i.
При запуске программы необходимо ввести границы интегрирования. После ввода границ интегрирования используется процедура VVOD, а затем высчитывается и выводится на экран шаг табулирования функции h. После этого используем процедуры FORM и CHEB. Получив результат, выводим таблицу (процедура TABL) и интеграл.
Делая вывод по исследованию нашей работы можно заметить, что вычисление определенных интегралов с помощью квадратурных формул, а в частности по формуле Чебышева не дает нам точного значения, а только приближенное. Чтобы вычислить интеграл более точно нужно уметь правильно выбрать метод и формулу, по которой будет вестись расчет. Также важно какой будет взят шаг интегрирования. На практике не всегда можно решить задачу интегрирования аналитическим способом, поэтому необходимо знать численные методы, хотя и они не могут дать точного значения интеграла.
Листинг программы: program integral; uses crt; const n = 5; k = -0.832498; l = -0.374541; z = 0.0; type aa = array[1..n] of real; var x,y:aa; a,b,h,ich:real; { заполнение х-сов в массив х[5] }; procedure vvod(var a,b:real;var c:aa); var i:integer; t:aa; Begin t[1]: = k; t[2]: = l; t[3]: = z; t[4]: = l; t[5]: = k; for i: = 1 to n-1 do c[i]: = ((b+a)/2 + (b-a)/2*t[i]); for i: = n-1 to n do; c[i]: = 1 - c[n+1-i]; end; {заполнение y-ков в массиве у[5]} procedure form(var x:aa; var y:aa); var i:integer; Begin for i:=1 to n do y[i]:=sin(x[i]); {функция} end; {процедура для расчета интеграла по квадратурной формуле Чебышева} procedure cheb(var y:aa;var ich:real); var i:integer; Begin ich: = 0; for i: = 1 to n do ich: = ich+y[i]*h; end; {процедура вывода таблицы} procedure tabl; var i:integer; Begin
writeln('___________________________________');
writeln('| i | t | x | y |');
writeln('___________________________________');
writeln('| 1 |',k:9:6,'|',x[1]:9:6,' |',y[1]:9:6,'|');
writeln('| 2 |',l:9:6,'|',x[2]:9:6,' |',y[2]:9:6,'|');
writeln('| 3 |',z:9:6,'|',x[3]:9:6,' |',y[3]:9:6,'|');
writeln('| 4 |',l:9:6,'|',x[4]:9:6,' |',y[4]:9:6,'|');
writeln('| 5 |',k:9:6,'|',x[5]:9:6,' |',y[5]:9:6,'|');
writeln('___________________________________');
end; Begin clrscr; writeln (Программа для вычисления); writeln (Определенного интеграла); writeln; writeln('Введите границы интегрирования a,b:'); readln(a,b); vvod(a, b, x); h: = (b-a)/n; writeln ('h = ',h:9:6); form(x,y); cheb(y,ich); tabl; writeln('I = ',ich:8:6); end
Вывод результата: Программа для вычисления определенного интеграла.
Введите границы интегрирования a,b: 0 1.5708, h= 0.314160
____________________________
| i | t | x | y |
____________________________
| 1 |-0.832498| 0.131556 | 0.131177|
| 2 |-0.374541| 0.491235 | 0.471716|
| 3 | 0.000000| 0.785400 | 0.707108|
| 4 |-0.374541| 0.508765 | 0.487099|
| 5 |-0.832498| 0.868444 | 0.763325|
____________________________
I=0.804383
Ракитин Т. А., Первушин В. А. Практическое руководство по численным методам с приложением программ на языке Basic.
Крылов В. И. Приближенные вычисления интегралов. — М.: Физмат.
Демидович и Марон. Основы вычислительной математики.
Копченова и Марон. Вычислительная математика в примерах и задачах.
Вольвачев А. Н., Крисевич В. С. Программирование на языке Паскаль для ПЭВМ ЕС. — Минск, 1989.
Зуев Е. А. Язык программирования Turbo Pascal. — М., 1992.
Скляров В. А. Знакомьтесь: Паскаль. — М., 1988.
Для подготовки данной работы были использованы материалы с сайта http://www.matematika-r.info/