informatica_kurs_04 (Расчет определенного интеграла)

2017-07-08СтудИзба

Описание файла

Файл "informatica_kurs_04" внутри архива находится в папке "Расчет определенного интеграла". Документ из архива "Расчет определенного интеграла", который расположен в категории "". Всё это находится в предмете "информационные технологии" из 2 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информационные технологии" в общих файлах.

Онлайн просмотр документа "informatica_kurs_04"

Текст из документа "informatica_kurs_04"

МИРЭА

КУРСОВОЙ ПРОЕКТ

Расчет определенного интеграла

Кафедра РПУ

Выполнил ст.

гр. ВРУ-3-02

Проверил

Давлечин Д.И.

2003


Задание на курсовой проект

Сформировать матрицу С(5,5), элементы которой являются значениями определенного интеграла:

где f(x)


Заданный определенный интеграл необходимо рассчитывать по формуле Симпсона или методу трапеций с заданной точностью. Полученные данные записать в файл на диск. Предусмотреть в программе возможность для считывания данных из файла и их вывод на экран монитора (стандартное устройство вывода).

Математическая часть

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

основано на его замене конечной суммой

где - числовые коэффициенты, а xk – точки отрезка [a, b]. Приближенное равенство этих выражений называется квадратурной формулой.

Метод Ромберга (правило трапеций), описывается формулой:

где xi – точка a+nh на каждом элементарном отрезке h:

точки a = I/20, b = (I+J)/20.

Формула Симпсона описывается другой формулой:

n должно быть четным.

Точность вычисления указывается пользователем и может быть указана как 1; 2; 3;… (количество цифр после запятой) или 0,1; 0,01; 0,06; 0,0002 и т.д. Программа автоматически распознает способ ввода точности и приводит его к виду 0,01; 0,002 и т.д. Если точность указана в пределах 0 … 1, программа оставляет ту точность, которая была введена и никак ее не корректирует.

Спецификация

В программе для очистки экрана используется процедура ClrScr из модуля Crt, собственные процедуры описаны в таблице 1.

Таблица 1.

Название процедуры

Функции, выполняемые процедурой

RadGrad

Вывод на дисплей задания; обеспечивает выбор метода интегрирования, выбор погрешности и ее преобразование.

MSimp

Расчет интеграла по формуле Симпсона.

MTrap

Расчет интеграла методом трапеций.

Matr

Создает матрицу, элементы которой являются значениями вычисленного интеграла. Может создавать сразу две матрицы, в зависимости от выбора параметра в процедуре RadGrad. В эту процедуру вложены процедуры MSimp и MTrap

Vyvod

Процедура выводит на монитор значения матрицы. В зависимости от выбора параметра в процедуре RadGrad может выводить значения двух матриц.

REC

Процедура записывает значения матриц в текстовый файл A:\Sluzh.txt

Pley

Процедура считывания информации из файла A:\Sluzh.txt

Описание переменных представлено в таблице 2.

Таблица 2

Переменная

Описание переменной

Файловые переменные

F1

Переменная связанная с текстовым файлом A:\Sluzh.txt

F2

Переменная связанная со стандартным устройством вывода – экраном.

Вещественные переменные типа “EXTEDED”

Cp1

Переменная используется для хранения текущего (нового) значения интеграла

Cp

Переменная используется для хранения предыдущего значения интеграла.

E

Переменная хранит введенную пользователем погрешность. Погрешность Е сравнивается с модулем разности Cp1-Cp. Если условие Cp1-Cp < Е не выполняется, значение Ср заменяется значением Ср1 и цикл повторяется. В случае выполнения условия, считается, что точность Е достигнута.

h

Элементарный отрезок функции (см. математическую часть).

a

Хранит значение нижнего предела интегрирования

b

Хранит значение верхнего предела интегрирования

Целочисленные переменные типа “LONGINT”

M

Используется в процедуре Vyvod в одном из циклов FOR… для создания второго столбца значений второй матрицы на экране.

V

Используется в процедуре RadGrad и непосредственно в теле программы в запросах. 1: Запрос на вычисление методом… 2: Запрос на повтор, выход, просмотр файла.

n

