Уравнение рунге кутта на паскале

Уравнение рунге кутта на паскале

Есть решение задачи Коши для обыкновенного дифференциального уравнения 1-го порядка с помощью метода Рунге-Кутты 4-го порядка

А что надо изменить, если нужен рунге-кутта 2 порядка?

Program R_K;
Uses crt;
Var
a, b, x0, y0, x1, y1, x2, y2, eps, p, u01, u02, u11, u2, h, g, m, k1, k2, k3, k4: real;
i: integer;
Function f(x,y:real):real;
begin
f:=y/x;
end;
Function u1(x,y,h:real):real;
begin
k1:=f(x,y);
k2:=f(x+h/2,y+h*k1/2);
k3:=f(x+h/2,y+h*k2/2);
k4:=f(x+h,y+h*k3);
u1:=u01+ h*(k1+2*k2+2*k3+k4)/6;
end;
Begin
ClrScr;
writeln(‘ Vvedite a,b ‘);
readln(x0, b);
writeln(‘Vvedite y0’);
readln(y0);
writeln(‘Vvedite h, E ‘);
readln(h, eps);
writeln(‘X’:10,’Y’:17,’h’:19,’P’:20);
u01:=y0;
u02:=y0;
x1:=x0;
x2:=x0;
y1:=y0;
y2:=y0;
While x2 eps) then
h:=h/2;
end;
x1:=x0;
u11:=0;
u01:=y0;
y1:=y0;
u02:=y0;
y2:=y0;
x2:=x0;
u2:=0;
While x1 Helpmaster

Курсовая работа: Разработка программы поиска решения системы дифференциальных уравнений двумя методами: Рунге-Кутта и Рунге-Кутта-Мерсона

В курсовой работе в соответствии с заданием на проектирование решается задача разработки программы поиска решения системы дифференциальных уравнений двумя методами: Рунге-Кутта и Рунге-Кутта-Мерсона.

В данной пояснительной записке проводится описание последовательности шагов по составлению программы на алгоритмическом языке Turbo Pascal. Рассматриваются вопросы математической формулировки и алгоритмизации задачи, разработки блок-схемы алгоритма её решения, составления исходной Pascal-программы и реализации вычислений по составленной программе.

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

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

1. Постановка задачи

Ставится задача составить программу решения системы дифференциальных уравнений:

(1)

Требуется найти решение системы дифференциальных уравнений (1) методом Рунге-Кутта и методом Рунге-Кутта-Мерсона. Выбор метода решения посредствам меню, при помощи клавиш управления курсором.

Таким образом, программа должна обеспечивать возможность:

выбора пользователем численного метода поиска решения системы дифференциальных уравнений;

предоставить пользователю возможность получить краткую справку о программе;

вывода результатов вычисления на дисплей в удобном для восприятия виде.

В результате сформулируем следующую задачу по созданию программы:

вид системы дифференциальных уравнений должен задаваться в подпрограмме – процедуре;

вид правой части уравнений должен задаваться в подпрограмме – функции;

программа после загрузки должна выводить на дисплей исходное окно-заставку, в которой отображаются общие сведения о статусе программы и её авторе;

после выполнения указанной в строке подсказки процедуры перехода должно выводиться вертикальное меню с пунктами: «Справка», «Метод Рунге-Кутта», «Метод Рунге-Кутта-Мерсона» и «Выход»

при выборе в меню пункта «Справка» должна выводиться краткая справка о назначении программы;

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

при выборе пункта меню «Выход» программы должна завершать работу.

2. Математическая формулировка задачи

Задача Коши заключается в решении систем обыкновенных дифференциальных уравнений (1) первого порядка, представляемых в виде:

(1.1)

Где j =1 N -номер каждой зависимой переменной yj , x -независимая переменная .

Этот метод является наиболее распространенным методом решения систем (1.1) при шаге h = const . Его достоинством является высокая точность-погрешность — и меньшая склонность к возникновению неустойчивости решения. Алгоритм реализации метода заключается в циклических вычислениях Yj ( i +1) на каждом i+1 шаге по следующим формулам:

(2)

(3)

(4)

(5)

(6)

При переходе от одной формулы к другой задаются или вычисляются соответствующие значения x и Yj и находятся по подпрограмме значения функции Fj ( x , Yj ).

2.2 Метод Рунге-Кутта-Мерсона

Автоматическое изменение шага в ходе решения систем дифференциальных уравнений необходимо, если решение требуется получить с заданной точностью. При высокой точности (погрешность ) и решении в виде кривых с сильно различающейся крутизной автоматическое изменение шага обеспечивает уменьшение общего числа шагов в несколько раз, резко уменьшается вероятность числовой неустойчивости, даёт более равномерное расположение точек графика кривых (решений) при их выводе на печать. Данный метод обеспечивает приближённую оценку погрешностей на каждом шаге интегрирования. Погрешность интегрирования имеет порядок h 5 . Этот метод реализуется следующим алгоритмом: Задаём число уравнений N, погрешность ε= E , начальный шаг интегрирования h = H и начальное значение y10 ,…,yN 0 . С помощью пяти циклов с управляющей переменной J=1,2. N вычисляем коэффициенты:

