Применение квадратурной формулы Чебышева для вычисление определенного интеграла
Оглавление Введение *Решение контрольного примера *Описание алгоритма программы *Выводы *Листинг программы. *Список литературы *
Данная задача заключается в решении определенного интеграла по квадратурной формуле Чебышева. Как известно, вычисление определенного итегралла сводится к вычислению площади криволинейной трапеции, ограниченной кривыми 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), получим приближенную квадратурную формулу. Однако, заметим, следующее:
Считая, что 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 приведены ниже в таблице.
f(x) = sin(x); где a=0; при n=5
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
1. Ракитин Т.А., Первушин В.А. “Практическое руководство по численным методам с приложением программ на языке Basic“2. Крылов В.И. “Приближенные вычисления интегралов“ - М. : Физмат. 3. Демидович и Марон “Основы вычислительной математики“ 4. Копченова и Марон “Вычислительная математика в примерах и задачах” 5. Вольвачев А.Н., Крисевич В.С. Программирование на языке Паскаль для ПЭВМ ЕС. Минск.: 1989 г. 6. Зуев Е.А. Язык программирования Turbo Pascal. М.1992 г. 7. Скляров В.А. Знакомьтесь: Паскаль. М. 1988 г. Поделитесь этой записью или добавьте в закладки | Полезные публикации |