№
|
f(x)
|
a
|
b
|
c
|
d
|
|
1
|
edx/2cos2(cx)
|
0
|
p
|
0.9; 1; 1.05; 1.1
|
2.4; 2.5; 2.6
|
10-4
|
2
|
(x ln(cdx))2
|
1
|
e
|
3; 3.2; 3.4; 3.5
|
0.5; 0.4; 0.85
|
10-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;
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)<eps*abs(S)) or
(k>=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;
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 итераций
В данной курсовой работе вычислялись определенные интегралы
методом Гаусса. Как видно из полученных результатов, программа работает верно,
т.к. теоретически =2, что совпадает с расчетным, обеспечивает
заданную точность вычислений, при малом числе итераций. К достоинствам данного
метода вычисления функций стоит отнести, то что метод Гаусса обеспечивает
точное вычисление интеграла от полинома степени 2m-1. К недостаткам
следует отнести относительно большое время расчета интеграла, при больших m.
1.
Решение уравнений и
численное интегрирование на ЭВМ: Методические указания к курсовой работе по
дисциплине «Информатика». Рязань,2000г. 32 c.
2.
Бронштейн И.Н., Семендяев
К.А. Справочник по математике для инженеров и учащихся втузов. М.:1986 544с.
3.
Бахвалов Н.С. Численные
методы. М.:1975.