(7)

(8)

(9)

(10)

(11)

Находим (в последнем цикле) значение (12)

(12)

(13)

Проверяем выполнения условий

(14)

(15)

Если условие (14) не выполняется, то делим шаг h на 2 и повторяем вычисления. Если это условие выполняется и выполняется условие (15), значение xi +1 = xi + h и Yj ( i +1) , то считаем, что решение системы дифференциальных уравнений найдено с заданной точностью. Если условие (15) не выполняется , шаг h увеличивается вдвое и вычисления повторяются.

3. Алгоритмизация задачи

В соответствии с постановленной в разделе 2 задачей целесообразно реализовать алгоритм, использующий обращение к соответствующим подпрограммам из головной программы.

Алгоритм работы головной программы следующий:

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

Запустить подпрограмму-процедуру вертикального меню при нажатии любой клавиши с использованием подпрограмм-процедур построения окна, вывода рамки окна и скрытия курсора.

Запустить подпрограмму-процедуру справки и вывести в специальном окне справочные сведения о работе с программой при выборе пункта меню «Справка» с использованием строки-подсказки о возврате в меню.

Запустить подпрограмму-процедуру поиска решения системы дифференциальных уравнений методом Рунге-Кутта при выборе пункта меню «Метод Рунге-Кутта» с использованием включения курсора, а также строки-подсказки о возврате в меню.

Запустить подпрограмму-процедуру поиска решения системы дифференциальных уравнений методом Рунге-Кутта-Мерсона при выборе пункта меню «Метод Рунге-Кутта-Мерсона» с использованием включения курсора, а также строки-подсказки о возврате в меню.

Завершить работу программы при выборе пункта меню «Выход».

Алгоритм поиска решения системы уравнения методом Рунге-Кутта в подпрограмме-процедуре runkut включает следующие шаги:

Создать окно для ввода исходных данных и вывода результатов вычисления.

Восстановить отображение курсора нормального размера соответствующей подпрограммой — процедурой.

В подпрограмме-функции задаём вид правой части уравнений.

В подпрограмме-процедуре задаём вид системы дифференциальных уравнений.

Организовать цикл для поиска коэффициентов погрешности по формулам (2-5)

По формуле (6) найти решение системы дифференциальных уравнений.

Вывести результаты вычислений в том же окне.

Вывести в окне запрос о продолжении вычислений с новыми исходными данными.

Выполнить анализ кода нажатой в ответ на запрос клавиши: при нажатии “Y” повторить ввод снова, при нажатии “N” перейти в окно с меню.

Алгоритм поиска решения системы уравнений методом Рунге-Кутта-Мерсона в подпрограмме процедуре rukutm включает:

Создание окно для ввода исходных данных и вывода результатов вычисления.

Восстановления отображение курсора нормального размера соответствующей подпрограммой — процедурой.

Задание начального шаг-h, начальных значений x о ,y10 ,…,yN 0 и точности вычисления- ε.

Подпрограмме-процедуре задаём вид системы дифференциальных уравнений

В подпрограмме-функции задаём вид правой части уравнений

С помощью пяти циклов с управляющей переменной J=1,N вычисляем коэффициенты по формулам (7)-(11).

В последнем цикле находим решение системы дифференциальных уравнений по формуле (12) и погрешность по формуле (13).

Проверка выполнение условий (14) и (15). Если первое условие не выполняется то h := h /2 и переходим к п.5.

Если второе условие не выполняется, то h := h + h и переходим к п.5.

Вывести результаты вычислений в том же окне.

Вывести в окне запрос о продолжении вычислений с новыми исходными данными.

Выполнить анализ кода нажатой в ответ на запрос клавиши: при нажатии “Y” пoвторить ввод снова , при нажатии “N” перейти в окно с меню.

4. Идентификаторы программы

Для указания соответствия обозначений переменных в формулах математической формулировки и их идентификаторов в программе сведем их в таблицу 1:

Уравнение рунге кутта на паскале

function FotXY(x, y: real): real;
begin
FotXY := y — 2 * x / y;
end;

begin
clrscr;
xi := 0;
yi := 1;
writeln(‘ k | xk | yk |’);
for i := 0 to n do
begin
k1 := h * fotxy(xi, yi);
k2 := h * fotxy(xi + h/2, yi + k1/2);
k3 := h * fotxy(xi + h/2, yi + k2/2);
k4 := h * fotxy(xi + h, yi + k3);
dy := (k1 + 2*k2 + 2*k3 + k4) / 6;
yi := yi + dy;
xi := xi + h;
writeln(i:3, ‘ ‘, xi:2:4, ‘ ‘, yi:2:4);
end;
readkey;
end.


источники:

http://www.bestreferat.ru/referat-142070.html

http://pascal-for-all.ucoz.ru/publ/17-1-0-40

Название: Разработка программы поиска решения системы дифференциальных уравнений двумя методами: Рунге-Кутта и Рунге-Кутта-Мерсона
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа Добавлен 17:19:38 12 сентября 2009 Похожие работы
Просмотров: 923 Комментариев: 19 Оценило: 3 человек Средний балл: 5 Оценка: неизвестно Скачать