Введение
В курсовой работе в соответствии с заданием на проектирование решается задача разработки программы поиска решения системы дифференциальных уравнений двумя методами: Рунге-Кутта и Рунге-Кутта-Мерсона.
В данной пояснительной записке проводится описание последовательности шагов по составлению программы на алгоритмическом языке Turbo Pascal. Рассматриваются вопросы математической формулировки и алгоритмизации задачи, разработки блок-схемы алгоритма её решения, составления исходной Pascal-программы и реализации вычислений по составленной программе.
Выбор метода вычисления, обращение к справке по программе и выход из программы обеспечивается с помощью специального меню. Ввод исходных данных и вывод результатов вычисления выполняется в отдельном для каждого метода вычислений окне.
В пояснительной записке приводится также сравнения точности вычислений корней системы уравнений использованными методами.
1. Постановка задачи
Ставится задача составить программу решения системы дифференциальных уравнений:
Требуется найти решение системы дифференциальных уравнений (1) методом Рунге-Кутта и методом Рунге-Кутта-Мерсона. Выбор метода решения посредствам меню, при помощи клавиш управления курсором.
Таким образом, программа должна обеспечивать возможность:
выбора пользователем численного метода поиска решения системы дифференциальных уравнений;
предоставить пользователю возможность получить краткую справку о программе;
вывода результатов вычисления на дисплей в удобном для восприятия виде.
В результате сформулируем следующую задачу по созданию программы:
вид системы дифференциальных уравнений должен задаваться в подпрограмме – процедуре;
вид правой части уравнений должен задаваться в подпрограмме – функции;
программа после загрузки должна выводить на дисплей исходное окно-заставку, в которой отображаются общие сведения о статусе программы и её авторе;
после выполнения указанной в строке подсказки процедуры перехода должно выводиться вертикальное меню с пунктами: «Справка», «Метод Рунге-Кутта», «Метод Рунге-Кутта-Мерсона» и «Выход»
при выборе в меню пункта «Справка» должна выводиться краткая справка о назначении программы;
после выбора в меню варианта численного метода должно открываться отдельное окно, в котором будут вводиться начальные условия и выводиться результат поиска выбранным методом;
при выборе пункта меню «Выход» программы должна завершать работу.
2. Математическая формулировка задачи
Задача Коши заключается в решении систем обыкновенных дифференциальных уравнений (1) первого порядка, представляемых в виде:
Где j=1 N-номер каждой зависимой переменной yj, x-независимая переменная .
Решение системы (1.1) при заданных начальных условиях x=x0, y1(x0)=y10,…,y2(x0)=y20, yN(x0)=yN0 сводиться к нахождению зависимостей (интегральных кривых) y1(x),…,y2(x), yN(x), проходящих через точки (x0,y10), (x0,y20),…, (x0,yN0). Задача Коши сводиться к интегрированию дифференциальных уравнений. Порядок метода численного интегрирования при этом определяется и порядок метода решения (1).
2.1 Метод Рунге-Кутта
Этот метод является наиболее распространенным методом решения систем (1.1) при шаге h=const. Его достоинством является высокая точность-погрешность
При переходе от одной формулы к другой задаются или вычисляются соответствующие значения x и Yj и находятся по подпрограмме значения функции Fj(x,Yj).
2.2 Метод Рунге-Кутта-Мерсона
Автоматическое изменение шага в ходе решения систем дифференциальных уравнений необходимо, если решение требуется получить с заданной точностью. При высокой точности (погрешность
Находим (в последнем цикле) значение (12)
И погрешность
Проверяем выполнения условий
Если условие (14) не выполняется, то делим шаг h на 2 и повторяем вычисления. Если это условие выполняется и выполняется условие (15), значение xi+1=xi+h и Yj(i+1), то считаем, что решение системы дифференциальных уравнений найдено с заданной точностью. Если условие (15) не выполняется , шаг h увеличивается вдвое и вычисления повторяются.
3. Алгоритмизация задачи
В соответствии с постановленной в разделе 2 задачей целесообразно реализовать алгоритм, использующий обращение к соответствующим подпрограммам из головной программы.
Алгоритм работы головной программы следующий:
Скрыть курсор с использованием подпрограммы - процедуры скрытия курсора и вывести в специальном окне заставку программы, содержащую сведения о назначении программы, исполнителе и руководителе курсовой работы, а также подсказку для пользователя о последующих действиях, с использованием подпрограммы - процедуры заставки.
Запустить подпрограмму-процедуру вертикального меню при нажатии любой клавиши с использованием подпрограмм-процедур построения окна, вывода рамки окна и скрытия курсора.
Запустить подпрограмму-процедуру справки и вывести в специальном окне справочные сведения о работе с программой при выборе пункта меню «Справка» с использованием строки-подсказки о возврате в меню.
Запустить подпрограмму-процедуру поиска решения системы дифференциальных уравнений методом Рунге-Кутта при выборе пункта меню «Метод Рунге-Кутта» с использованием включения курсора, а также строки-подсказки о возврате в меню.
Запустить подпрограмму-процедуру поиска решения системы дифференциальных уравнений методом Рунге-Кутта-Мерсона при выборе пункта меню «Метод Рунге-Кутта-Мерсона» с использованием включения курсора, а также строки-подсказки о возврате в меню.
Завершить работу программы при выборе пункта меню «Выход».
Алгоритм поиска решения системы уравнения методом Рунге-Кутта в подпрограмме-процедуре runkut включает следующие шаги:
Создать окно для ввода исходных данных и вывода результатов вычисления.
Восстановить отображение курсора нормального размера соответствующей подпрограммой - процедурой.
Задать начальный шаг-h и начальные значение xо,y10,…,yN0 .
В подпрограмме-функции задаём вид правой части уравнений.
В подпрограмме-процедуре задаём вид системы дифференциальных уравнений.
Организовать цикл для поиска коэффициентов погрешности по формулам (2-5)
По формуле (6) найти решение системы дифференциальных уравнений.
Вывести результаты вычислений в том же окне.
Вывести в окне запрос о продолжении вычислений с новыми исходными данными.