Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
11_ргр.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
585.61 Кб
Скачать
  1. Набор тестов

Тест 1. Проверка подпрограммы-процедуры нахождения численного значения интеграла.

Пусть входные данные имеют следующие значения: нижний предел интегрирования C=0.81; верхний предел интегрирования D=0.62.

Результаты контрольного просчёта: численное значение интеграла B=-1.349.

Тест 2. Проверка ветви, вычисляющей значении функции.

Пусть входные данные имеют следующие значения: параметр функции A=5; аргумент X=4.

Результаты контрольного просчёта: численное значение интеграла B=-1.349; значение функции Y=-3.56.

  1. Текст программы на языке программирования Pascal и результаты её выполнения

program TabRgr;

{Студент: Маренков Е.В., группа: 4О-110Б, дата: 08.12.12}

{Программа табулирования функции Y=f(A,B,X), где аргумент X принимает M значений, параметр A изменяется от начального An с шагом Da, N количество раз, а параметр B равен численному значению определённого интеграла функции (x*x+1)*(x*x+1)*(exp(2*x))*x с верхней границей интегрирования, равной 0.62, и нижней 0.81, при заданной погрешности Eps}

const Nmax=20;

type Tmy=array [1..Nmax,1..Nmax] of real;

Tmx=array [1..Nmax] of real;

Ter=array [1..Nmax,1..Nmax] of integer;

var ma,mx:Tmx;

my:Tmy;

er:Ter;

an,da,b2,b1,eps,c,d:real;

n,m,km,ki1,ki2,err1,err2:integer;

{Процедура ввода массива X}

procedure VvodX(m:integer; var mx:Tmx);

var

i:integer;

begin

writeln('Введите массив значений x');

for i:=1 to m do

readln (mx[i]);

end;

{Процедура вычисления массива ma}

procedure DataIn(an,da:real; n:integer; var ma:Tmx);

var

a:real;

i:integer;

begin

a:=an;

for i:=1 to n do

begin

ma[i]:=a;

a:=a+da;

end;

end;

{Функция вычисления интегральной функции}

function F(x:real):real;

begin

F:=(x*x+1)*(x*x+1)*(exp(2*x))*x;

end;

{Интеграл методом трапеций}

procedure IntegralTrap(c,d,eps:real; km:integer; var err,ki:integer; var Int1:real);

var

Int,x,y1,yn,Del,H :real;

i,j,k:integer;

begin

err:=1;

Int1:=0;

y1:=F(c);

yn:=F(d);

k:=2;

for j:=1 to km do

begin

Int:=0;

H:=(d-c)/k;

x:=c+H;

i:=1;

repeat

Int:=Int+F(x);

Inc(i);

x:=x+H;

until i>=k;

Int:=H*(y1/2+yn/2+Int);

Del:=abs(Int-Int1);

Int1:=Int;

k:=k*2;

if del<eps then

begin

err:=0;

ki:=j;

j:=km;

end;

end;

end;

{Интеграл методом Симпсона}

procedure IntegralSim(c,d,eps:real; km:integer; var err,ki:integer; var int:real);

var

k,int1,y1,yn,s4,s2,h,del,x:real;

i,j:integer;

begin

int1:=0;

y1:=F(c);

yn:=F(d);

k:=2;

Err:=1;

for j:=1 to km do

begin

int:=0;

h:=(d-c)/k;

s4:=0;

s2:=0;

i:=1;

x:=c+h;

repeat

if odd(i) then s4:=s4+F(x) else s2:=s2+F(x);

int:=h*(y1+yn+4*s4+2*s2)/3;

inc(i);

x:=x+h;

until i>=k;

del:=abs(int1-int);

if del<eps then

begin

err:=0;

ki:=j;

j:=km;

end

else

begin

int1:=int;

k:=k*2;

end;

end;

end;

{Процедуры табулирования}

procedure Tab(b: real; var ma,mx:Tmx; var my:Tmy; var er:Ter);

var

i,j:integer;

begin

for i:=1 to n do

for j:=1 to m do

my[i,j]:=ma[i]/b*ln(mx[j]*mx[j]/(2+sqrt(1+mx[j]*mx[j])));

end;

{Процедура вывода даннных}

procedure ResOut(n,m:integer; ma,mx:Tmx; my:Tmy; er:Ter);

var

i,j:integer;

begin

for i:=1 to n do begin

writeln();

write('a=',ma[i]:2:4);

writeln();

for j:=1 to m do

if er[i,j]=1 then writeln(' x=',mx[j]:2:2, ' ошибка в данных') else

writeln(' x=',mx[j]:2:2,' y=',my[i,j]:2:4);

end;

readln;

end;

{Начало главной программы}

begin

writeln('Введите кол-во значений x');

readln(m);

VvodX(m,mx);

writeln('Введите значения an,da,n');

readln(an,da,n);

writeln ('Введите значения нижнего предела интегрирования C, верхнего предела интегрирования D');

readln(c,d);

writeln ('Введите значения погрешности Eps, предельного числа повторения циклов Km');

readln(eps,km);

DataIn(an,da,n,ma);

IntegralSim(c,d,eps,km,err1,ki1,b1);

IntegralTrap(c,d,eps,km,err2,ki2,b2);

If err1=0 then

begin

writeln ('Численное значение определенного интеграла методом Симпсона B=',b1:5:7,', количество итераций (KI) = ',ki1);

writeln ('Численное значение определенного интеграла методом трапеций B=',b2:5:7,', количество итераций (KI) = ',ki2);

Tab(b1,ma,mx,my,er);

ResOut(n,m,ma,mx,my,er);

end

else

writeln ('Численное значение интеграла не найдено за Km=',Km);

end.

end.

  1. Выводы

Анализ результатов выполнения программы показывает, что полученные значения функции совпадают с результатами, полученными для контрольный тестовых примеров с помощью калькулятора, что подтверждает работоспособность программы. Следовательно, программа правильно вычисляет заданную функцию по всем ветвям алгоритма и может быть использована для других значений аргументов и параметров функции.

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