Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
PAGE 24
Министерство образования и науки
Российской Федерации
Кафедра |
«Конструирования радиоэлектронных и микропроцессорных систем» |
УТВЕРЖДАЮ
Зав. кафедрой
___д.т.н.,проф. Д.Ю. Муромцев
подпись, фамилия, инициалы
” 2009 г
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту (работе) по |
Информатике |
наименование учебной дисциплины
На тему: |
Использование методов структурного программирования на примере |
численных методов (приближенное вычисление алгебраических и |
|
трансцендентных уравнений методом половинного деления, приближенное |
|
интегрирование по формуле прямоугольников, решение дифференциальных |
|
уравнений методом Эйлера ) |
Автор проекта (работы) |
А.С. Катараев |
Группа |
Р-11 |
подпись, дата, инициалы, фамилия
Специальность |
210303 « Проектирование и технология радиоэлектронных средств» |
номер, наименование
Обозначение курсового проекта (работы) |
ТГТУ.210201.927 |
Руководитель проекта (работы) |
к.т.н.,доц., С.В.Артемова. |
Проект (работа) защищен (а) |
Оценка |
Члены комиссии |
|
подпись. дата инициалы, фамилия |
|
подпись. дата инициалы, фамилия |
|
подпись. дата инициалы, фамилия |
|
Нормоконтролер |
к.т.н., доц., С.В. Артемова |
подпись. дата инициалы, фамилия |
Тамбов 2009 г
АННОТАЦИЯ
Курсовой проект по информатике на тему «Использование методов структурированного программирования на примере численных методов выполнен по заданию № 10 (приближенное вычисление алгебраического уравнения методом половинного деления, приближенное интегрирование по формуле прямоугольников, решение дифференциальных уравнений методом Эйлера).
Первоначально для составления программного модуля было рассмотрено математическое описание используемых методов. Модули, входящие в главную программу, рассмотрены как примитивные (не имеющие подфункций и встроенных процедур).
Далее были составлены блок-схемы главного модуля и каждой процедуры и функции в отдельности.
Уделено особое внимание стандартным процедурам и функциям, алгоритмического языка Паскаль, которые были используемы, в написании каждого модуля главной программы.
Подробное описание каждого модуля главной программы помогло в определении взаимодействия составных частей с главной программой.
Приведенные примеры иллюстрируют достоинство структурного программирования.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ …………………….……………………………………...2
1 Постановка задачи …………...………..…………………………3
2 Математическое описание методов …..……………..……..…4
2.1 Вычисление алгебраического уравнения методом половинного
деления ………………………….…………..………………..……..…4
2.2 Вычисление определенного интеграла по формуле
прямоугольников ……......................…………………………………...5
2.3 Решения дифференциальных уравнений методом Эйлера……………...6
3 Блок-схема программы GLAV………………...…….....……...7
3.1 Блок-схема процедуры polovindel…………………………....….…....11
3.2 Блок-схема процедуры myintegral……………………….…….….......12
3.3 Блок-схема процедуры myeiler…………………………....………......13
4 Описание стандартных функций....…….…..………………...14
5 Описание не стандартных функций ...…………..…………...15
6 Описание интерфейса…….……………………………………..16
7 Численные примеры …..………….…...………………………..19
Заключение…………………………….......………………………..24
Список используемой литературы…..………………………....24
Приложение…………………………………………..………….….25
ВВЕДЕНИЕ
В настоящее время резко возрос интерес к языкам высокого уровня благодаря возможности использования в научных исследованиях, в технике и экономике вычислительных машин, выполняющих построение некоторых величин в точном соответствии с указанным алгоритмом. Эта возможность привлекательна по той причине, что явления и процессы, которые изучаются в рамках упомянутых исследований, часто удается описать с помощью понятий математики - функций, систем уравнений, неравенств - и для получения конкретных сведений об изучаемых явлениях и процессах надо провести некоторые действия над математическими объектами. Человеку достаточно описать алгоритм необходимых преобразований и вычислений, а сами действия (как правило, настолько обширные и громоздкие, что их невозможно выполнить вручную) выполнит вычислительная машина.
Правила записи алгоритма для выполнения его вычислительной машиной оказываются очень жесткими автомат не может ничего додумывать за человека. Совокупность средств и правил представления алгоритма в виде, пригодном для выполнения вычислительной машиной, называется языком программирования, а каждый алгоритм, записанный на некотором языке программирования, называется программой. Для удобства составления программ предлагаются различные языки программирования.
Из распространенных языков программирования в 90-е годы выделился своей популярностью Паскаль, созданный в начале 70-х годов профессором Швейцарской высшей технической школы Н. Виртом. Такое название он получил в честь французского ученого Блеза Паскаля, изобретателя счетной машины. Выше упомянутый язык программирования предельно прост, логичен и эффективен. В Паскале сконцентрированы многие лучшие черты языков- предшественников. Сравнение этого языка с более простыми языками вроде Бейсика показывает, что текст алгоритма в виде программы на Бейсике содержит больше подробностей о действиях ПЭВМ, текст на Паскале яснее выражает математическую сущность алгоритма. Язык предоставляет пользователю большие возможности для решения широкого круга задач. Он содержит полный набор структур данных: простые переменные (целые, действительные, символьные, логические), массивы, строки, множества, записи и файлы.
Программы, написанные для персонального компьютера, могут использовать его специфические возможности: управление экраном, обращение к MS DOS, графические средства. Для того чтобы писать программы такого рода, надо либо настолько хорошо ориентироваться в устройстве компьютера, чтобы делать всю необходимую работу самостоятельно, либо научится использовать стандартные модули, а при необходимости и создавать свои.
Создание собственных модулей, решающих определенные задачи, рассматривает данная курсовая работа.
Цель данного курсового проекта научиться использовать методы структурного программирования на примере численных методов, в частности написание нескольких модулей и связь их в одну общую программу.
1.3 Составить программу решения дифференциальных уравнений методом Эйлера: и описать выше указанный метод, составить блок-схему программы, описать стандартные и не стандартные функции, применяемые в задаче, описать интерфейс и привести пример.
2.1 Вычисление алгебраического уравнения методом половинного деления
Его ещё называют методом дихотомии. Этот метод решения уравнений отличается от выше рассмотренных методов тем, что для него не требуется выполнения условия, что первая и вторая производная сохраняют знак на интервале [a, b]. Метод половинного деления сходится для любых непрерывных функций f(x) в том числе недифференцируемых.
Разделим отрезок [a, b] пополам точкой . Если f(с)≠0 (что практически наиболее вероятно), то возможны два случая: либо f(x) меняет знак на отрезке [a, c] (Рис. 1), либо на отрезке [c, b] (Рис. 2).
Рис.1 Рис.2
Выбирая в каждом случае тот отрезок, на котором функция меняет знак, и продолжая процесс половинного деления дальше, можно дойти до сколь угодно малого отрезка, содержащего корень уравнения.[1]
2.2 Вычисление определенного интеграла по формуле прямоугольников
Численное интегрирование состоит в нахождении интеграла от непрерывной функции по квадратурной формуле
,
где коэффициенты - действительные числа и узлы принадлежат , =1,2,…,n. Вид суммы
определяет метод численного интегрирования, а разность
- погрешность метода.
При этом для метода прямоугольников формула примет вид:
,
где , , .
Правая часть формулы прямоугольников является интегральной суммой и при стремиться к данному интегралу. Однако, при фиксированном отличается от соответствующего интеграла на величину . По заданной предельной абсолютной погрешности подбирается параметр , или, что тоже самое, шаг , при котором выполняется неравенство .
Величина (в предположении существования входящих в нее производных) характеризуется равенством для метода прямоугольников
, где .
В этом и состоит метод вычисления определенного интеграла по формуле прямоугольника.[9]
2.3 Решения дифференциальных уравнений методом Эйлера
Учитывая ключевую позицию, которую занимает метод Эйлера в теории численных методов ОДУ, рассмотрим несколько способов его вывода. При этом будем считать, что вычисления проводятся с расчетным шагом
, расчетными точками (узлами) служат точки
(i = 0,1,..., n) промежутка и целью является построение таблицы
x |
x0 |
x1 |
… |
xn≈b |
y |
y0 |
y1 |
… |
yn≈y(b) |
приближенных значений yi решения у=у{х) задачи в расчетных точках хi.
Геометрический способ.
Пользуясь тем, что в точке x0 известно значение решения y(x0)=y0, и значение его производной (согласно (1.1)), можно записать уравнение касательной к графику искомой функции у=у(х) в точке (х0;у0):
.
При достаточно малом шаге h ордината
эта касательная, полученная подстановкой в правую часть (1,3) значения
, по непрерывности должна мало отличаться от ординаты
y(x1) решения y(x) задачи (1,1). Следовательно, точка (x1,y1) пересечения
касательной (1,3) с прямой х=х1 может быть приближенно принята за новую начальную точку. Через эту точку снова проведем прямую
,
которая уже приближенно отражает поведение касательной к у=у(х) в точке (х1;у(х1)). Подставляя сюда х=х2(=х1+h), иначе, пересекая эту «касательную» прямой х=х2, получим приближение значения у(х2) значением
,
и т.д.
Рис. 3
В итоге этого процесса, определяемого формулой
i=0,1,2…,n и называемого методом Эйлера, график решения у=у(х) данной задачи Коши (1,1)-(1,2) приближенной представляется ломанной, составленной из отрезков приближенных касательных откуда происходит другое название метод ломаных.[1]
3.2 Блок-схема модуля integral (процедура myintegral)
4 ОПИСАНИЕ СТАНДАРТНЫХ ФУНКЦИЙ
Все создаваемые модули используют процедуру Clrscr стандартного модуля Crt [4]. Указанная процедура очищает экран и помещает курсор в его верхний левый угол. Действует процедура следующим образом: все символы заменяются на пробел с атрибутами, установленными в данный момент. Например, если цвет фона TextBackground не черный, то экран будет иметь цвет фона. Процедура выполняется в том окне, в котором она вызвана. Например, в случае
Window (1,1,60,20);
Clrscr;
Будет очищен прямоугольник 60*20, начинающийся в (1,1)
Следующие задействованные всеми создаваемыми модулями процедуры: Write (), Writeln (), Read (), Readln () стандартного модуля System [5]. Объявление этого модуля утилитой Uses не обязательно, он автоматически подключается программными средствами Pascal. Перечисленные операторы являются операторами ввода, вывода. Привлечение этих процедур открывает возможность многократного использования одной и той же программы для вычисления с различными исходными данными.
При выполнении оператора ввода Read() переменным присваиваются значения исходных данных.
Процедура Readln() выполняет процедуру Read(), после чего переходит на следующую строку. Readln() без параметров осуществляет переход на начало следующей строки без предварительного считывания.
С помощью процедур вывода Write() строится последовательность значений, которая является результатом выполнения программы. Параметр, заключенный в круглые скобки может содержать указания ширины поля и количества десятичных знаков. Выражения вывода могут быть следующих типов: char, integer, real, string, packet string или boolean. Процедура вывода, таким образом, позволяет выделить из всего набора вычисленных значений те, которые служат ответом к решавшейся при выполнении программой задаче.
Процедура Writeln() выполняет процедуру Write(), а затем осуществляет переход в начало следующей строки. Процедуры ввода и вывода часто применяют вместе. Например, для ввода трех чисел и вывода их суммы
Read (a,b,c);
х:= a+b+c;
Write(x);
Последней общей для всех модулей функцией является функция ReadKey, которая считывает символ с клавиатуры [5]. Она описана в стандартном модуле Crt. Возвращаемый тип данных тип char. Функция ReadKey принимает значение считываемого символа, при этом символ не выводится на экран. Если до обращения к ReadKey значение KeyPressed было равно True, то считывание происходит незамедлительно. В противном случае программа ожидает ввода с клавиатуры. Для считывания кода, соответствующего специальным клавишам, к функции ReadKey необходимо обратиться два раза. (Под специальными, подразумеваются функциональные клавиши, клавиши управления курсором, клавиши, нажатые одновременно с Alt и т.д.). Первый раз функция ReadKey принимает значения #0, а во второй раз значение расширенного кода, соответствующего данной специальной клавише. Значение #0 не может быть присвоено ReadKey никаким другим способом. Поэтому если ReadKey = #0, то следующее значение ReadKey обязательно должно трактоваться как расширенный код. Не смотря на то, что применение функции очень широко, однако чаще всего она используется для задержки программы при отладке. Пример применения функции
Ch: = ReadKey - возвращает считанный символ.
И, наконец, последняя, стандартная функция, используемая только в модуле myiter1. Это функция Abs() возвращающая абсолютное значение аргумента. Она входит в состав стандартного модуля System. Возвращаемый тип данных тот же, что и у аргумента (real, integer).
Abs(x) - возвращает абсолютное значение х.[11]
5 ОПИСАНИЕ НЕ СТАНДАРТНЫХ ФУНКЦИЙ
Программа GLAVN сама по себе использует не стандартные модули (eiler, integral, polovindel), которые в свою очередь содержат не стандартные процедуры и функции, выполнение которых приводит к выполнению программы. Поэтому описание не стандартных процедур и функций, по сути, сводится к описанию процедур и функций, содержащихся в выше перечисленных модулях.
MYEILER - эта процедура первоначально запрашивает точность с которой нужно вычислить уравнение , после чего решает его методом Эйлера и выводит ответ на экран.
POLOVINDEL - эта процедура первоначально запрашивает точность с которой нужно вычислить уравнение , после чего решает его методом половинного деления и выводит ответ на экран.
MYINTEGRAL - эта процедура запрашивает начало, конец интервала и количество разбиений, после чего вычисляет интеграл выводит его на экран
и проверяет его.
6 ОПИСАНИЕ ИНТЕРФЕЙСА
Основная программа GLAV.EXE (использующая методы структурного программирования) работает следующим образом. Используя способ запроса, определяет дальнейший ход развития. При получении любого результата отличного от 1,2,3 вновь возвращается на начало программы. Тем самым, исключая возможность ошибочного ввода. При получении ответа соответствующего цифрам 1,2,3 передает управление одной из процедур описанных в не стандартных модулях пользователя. При этом выполнение главной программы практически заканчивается за исключением оператора выхода. Управление передается соответственно одному из модулей (polovind, integral, eiler,) или другими словами процедурам пользователя (polovindel, myintegral, myeiler,). Каждый из перечисленных модулей по сути своей представляет отдельную программу, являющуюся составной частью другой. Это позволяет в зависимости от выбора пользователя выполнить тот или иной самостоятельный модуль, входящий в главную программу.
При выборе 1 управление передается модулю eiler (процедура myeiler) выполнение которого приводит к выходу из программы.
Аналогично построены и два других модуля входящих в программу GLAV, за исключением того, что процедура polovindel в ходе своего выполнения не однократно передает управление функции f() являющейся неотъемлемой частью выше названной процедуры.
Окно главной программы:
Результат процедуры myeiler:
Результат процедуры myintegral:
Результат процедуры polovindel:
7 ЧИСЛЕННЫЕ ПРИМЕРЫ
Все выше перечисленное в данной курсовой работе проиллюстрировано на конкретных примерах.
1 Решение уравнения методом Эйлера вида: . При вводимой погрешности 0.001 дает результат:
x |
y |
0 |
0 |
0,1 |
0 |
0,2 |
0,001 |
0,3 |
0,005 |
0,4 |
0,014 |
0,5 |
0,03 |
0,6 |
0,0551 |
0,7 |
0,0914 |
0,8 |
0,1413 |
0,9 |
0,2072 |
1 |
0,2925 |
И соответствующий график зависимости выглядит так:
Таблица 1 График 1
2 Вычисление определенного интеграла на отрезке [1,2] методом прямоугольников функции вида дает следующий результат. Определенный интеграл равен 0.99938. При этом погрешность вычисления по отношению к формуле Ньютона- Лейбница составляет 1-0.99938=0.00062, что практически соответствует истине.
Проверить решение можно в программе Mathcad:
Нахождение определенного интеграла по формуле прямоугольников сводится к нахождению произведения суммы значений функции в значениях аргумента с шагом равным частному от деления разности конечного и начального значения деленного на заданное значение делений. При этом различают три метода формулы прямоугольника: с недостачей, с избытком и серединного деления. Данная курсовая работа использует метод серединного деления.
3 Вычисления алгебраического уравнения методом половинного деления, вида . Проверка решения в Microsoft Exсel.
По данным таблицы (1) построим график зависимости, из которого видно, что корень уравнения находится на интервале от 1.2 до 1.3.
x |
y |
1,00 |
-15,00 |
1,10 |
-8,43 |
1,20 |
-0,41 |
1,30 |
9,26 |
1,40 |
20,77 |
1,50 |
34,34 |
1,60 |
50,21 |
1,70 |
68,63 |
1,80 |
89,87 |
1,90 |
114,22 |
2,00 |
142,00 |
2,10 |
173,54 |
2,20 |
209,20 |
Таблица 2 График зависимости 2
a |
b |
(a+b)/2 |
f(a) |
f(b) |
f((a+b)/2) |
|a-b| |
1,2000 |
1,3000 |
1,2500 |
-0,4077 |
9,2589 |
4,2080 |
0,1000 |
1,2000 |
1,2500 |
1,2250 |
-0,4077 |
4,2080 |
1,8473 |
0,0500 |
1,2000 |
1,2250 |
1,2125 |
-0,4077 |
1,8473 |
0,7068 |
0,0250 |
1,2000 |
1,2125 |
1,2063 |
-0,4077 |
0,7068 |
0,1463 |
0,0125 |
1,2000 |
1,2063 |
1,2031 |
-0,4077 |
0,1463 |
-0,1315 |
0,0062 |
1,2031 |
1,2063 |
1,2047 |
-0,1315 |
0,1463 |
0,0072 |
0,0031 |
1,2047 |
1,2063 |
1,2055 |
0,0072 |
0,1463 |
0,0767 |
0,0016 |
1,2047 |
1,2055 |
1,2051 |
0,0072 |
0,0767 |
0,0420 |
0,0008 |
Таблица 3
Примем a = 1,2 и b = 1,3 и по этим данным составим таблицу в Microsoft Exсel, в которой просчитываем решение до момента пока погрешность вычисления не станет равной 0,001.
ЗАКЛЮЧЕНИЕ
В заключение хотелось бы отметить, что методы структурного программирования позволяют более мобильно и качественно проводить работу по модернизации программного обеспечения. Так достаточно усовершенствовать отдельный модуль откомпилировать его и главный модуль, для достижения, желаемого результата. Более того, текст главной программы более читаем, и занимает меньше места. Имеющиеся наработки в отдельных модулях можно использовать в других программах, не задумываясь об их работоспособности. Четко вычерченная структура позволяет яснее представить цели и задачи стоящие перед программистом. Не нужно все время перемещаться по тексту взад и вперед. В любой промежуток времени работы над очень большой программной появляется возможность сконцентрироваться на отдельном модуле. Открывается возможность совместной работы нескольких человек над одной громоздкой программной. Удачно разработанный модуль одного программиста становиться, доступен другим.
Все выше перечисленное позволяет сделать вывод. Что структурное программирование открывает не объятые просторы в развитии современной техники, и будущее, а вернее сказать уже настоящее именно за ним. Вместе с объектно-ориентированным программированием оно уже составляет авангард современной науки.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1.Воробьев Г.Н., Бахвалов Н.С. «Численные методы». М.: Наука, 1973. 231с.
2. Ефимов А.В., Демидович Б.П. «Линейная алгебра и основы математического анализа». М.: Наука, 1981. 386с.
3. Бараненков Г.С., Демидович Б.П. «Задачи и упражнения по математическому анализу для ВТУЗОВ». М.: Наука, 1980. 184с.
4. Абрамов С.А., Зима Е.В. «Начало программирования на языке Паскаль». М.: Наука, 1987. 8с.
5. Епанешников А.Е., Красильников Ю.И. «Программирование в среде турбо Паскаль». М.: Центр МИФИ СП Диалог, 1990. 3-6с.
6.О.Б.Арушанян, С.Ф.Залеткин. «Численное решение обыкновенных дифференциальных уравнений».
7. В.М.Вержбицкий. «Численный методы (математический анализ и обыкновенные дифференциальные уравнения)». Москва «Высшая школа», 2001
8. http://www.srcc.msu.su/num_anal/
9.Окулов С.М. Программирование в алгоритмах. М.: БИНОМ, 2006
10. Угринович Н.Д. Информатика и информационные технологии: Учебник для 10-11 классов. М.: БИНОМ, 2007
11. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. М.: КНОРУС, 2006