Используется в процедурах MSimp и MTrap в качестве входного параметра – число точек разбиения функции.

nn

Используется в процедурах MSimp и MTrap в качестве параметра цикла FOR…

I

Параметры циклов FOR…, которые отвечают за заполнение или считывание матриц, J параметр вложенного цикла. Параметрами обозначаются номера ячеек матриц.

J

D1; D2

Массивы 5×5

Символьные переменные

x1

Описывает тип данных в файле A:\Sluzh.txt

Запросы и сообщения программы


Алгоритм работы программы



Описание и текст программы

Для удобства программа представлена в виде таблицы с нумерацией строк. Текст программы содержит 283 строки считая не компилируемые строки. Всего в программе 272 “чистых” строки.

Первая строка включает директиву компиляции, которая использует математический сопроцессор.

5…10 строки отведены под описание переменных (см. таблицу 2).

Тело программы начинается на 250 строке и запускает процедуру RadGrad (строка 13), далее запускается процедура очистки экрана и вывод в псевдографике заданного интеграла (строки 16…25). В строках 28…37 описан запрос программы на выбор действия. Функция GotoXY в строке 38 устанавливает курсор на заданную позицию на экране. Строка 40 – ввод значения, которое присваивается переменной V, в строках 41…46 значение V обрабатывается на предмет ошибочного ввода оператором, и в случае нахождения ошибки выдается соответствующее сообщение и метка GOTO1 возвращает программу на строку 16.

Если ошибка не найдена, в строке 49 предлагается ввести погрешность. В строке 52 введенная погрешность переводится в вещественный тип (0,0001), на чем процедура заканчивается. Цвет текста задается функцией “TextColor”.

Далее в теле программы запускается процедура Matr, которая в свою очередь использует процедуры MSimp и MTrap. Рассмотрим эти процедуры.

Процедура MSimp предназначена для расчета заданного интеграла методом Симпсона. В строках 60…62 задаются начальные значения переменных. В строке 63 вычисляется длина элементарного отрезка. В строке 64 задан цикл, в котором вычисляется ряд суммы по формуле. В строках 66…67 вычисляются крайние члены суммы, а в строках 68…69 – промежуточные. В строке 71 все полученные результаты вычисляются по заданной формуле, и в строке 72 сравнивается разница предыдущего и нового результатов с погрешностью. Если заданная погрешность Е меньше, n умножается на два и программа возвращается к строке 62. Если заданная погрешность Е больше, то значение запоминается в переменной Cp1.

Процедура MTrap отличается от процедуры MSimp только формулой. Принцип работы и переменные не изменились (строки 80…97).

Процедура Matr двумя циклами FOR, один из которых вложенный, формирует пределы интегрирования (строки 104, 105), номера ячеек массива (I,J) и запускает цикл с процедурой MTrap, MSimp, или с обеими сразу, в зависимости от параметра V.

Процедура Vyvod выводит на экран, в зависимости от значения параметра V, содержимое массивов D1 или D2 или обеих. Вывод значений массивов осуществляется двумя циклами FOR, один из которых вложенный (строки 156…158 для V = 1, 167…169 для V = 2 и 178…180, 190…195 для V = 3).

Далее процедура REC записывает данные из массивов D1 и D2 в файл SLUZH.TXT на дискете в корневой каталог (строки 204…209).

Далее в теле программы (строки 263…281) построено меню, аналогичное тому, которое построено в процедуре RadGrad. Это меню позволяет выбрать одно из действий: 1) возврат к началу программы (Goto 2); 2) чтение из файла процедурой Pley; 3) выход из программы.

Процедура Pley описана в строках 235…248. Строка 237 связывает переменную F1 с текстовым файлом на диске, строка 238 связывает переменную F2 со стандартным устройством вывода – дисплеем. Файл на диске открывается и информация с помощью цикла с предусловием считывается и выводится на дисплей (строки 241…244). По окончании чтения и вывода на экран содержимого файла метка Goto 1 переводит программу на строчку 262, т.е. к меню.

№ стр

Строка

{$N+}

Program Integral;

Uses CRT;

LABEL 1; LABEL 2;

Var

F1, F2 : text;

