Вычисление определённых интегралов


                Министерство Образования Российской Федерации


             Рязанская государственная радиотехническая академия
               Кафедра вычислительной и прикладной математики.



                     ВЫЧИСЛЕНИЕ ОПРЕДЕЛЕННЫХ ИНТЕГРАЛОВ.

     Пояснительная записка к курсовой работе по дисциплине «Информатика»



                                                       Выполнил: студент гр.


                                                                   Проверил:
                                                                Никитин В.И.



                                Рязань, 2001г



                                  Задание.


      Составить программу вычисления определенного интеграла [pic]
с  погрешностью  не  превышающей  заданную  величину  [pic].   В   программе
предусмотреть  защиту от  зацикливания  итерационного  процесса,  подсчет  и
вывод на печать числа итераций, за которое удается найти значение  интеграла
с заданной погрешностью.  Для проверки  программы  интегрирования  вычислить
[pic]
Метод вычислений – Формула Гаусса.

|№  |f(x)              |a     |b     |c              |d            |[pic]     |
|1  |edx/2cos2(cx)     |0     |(     |0.9; 1; 1.05;  |2.4; 2.5; 2.6|10-4      |
|   |                  |      |      |1.1            |             |          |
|2  |(x ln(cdx))2      |1     |e     |3; 3.2; 3.4;   |0.5; 0.4;    |10-3      |
|   |                  |      |      |3.5            |0.85         |          |


                                 Содержание.


Задание.    1


Содержание. 2


Описание метода решения.     3


Блок-схема программы.  4


Текст программы и результаты  счета.    5


Заключение. 7


Библиографический список.    7



                          Описание метода решения.


      В формуле Гаусса на каждом интервале интегрирования  значение  функции
f(x) вычисляется не в равномерно распределенных по  интервалу   узлах,  а  в
абсциссах,   выбранных   из   условия   обеспечения   минимума   погрешности
интерполяции:
                                    [pic]
где  n- число интервалов интегрирования, m –  число  вычисляемых  на  каждом
интервале   значений   функции.    [pic],    [pic]–    границы    интервалов
интегрирования; [pic] и [pic]- коэффициенты  значения  которых  определяются
величиной m. Для m=3 A1=5/9, A2=8/9, A3=5/9, [pic], t2=0, t3=-t1



                            Блок-схема программы.



                 Блок-схема1: Функция вычисления интеграла.



                                           Блок-схема 2: Основная программа.

                    Текст программы и результаты  счета.

program Kursovoy;
const A1=5/9; A2=8/9; t=-0.77459;{константы для взятия интеграла методом
Гаусса}
type func=function(x,c,d:real):real;{прототип функции от которой берется
интеграл}
var a,b,eps:real;{пределы интегрирования и точность вычисления}
    c:array[1..4] of real;{параметры функции, от которой берется интеграл}
    d:array[1..5] of real;{взяты из таблицы 2}
function f_test(x,c,d:real):real;{тестовая функция sin(x)}
begin{интеграл от 0 до пи теоретически равен 2}
  f_test:=sin(x);
end;
function f1(x,c,d:real):real;{первая функция из таблицы 2}
begin
  f1:=exp(d*x/2)*sqr(cos(c*x));
end;
function f2(x,c,d:real):real;{вторая функция из таблицы 2}
begin
  f2:=sqr(x*ln(c*d*x));
end;
{Функция взятия интеграла от функции f, прототип(вид) которой описан в типе
func
 a,b- пределы интегрирования, cm,dm-параметры c и d функции f, eps
-точность вычислений
 k-число итераций, за которые удалось найти интеграл }
function Integral(f:func;a,b,cm,dm,eps:real; var k:integer):real;
var S,z,h,c,d,l,x,x1,x2,x3:real;{S-текущее приближенное значение интеграла,
    z-предыдуще приближенное значение интеграла,h-шаг интегрирования,
    c,d,l,x,x1,x2,x3-вспомогательные переменные см. стр.25 методички}
    i,n:integer;{i-счетчик цикла, n-число интервалов интегрирования}
begin
  n:=1;  S:=0; k:=0;
  repeat
    k:=k+1;{увеличиваем число итераций}
    z:=S; {предыдущее значение интеграла равно текущему}
    n:=n*2;{в два раза увеличиваем число интервалов интегрирования}
    h:=(b-a)/n;  x:=a; S:=0; c:=h/2; l:=c*t;{определение шага
интегрирования,
    начального значения x, сам интеграл сначала равен 0,
    вспомогательные переменные считаем }
    for i:=0 to n-1 do{перебираем все интервалы интегрирования}
    begin
      d:=x+c; x1:=d-l;x2:=d; x3:=d+l;{вычисляем значения абцисс узлов,
      выбранных из условия обеспечения минимума погрешности интерполяции}
      S:=S+A1*(f(x1,cm,dm)+f(x3,cm,dm))+A2*f(x2,cm,dm);{добавляем к сумме}
      x:=x+h;{переходим на новый интервал интегрирования}
    end;
    S:=S*c;{умножаем полученную сумму на h/2}
  until (abs(z-S)=14);{выходим из цикла,
  если относительная погрешность предыдущего и текущего интегралов меньше
заданной точности
  или если число итераций превысило допустимое}
  Integral:=S;{возвращаем значение полученного интергала}
end;
var i,j,n:integer;
begin
  {вычисляем значение проверочного интеграла, передавая в функцию Integral
имя вычисляемой функции
  в данном случае f_test, интервал интегрирования a=0 b=3.14159
  cm=0 dm=0(последние два параметра в данном случае могут быть любыми,т.к.
f_test от них не зависит)
  eps=1e-3(точность), в параметр n, по выходе из функции вычисления
интеграла будет записано число итераций}
  writeln('Проверочный интеграл от 0 до пи sin(x)dx
=',Integral(f_test,0,3.14159,0,0,1e-3,n):7:5,
    '  ',n,' итераций');
  c[1]:=0.9; c[2]:=1; c[3]:=1.05; c[4]:=1.1;{ввод параметров для первой
функции}
  d[1]:=2.4; d[2]:=2.5; d[3]:=2.6; eps:=1e-4;
  a:=0; b:=3.14159;
  writeln('Интеграл от ',a:1:0,' до ',b:5:3,' функции f1 ','с
точностью',eps:5,' при:');
  for i:=1 to 4 do{перебираем параметр с}
    for j:=1 to 3 do{перебираем параметр d}
    begin
  {вычисляем значение первого интеграла, передавая в функцию Integral имя
вычисляемой функции
  в данном случае f1, интервал интегрирования a=0 b=3.14159
  cm=c[i] dm=d[i](последние два параметра перебираются в цикле и не равны
0, т.к. f1 от них зависит)
  eps=1e-4(точность), в параметр n, по выходе из функции вычисления
интеграла будет записано число итераций}
      writeln('с=',c[i]:4:2,' d=',d[j]:4:2,'  равен
',Integral(f1,a,b,c[i],d[j],eps,n):8:5, '  ',n, ' итераций');
    end;
  readln;{ожидаем нажатия клавиши enter, иначе все выводимые данные не
поместятся на один экран}
  c[1]:=3; c[2]:=3.2; c[3]:=3.4; c[4]:=3.5;{ввод параметров для первой
функции}
  d[1]:=0.5; d[2]:=0.4; d[3]:=0.85; eps:=1e-3;
  a:=1; b:=exp(1);{b=e}
  writeln('Интеграл от ',a:1:0,' до ',b:5:3,' функции f2 ','с
точностью',eps:5,' при:');
  for i:=1 to 4 do{перебираем параметр с}
    for j:=1 to 3 do{перебираем параметр d}
    begin
  {вычисляем значение второго интеграла, передавая в функцию Integral имя
вычисляемой функции
  в данном случае f2, интервал интегрирования a=1 b=e
  cm=c[i] dm=d[i](последние два параметра перебираются в цикле и не равны
0, т.к. f2 от них зависит)
  eps=1e-3(точность), в параметр n, по выходе из функции вычисления
интеграла будет записано число итераций}
      writeln('с=',c[i]:4:2,' d=',d[j]:4:2,'  равен
',Integral(f2,a,b,c[i],d[j],eps,n):8:5, '  ',n, ' итераций');
    end;
end.
                              Результаты счета.


Проверочный интеграл от 0 до пи sin(x)dx =2.00000  2 итераций

Интеграл от 0 до 3.142 функции f1 с точностью 1.0E-0004 при:
с=0.90 d=2.40  равен 17.12437  3 итераций
с=0.90 d=2.50  равен 19.52435  3 итераций
с=0.90 d=2.60  равен 22.28654  3 итераций
с=1.00 d=2.40  равен 22.33040  2 итераций
с=1.00 d=2.50  равен 25.49172  2 итераций
с=1.00 d=2.60  равен 29.12609  3 итераций
с=1.05 d=2.40  равен 24.19102  3 итераций
с=1.05 d=2.50  равен 27.60541  3 итераций
с=1.05 d=2.60  равен 31.52694  3 итераций
с=1.10 d=2.40  равен 25.37969  3 итераций
с=1.10 d=2.50  равен 28.93760  3 итераций
с=1.10 d=2.60  равен 33.01928  3 итераций

Интеграл от 1 до 2.718 функции f2 с точностью 1.0E-0003 при:
с=3.00 d=0.50  равен  8.40102  2 итераций
с=3.00 d=0.40  равен  5.52503  2 итераций
с=3.00 d=0.85  равен 17.78460  2 итераций
с=3.20 d=0.50  равен  9.35094  2 итераций
с=3.20 d=0.40  равен  6.29171  2 итераций
с=3.20 d=0.85  равен 19.17026  2 итераций
с=3.40 d=0.50  равен 10.29153  2 итераций
с=3.40 d=0.40  равен  7.06018  2 итераций
с=3.40 d=0.85  равен 20.52016  2 итераций
с=3.50 d=0.50  равен 10.75780  2 итераций
с=3.50 d=0.40  равен  7.44414  2 итераций
с=3.50 d=0.85  равен 21.18214  2 итераций



                                 Заключение.

      В данной курсовой работе вычислялись  определенные  интегралы  методом
Гаусса. Как видно из полученных результатов, программа работает верно,  т.к.
теоретически [pic]=2,  что  совпадает  с  расчетным,  обеспечивает  заданную
точность вычислений,  при  малом  числе  итераций.  К  достоинствам  данного
метода вычисления функций стоит отнести, то что  метод  Гаусса  обеспечивает
точное вычисление интеграла от полинома степени 2m-1. К недостаткам  следует
отнести относительно большое время расчета интеграла, при больших m.



                          Библиографический список.

1. Решение уравнений и численное интегрирование на ЭВМ: Методические
   указания к курсовой работе по дисциплине «Информатика». Рязань,2000г. 32
   c.

2. Бронштейн И.Н., Семендяев К.А. Справочник по математике для инженеров и
   учащихся втузов. М.:1986 544с.
3. Бахвалов Н.С. Численные методы. М.:1975.


-----------------------



                                    Выход



                                      j


                                 Вывод S, n


                Приближенное вычисление второго интеграла  S



                                    j=1,3

                                    i=1,4

      c[1]:=0.9; c[2]:=1; c[3]:=1.05; c[4]:=1.1;  d[1]:=2.4; d[2]:=2.5;
                            d[3]:=2.6; eps:=1e-4;
                              a:=0; b:=3.14159;


      c[1]:=0.9; c[2]:=1; c[3]:=1.05; c[4]:=1.1;  d[1]:=2.4; d[2]:=2.5;
                            d[3]:=2.6; eps:=1e-4;
                              a:=0; b:=3.14159;



                                      i



                Приближенное вычисление первого интеграла  S



                                 Вывод S, n


                                      i



                                      j


                                    j=1,3

                                    i=1,4

                                   Вывод S


                                   S=[pic]



                                    Вход

                                    S=S*c

                        d=x+c; x1=d-l; x2=d; x3=d+l;
              S=S+A1*(f(x1,cm,dm)+f(x3,cm,cd))+A2*(f(x2,cm,dm))
                                    x=x+h

                                   i=0,n-1


                                      i



                                 Выход(S,k)


НЕТ

ДА


           |z-S|< (|S| or
              k>=14

             k=k+1;z=S; n=n*2; h=(b-a)/n; x=a; S=0; c=h/2; l=c*t

                               n=1; S=0; k=0;


                            Вход(f,a,b,cm,dm, ()