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

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

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

 

 

Рязанская государственная радиотехническая академия

Кафедра вычислительной и прикладной математики.

 

 

 

 

 

 

 

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

 

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

 

 

 

 

 

 

 

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

 

 

Проверил:

Никитин В.И.

 

 

 

Рязань, 2001г

Задание.

 

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

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

Метод вычислений Формула Гаусса.

 

№f(x)abcd1edx/2cos2(cx)00.9; 1; 1.05; 1.12.4; 2.5; 2.610-42(x ln(cdx))21e3; 3.2; 3.4; 3.50.5; 0.4; 0.8510-3

Содержание.

Задание.1

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

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

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

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

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

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

 

 

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

 

В формуле Гаусса на каждом интервале интегрирования значение функции f(x) вычисляется не в равномерно распределенных по интервалу узлах, а в абсциссах, выбранных из условия обеспечения минимума погрешности интерполяции:

где n- число интервалов интегрирования, m число вычисляемых на каждом интервале значений функции. , границы интервалов интегрирования; и - коэффициенты значения которых определяются величиной m. Для m=3 A1=5/9, A2=8/9, A3=5/9, , 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;