2
Министерство образования Республики Беларусь
Белорусско-Российский университет
Кафедра “Электропривод и АПУ”
Курсовая работа
По дисциплине “Информатика”
Тема работы “Разработка программы численного интегрирования обыкновенного дифференциального уравнения явным многошаговым методом Нистрема третьего порядка точности
Содержание
Введение
1. Описание поставленной задачи
1.1 Краткая характеристика численного метода
1.2 Анализ литературы и программ, патентный поиск
1.3 Формирование требований к программе
2. Проектирование схем алгоритмов
2.1 Разработка алгоритма головной программы
2.2 Проектирование алгоритма ввода исходных данных
2.3 Разработка алгоритма вывода результатов
2.4 Проектирование алгоритма численного метода
3. Кодирование программы в среде программирования
3.1 Разработка структуры программы
3.2 Разработка интерфейса пользователя
3.3 Программирование ввода-вывода данных
3.4 Программная реализация численного метода
4. Тестирование работоспособности программы
4.1 Описание аппаратной конфигурации для тестирования
4.2 Тестирование разработанной программы
4.3 Решение задачи в математической системе Mathcad
4.4 Решение задачи в математической системе MATLAB
4.5 Анализ результатов тестирования
5. Разработка гипертекстового варианта документа работы
Заключение
Приложения
Введение
Информатика является основной базой для проведения научно-исследовательских и проектно-технических работ в современной промышленности. С помощью аппаратно-программных комплексов выполняются как научно-технические расчёты, так и информационный и патентный поиск данных по необходимой тематике.
Согласно заданию цель данной курсовой работы - разработка программы численного интегрирования обыкновенного дифференциального уравнения явным многошаговым методом Нистрема третьего порядка точности.
1. Описание поставленной задачи
1.1 Краткая характеристика численного метода
Решением обыкновенного дифференциального уравнения в нормальной форме Коши согласно [1]
,
где x - независимая переменная;
y - зависимая переменная является функция
,
удовлетворяющая начальным условиям - точке .
При использовании численного метода интегрирования решение уравнения (1.2) получается в виде массива точек описывающих кривую, начинающуюся в конечной точке определения аргумента - .
Численный метод Нистрема относится к явным многошаговым методам численного интегрирования. Данные методы используют для определения каждой последующей точки не одно, а несколько значений функции в предыдущих точках интегрирования. В отличие от одношаговых методов, многошаговые не обладают свойством самостартования, поэтому перед запуском вычислений необходимо рассчитать требуемое число первых точек искомой функции при помощи одношагового метода, а только потом по этим значениям реализовать процесс интегрирования многошаговым методом Нистрема.
Исходные данные и результаты расчёта при многошаговом методе интегрирования аналогично данным одношаговым методам.
Однако для определения текущих значений точек искомой функции в процесс интегрирования необходимо сформировать два одномерных массива: для аргумента -MX и функции - MY. В этих массивах первый(нулевой) элемент соответствует текущей искомой (n-ной) точке, первый - предыдущей(n-1)-вой, второй - (n-2)-ой точке, которая стоит впереди текущей на два шага интегрирования, тритий - (n-3)-ей точке, отстоящей на три шага интегрирования, и так до последней точки.
с начальным условиями:
Уравнение (1.3) можно преобразовать к виду:
и применить к нему разделённый метод Рунге-Кутты:
Шаг интегрирования h является постоянным на всём расчётном интервала аргумента . Для получения последующей точки искомого значения функции используются только одно её предыдущее значение, которое определяется по формуле:
Число расчётных точек определяется величиной шага интегрирования. Метод Нистрема имеет третий порядок точности. Каждое последующее значение функции определяется на основе значений предыдущей точки при помощи выражения:
1.2 Анализ литературы и программ, патентный поиск
Метод Нистрема подробно описывается в [1], [2]. Он относится к явным многошаговым методам численного интегрирования дифференциальных уравнений.
Метод Нистрема обладает рядом приемуществ. Во-первых, хотя и метод Нистрёма является частным случаем раздельных методов Рунге-Кутты, но в отличие от последнего обладает меньшей стадийностью, что положительно сказывается на производительности метода. Во-вторых, существуют симплектические методы Нистрёма. Симплектичность метода означает, что метод сохраняет не которую геометрическую структуру, называемую симплектической формой. На практике сохранение этой структуры обеспечивает сохранение полной энергии системы и других инвариантов. Такие методы находят применение при моделировании процессов продолжительных по времени. Некоторые классические методы могут давать большую локальную точность, но искажать качественную картину процесса.
Многошаговый метод Нистрема не распространён в программах математического уклона из-за конкуренции других явных многошаговых методов. Но возможность самостартования, однако используется для решения дифференциальных уравнений другими многошаговыми методами.
Описание численного метода Нистрема в Интернет среде компьютерной математики находится на следующих сайтах:
-www.exponenta.ru;
-http://alglib.sources.ru
Поиск данных в Интернете производится с помощью поисковой службы Yandex.by.
1.3 Формирование требований к программе
Разрабатываемая программа должна удовлетворять следующим требованиям:
1) Тип операционной системы -MS Windows 7/8/8.1/10;
2) Формат файла исходных данных - текcтовый;
3) Форма вывода результата расчёта:
- таблица результатов расчёта искомой функции с сохранением в текстовый файл.
- графиком функции с возможностью сохранения в Windows мета-файл (wmf);
4)в программе следует предусмотреть задание числа фиксируемых точек решения Np;
5) контроль корректности ввода исходных данных выполнятся путём проверки условий:
;
;
6)визуализация текущего процесса численного интегрирования- в виде полосы с указанием номера текущей точки сохранения;
7) формат файла справки - html.
2. Проектирование схем алгоритмов
2.1 Разработка алгоритма головной программы
Схема алгоритма головной программы описывает общий сценарий работы разрабатываемого приложения. В составе проекта приложения предусматривается три формы:
1) Главная форма приложения с вводом исходных данных;
2) Форма отображения таблицы и графика результатов расчёта;
3) Форма информации о программе.
При запуске приложения отображаются главная форма, на которой находятся управляющие элементы: главное меню и обработка следующих событий:
1) Ввод исходных данных;
2) Загрузка созданного ранее файла с исходными данными;
3) Решение ОДУ численным методом Нистрема, при условии ввода исходных данных;
4) Отображение таблицы и графика результатов расчёта, при условии успешного расчёта(производится автоматически);
5) Вывод формы с информацией о программе;
6) Выход из программы.
В схеме алгоритма предусматривается контроль и блокирование следующих действий пользователя:
1) Запуск численного решения при отсутствии ввода исходных данных:
2) Просмотр результатов расчёта(таблица и графика решения) без успешного завершения этапа численного решения.
Схема алгоритма головной программы изображается согласно требований ГОСТ 19.701-90 на рисунке 2.1 и на листе графической части НИСТРЕМ 00.00.000.
Рисунок 2.1- Схема алгоритма приложения
2.2 Проектирование алгоритма ввода исходных данных
Для решения в программе выбирается ОДУ вида степенного ряда:
dy/dx=
Исходными данными являются:
1) Np -число сохраняемых расчётных точек ;
2) h- величина шага интегрирования;
3) X0, YO - начальные условия решения;
4) Xk - конечное значение аргумента Xk, определяющее интервал поиска решения;
Схема алгоритма ввода исходных данных из текстового файла показана на рисунке 2.2а
2.3 Разработка алгоритма вывода результатов
Результаты расчёта (точки искомой функции) сохраняются в переменных- массивах: для аргумента X и функции Y, которые отображаются в виде таблицы или графика на соответствующих формах.
В курсовой работе рассматривается схема алгоритма записи полученного решения в текстовый файл вместе с исходными данными. При этом предусматривается запись строки комментария. Схема алгоритма показывается на рисунке 2.2б.
Вывод результатов в ячейки текстовой таблицы на форме выполняется с предварительным преобразованием численных значений в строковые. График строится на отдельной форме с использованием встроенных функций.
а) Алгоритм чтения б) Алгоритм записи
данных из файла результатов в файл
Рисунок 2.2 - Схемы алгоритмов ввода-вывода данных
2.4 Проектирование алгоритма численного метода
При организации текущих вычислений удобно использовать переменные значений аргумента Xn и функции Yn для точки предыдущего шага и Xn1 и Yn1 - для точки последующего шага
Численное решение ОДУ методом Нистрема с учётом приведённого в разделе 1 описания исходных данных и результатов расчёта показывается на схеме алгоритма рисунка 2.4. Результаты решения дифференциального уравнения записываются в переменные-массивы X (значения аргументов точке интегрирования) и Y(значения функций).
Приведённые схемы алгоритмов также строятся на листе НИСТРЕМ 00.00.000 графической части работы.
Рисунок 2.4 - Схема численного решения методом Нистрема
3. Кодирование программы в среде программирования
3.1 Разработка структуры программы
Согласно заданию проект программы разрабатывается в среде визуального программирования C++ Builder версии 6.0 на основе составленных блок-схем алгоритмов.
В составе проекта входят следующие формы:
1) Form2- главная форма(модуль Unit2) на которой располагается системное меню, ввод исходных данных и выполнение расчёта;
2) Form1- Форма отображения результатов расчёта в виде графика и таблицы(модуль Unit1)
3) Form3- форма с информацией по программе(модуль Unit3)
Основные переменные и подпрограммы размещаются в файле модуля главной формы.
3.2 Разработка интерфейса пользователя
Разработка интерфейса главной формы
Рисунок 3.1- Вид проекта главной формы
В составе интерфейса главной формы используются следующие визуальные компоненты:
1)MainMenu - главное меню приложения со следующими разделами:
А)”Сохранить/Загрузить” (компонент N1Click класса TMenuItem) - ввод исходных данных имеет следующие подразделы:
-“Cохранить”(N6Click класса TMenuItem)- сохранение значений данных в файле;
-“Загрузить”(N7Click класс TMenuItem) - загрузка ранее сохранённых данных;
Б)Справка(N2Click класса TMenuItem)- отображение информации о программе на форме Form3;
В)”Закрыть” (N3Click класса TMenuItem)- выход из программы;
2) компоненты TLabel текcтовых меток:
-Label1- для отображения строки “Расчёт функции методом Нистрема”;
-Label2- для отображения начального значения независимой переменной x(X0);
-Label3- для отображения начального значения переменной функции y(Y0); численный кодирование интерфейс тестирование
-Label4- для отображения конечного значения независимой переменной x(Xk);
-Label5- для отображения числа точек расчёта(Np);
-Label6- для отображения значения шага интегрирования(h);
-Label7- для отображения строки “Прогресс”;
-Label8- для отображения строки
“Функция вида: a*x^2+b*x+c*y^2+d*y+e*x*y+f”;
-Label9- для отображения значения a;
-Label10- для отображения значения b;
-Label11- для отображения значения c;
-Label12- для отображения значения d;
-Label13- для отображения значения e;
-Label14- для отображения значения f;
3) ProgressBar1 - строка отображения процента выполнения численного интегрирования;
4) SaveDialog1 - диалоговое окно для задания имени файла для сохранения результатов;
5) OpentDialog1 - диалоговое окно для выбора имени файла исходных данных;
6) Однострочные редакторы класса TEdit для ввода исходных данных:
-Edit1 - начальное значение независимой переменной X0;
-Edit2 - начальное значение переменной функции Y0;
-Edit3 - конечное значение независимой переменной X0;
-Edit4 - Число точек расчёта(Np);
-Edit5 - значение шага интегрирования(h);
-Edit6 - значение а для функции(2.1);
-Edit7 - значение b для функции(2.1);
-Edit8 - значение c для функции(2.1);
-Edit9 - значение d для функции(2.1);
-Edit10 - значение e для функции(2.1);
-Edit11 - значение f для функции(2.1);
7) кнопка управления класса TButton :
-“Расчёт”(Buttlon1Click класса TButton) - решение ОДУ с принятыми исходными данными и открытием формы TForm1 при успешном расчёте;