Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лек-5.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
490.5 Кб
Скачать

2.5.7. Пример программы (лабораторная работа 5). Вычисление интеграла методами прямоугольников (средних), трапеций и Симпсона с заданной точностью.

Варианты задания.

,

где

, , ,

, ,

– номер группы; – номер студента по журналу.

Текст программы на F90

function f(x)

common a0,a1,a2

f=((x+a2)*x+a1)*x+a0

end

! метод прямоугольников

function pr(a,b,n)

h=(b-a)/n; s=0; x=a+h/2

do i=1,n

s=s+f(x); x=x+h

enddo; pr=h*s

end

! метод трапеций

function tr(a,b,n)

h=(b-a)/n; s=(f(a)+f(b))/2; x=a+h

do i=1,n-1

s=s+f(x); x=x+h

enddo; tr=h*s

end

! метод Симпсона

function simps(a,b,n)

h=(b-a)/n; s=f(a)+f(b); x=a+h; z=1

do i=1,n-1

s=s+(3+z)*f(x); x=x+h; z=-z

enddo; simps=h*s/3

end

function aintegral(a,b,eps,kmax,n,sint)

n=2; s=sint(a,b,n)

do k=0,kmax

n=n*2; s1=sint(a,b,n); if(abs(s1-s)<eps) goto 1; s=s1

enddo

1 aintegral=s1

end

external f,pr,tr,simps

parameter(s=17,g=3,eps=0.0001,kmax=20,a=0,b=3)

common a0,a1,a2

real r(20)

a0=-s*(g*g+s*s)/1000; a1=(s+g)**2/100; a2=-(2*g+s)/10;

print '(4(2x,a,f10.4))','a0=',a0,'a1=',a1,'a2=',a2

print 100,'PR:',aintegral(a,b,eps,kmax,n,pr),'n=',n

print 100,'TR:',aintegral(a,b,eps,kmax,n,tr),'n=',n

print 100,'SIMPS:',aintegral(a,b,eps,kmax,n,simps),'n=',n

call qatr(a,b,eps,20,f,sq,ier,r); print 100,'QATR:',sq

100 format(2x,a,f10.4,4x,a,i10)

end

Результаты счета

a0= -5.0660 a1= 4.0000 a2= -2.3000

PR: 2.3520 n= 512

TR: 2.3520 n= 1024

SIMPS: 2.3520 n= 4

QATR: 2.3520

Press any key to continue

Замечание.

1. В приведенной программе реализованы все три рассматриваемые в настоящем курсе формулы численного интегрирования:

  • п/п PR – вычисление интеграла по формуле прямоугольников;

  • п/п TR – вычисление интеграла по формуле трапеций;

  • п/п SIMPS – вычисление интеграла по формуле Симпсона.

2. Переменная (в программе – kmax) определяет количество отрезков, на которые делится интервал интегрирования для вычисления интеграла с заданной точностью. При этом значение n последовательно удваивается до тех пор, пока изменение приближенного значения интеграла не станет меньше заданного малого числа (в программе – eps), значение которого вводится. При расчете было принято:

kmax =20, eps =0.0001.

3. К данной программе (проекту) необходимо подключить стандартную подпрограмму QATR.FOR.

4. Формальному параметру sint (имени подпрограммы) в подпрограмме-функции aintegral соответствуют фактические параметры pr,tr и simps (имена подпрограмм-функций). Эти параметры, а также фактический параметр f в обращении к стандартной подпрограмме qatr, должны быть перечислены в списке оператора external:

external f,pr,tr,simps .

5. Параметры a0,a1,a2 вычисляются в основной программе и передаются в подпрограмму-функцию f оператором общих областей common:

common a0,a1,a2 .

11

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]