D1,D2: ARRAY[1..5, 1..5] OF Extended;

Cp, Cp1, Cp2, Cp3, E, h, a, b : Extended;

x1 : Char;

M, V, n, nn, I, J : Longint;

{***************************************}

PROCEDURE RadGrad;

Label 1;

BEGIN

1: ClrScr;

Textcolor(7);

Writeln('Vychislit'' integrall');

Textcolor(15);

Writeln;

Writeln(' (I+J)/20');

Writeln(' | 1');

Writeln('C(I,J)= S',#196,#196,#196,#196,#196,#196,#196,#196,#196,#196,#196,#196,#196,#196,#196,#196,' dx');

Writeln(' | sin(2x)*cos(2x)');

Writeln(' I/20');

Writeln;

TextColor(7);

Writeln('Vyberite deystvie');

Write('[1] Vychislit'' medodom ');

TextColor(15);

Writeln('Trapetsiy');

TextColor(7);

Write('[2] Vychislit'' medodom ');

TextColor(15);

Writeln('Simpsona');

TextColor(7);

Writeln('[3] Vychislit'' obeimi sposobami');

Writeln('[ ]');

GotoXY(2,13);

Readln(V);

IF NOT ((V=1) OR (V=2) OR (V=3)) then

begin

Textcolor(12);

Writeln('Nevernyy parametr');

Readln;

GOTO 1;

end;

Writeln;

Write('Vvedite pogreshnost'', E = ');

Textcolor(15);

Readln(E);

If E >= 0 then E:= 1/EXP((E+1)*Ln(10));

Textcolor(7);

END;

{***************************************}

Procedure MSimp;

Label 1;

begin

Cp:= 0;

n:= 4;

1: Cp1:= 0;

h:= (b-a)/n;

For nn:= 0 to n do

Begin

if nn = 0 then Cp1:= 1/(Sin(2*a) * Cos(2*a)) else

if nn = n then Cp1:= Cp1+(1/(Sin(2*b)*Cos(2*b))) else

If Odd(nn) then Cp1:= Cp1+4*(1/(Sin(2*(a+h*nn))*Cos(2*(a+h*nn)))) else

If Not (Odd(nn)) then Cp1:= Cp1+2*(1/(Sin(2*(a+h*nn))*Cos(2*(a+h*nn))))

end;

Cp1:= h/3*Cp1;

If ABS(Cp1 - Cp) > E then

Begin

Cp:= Cp1;

n:= n*2;

GOTO 1

end;

END;

Procedure Mtrap;

Label 1;

begin

Cp:= 0;

n:= 4;

1: Cp1:= 0;

h:= (b-a)/n;

For nn:= 2 to n do

Cp1:= Cp1+(1/(Sin(2*(a+h*nn))*Cos(2*(a+h*nn))));

Cp1:= Cp1+ (1/(Sin(2*a)*Cos(2*a)) + 1/(Sin(2*b)*Cos(2*b)))/2;

Cp1:= h*Cp1;

If ABS(Cp1 - Cp) > E then

Begin

Cp:= Cp1;

n:= n*2;

GOTO 1

end;

END;

Procedure Matr;

begin

For I:= 1 to 5 do

For J:= 1 to 5 do

begin

a:= I/20;

b:= (I+J)/20;

IF V = 1 Then

begin

MTrap;

D1[I,J]:= Cp1;

GotoXY(1,16);

Write('Metod trapetsiy, yacheyka N: ');

TextColor(15);

Writeln('[',I,',',J,']');

TextColor(7);

end else

IF V = 2 Then

begin

MSimp;

D2[I,J]:= Cp1;

GotoXY(1,16);

Write('Metod Simpsona, yacheyka N: ');

TextColor(15);

Writeln('[',I,',',J,']');

TextColor(7);

end else

IF V = 3 Then

begin

MTrap;

D1[I,J]:= Cp1;

MSimp;

D2[I,J]:= Cp1;

GotoXY(1,16);

Write('Metod trapetsiy, yacheyka N: ');

TextColor(15);

Write('[',I,',',J,']');

TextColor(7);

GotoXY(1,17);

Write('Metod Simpsona, yacheyka N: ');

TextColor(15);

Writeln('[',I,',',J,']');

TextColor(7);

end else Writeln('Sboy vybora');

end;

END;

Procedure Vyvod;

begin

ClrScr;

If V = 1 then

begin

Writeln('Metod trapetsiy');

TextColor(15);

Writeln(' I, J',#26,' znachenie;', ' pogreshnost'': ', E:2:16);

TextColor(7);

Writeln;

For I:= 1 to 5 do

For J:= 1 to 5 do

Writeln(' ',I,', ',J,' ', D1[I,J]:3:16);

end else

If V = 2 then

begin

Writeln('Metod Simpsona');

TextColor(15);

Writeln(' I, J',#26,' znachenie;', ' pogreshnost'': ', E:2:18);

TextColor(7);

Writeln;

For I:= 1 to 5 do

For J:= 1 to 5 do

Writeln(' ',I,', ',J,' ', D2[I,J]:3:16);

end else

If V = 3 then

begin

Writeln(' I, J',#26,' znachenie;', ' pogreshnost'': ', E:2:18);

TextColor(15);

Writeln(' Metod trapetsiy');

TextColor(7);

Writeln;

For I:= 1 to 5 do

For J:= 1 to 5 do

Writeln(' ',I,', ',J,' ', D1[I,J]:3:16);

Write('Dlya prodolzheniz nazhmite ');

TextColor(26);

Writeln('ENTER');

Readln;

GotoXY(29,2);

TextColor(15);

Writeln(' Metod Simpsona');

TextColor(7);

Write;

For I:= 1 to 5 do

For J:= 1 to 5 do

begin

M:= M+1;

GotoXY(29, 3+M);

Writeln(D2[I,J]:3:16);

end;

end;

END;

Procedure REC;

begin

Assign(F1, 'A:\Sluzh.txt');

Rewrite(F1);

If V = 1 then

begin

For I:= 1 to 5 do

begin

for J:= 1 to 5 do

Write(F1, D1[I,J]);

end;

end else

If V = 2 then

begin

For I:= 1 to 5 do

begin

for J:= 1 to 5 do

Writeln(F1, D2[I,J]);

end;

end else

If V = 3 then

begin

Writeln(F1,'Metod trapetsiy');

For I:= 1 to 5 do

for J:= 1 to 5 do

Writeln(F1, D1[I,J]);

Writeln(F1,'Metod Simpsona');

For I:= 1 to 5 do

for J:= 1 to 5 do

Writeln(F1, D2[I,J]);

end;

Close(F1);

END;

Procedure Pley;

begin

assign(F1, 'A:\Sluzh.txt');

assign(F2,'');

reset(f1);

rewrite(f2);

While not eof(f1) do

begin

read(f1,x1);

write(f2,x1);

end;

Close(F1);

readln;

end;

BEGIN

2: RadGrad;

Matr;

Writeln('Dlya vyvoda rezul''tatov nazhmite ENTER');

Readln;

Vyvod;

Writeln;

TextColor(15);

Writeln('Zapis'' v fayl A:/SLUZH.TXT');

TextColor(7);

REC;

Readln;

1: CLRSCR;

Writeln('[1] esche razok');

Writeln('[2] posmotret'' fayl');

Writeln('[3] nadoelo? konets');

Writeln('[ ]');

GotoXY(2,4);

Readln(V);

IF NOT ((V=1) OR (V=2) OR (V=3)) then

begin

Textcolor(12);

Writeln('Nevernyy parametr');

TextColor(7);

Readln;

GOTO 1;

end;

If V = 1 then GOTO 2 else

If V = 2 then

begin

Pley;

GOTO 1;

end;

end.

Результат работы программы

Приведенные ниже значения получены с помощью программы Mathematica 4.2,

номер ячейки, для которой просчитано значение, можно определить по верхнему пределу интегрирования.

А теперь приведем скриншоты работы программы:


Точность вычисления указана на скриншоте.

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

Скриншот работы программы при вычислении интеграла методом Симпсона с точностью 16 знаков мантиссы показан ниже:


17


Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
436
Средний доход
с одного платного файла
Обучение Подробнее