Курсовой проект расчет определенного интеграла
Вид материала | Курсовой проект |
СодержаниеМатематическая часть Название процедуры Label 1; label 2 |
- Правила нахождения первообразных. Понятие определенного интеграла. Формула Ньютона-Лейбница., 67.43kb.
- С. М. Кирова Кафедра "Техническая механика" курсовойпроек т на тему: "Расчет поворотного, 848.17kb.
- Лекция №6. Расчет переходных процессов с использованием интеграла Дюамеля. Метод переменных, 65.05kb.
- Утверждаю, 111.39kb.
- Лекция 18. Приложения определенного интеграла, 56.8kb.
- Задание на курсовой проект, 50.25kb.
- Задачи, приводящие к понятию определенного интеграла. Определенный интеграл и его свойства., 79.79kb.
- Курсовой проект расчет и проектирование трансформаторов, 37.81kb.
- Курсовой проект по дисциплине: «основы муниципального хозяйства» на тему: «Технико-экономический, 228.75kb.
- Курсовой проект Расчет усилительного каскада на транзисторе, 76.26kb.
МИРЭА
КУРСОВОЙ ПРОЕКТ
Расчет определенного интеграла
Кафедра РПУ
Выполнил ст.
гр. ВРУ-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 знаков мантиссы показан ниже: