Пусть дано дифференциальное уравнение первого порядка
с начальным условием х=х0, у =уо-
В окрестности точки х0 функцию у(х) разложим в ряд Тейлора:
который можно применить для приближенного определения искомой функции у(х). Для уменьшения погрешности метода интегрирования дифференциального уравнения необходимо учитывать большее количество членов ряда. Однако при этом возникает необходимость аппроксимации производных от правых частей дифференциального уравнения.
Основная идея методов Рунге-Кутты заключается в том, что производные аппроксимируются через значения функции Дх, у) в точках на интервале [х(), х0+л], которые выбираются из условия наибольшей близости алгоритма к ряду Тейлора. В зависимости от старшей степени h, с которой учитываются члены ряда, построены вычислительные схемы Рунге-Кутты разных порядков точности.
Так, например, общая форма записи метода Рунге-Кутты второго порядка следующая:
где
Решение ОДУ, полученное по этой схеме, имеет погрешность 0(1г).
Для параметра а наиболее часто используют значения
Рассмотрим первый вариант метода Рунге-Кутты второго порядка.
При а = 0,5 формула (8.19) примет вид:
Формулу (8.20) можно представить в виде следующей схемы:
Это метод Рунге-Кутты второго порядка (1-й вариант), или исправленный метод Эйлера.
Геометрически процесс нахождения точки Х,у можно проследить по рис. 8.4. По методу Эйлера находится точка x()+h, yo+h — /о, лежащая на прямой Г,. В этой точке снова вычисляется тангенс угла наклона касательной (прямая L,). Усреднение двух тангенсов дает прямую L. Проводим через точку л’«,_у0 прямую L, параллельную L. Точка, в которой прямая L пересечется с ординатой х=х]=х0+h,u будет искомой точкой Х,у.
Тангенс угла наклона прямой L и L равен
Уравнение прямой L запишется в виде:
тогда в точке с учетом (8.22) получим решение:
Формула описывает метод Рунгс-Кутты второго порядка при а = 0,5.
В случае второго варианта метода Рунгс-Кутты второго порядка принимают
Тогда формула (8.19) примет вид:
Представим формулу (8.25) в виде схемы:
Эго метод Рунге-Кутты второго порядка (2-й вариант), или модифицированный метод Эйлера.
Рассмотрим геометрическую интерпретацию метода Рунге-Кутты при а = 1 (рис. 8.5).
Через точку х0, у0 проводим касательную (прямая L,) с тангенсом угла наклона, равным
По методу Эйлера в точке х=х0 + h/2 находится приближенное решение ОДУ
В точке Р определяется тангенс угла наклона касательной (прямая L*) интегральной кривой:
где
Проводим через точку х0, у0 прямую, параллельную L
(прямая L0). Пересечение этой прямой с ординатой х=х0 + h и дает искомую точку Х,у. Уравнение прямой L0 можно записать в виде:
Тогда с учетом (8.28) в точке х=х0 + h получим решение:
Формула (8.30) описывает метод Рунге-Кутты второго порядка при а = 1.
Видео:3_11. Алгоритм Рунге-КуттыСкачать
Метод Рунге-Кутта решения диф. уравнений и их систем.
Метод позволяет решать системы обыкновенных дифференциальных уравнений (ОДУ) первого порядка следующего вида:
которые имеют решение:
где t — независимая переменная (например, время); X, Y и т.д. — искомые функции (зависимые от t переменные). Функции f, g и т.д. — заданы. Также предполагаются заданными и начальные условия, т.е. значения искомых функций в начальный момент.
Одно диф. уравнение — частный случай системы с одним элементом. Поэтому, далее речь пойдет для определенности о системе уравнений.
Метод может быть полезен и для решения диф. уравнений высшего (второго и т.д.) порядка, т.к. они могут быть представлены системой диф. уравнений первого порядка.
Метод Рунге-Кутта заключается в рекурентном применении следующих формул:
Реализация Метода Рунге-Кутта на Delphi может выглядеть так (привожу полностью модуль):
Модуль полностью работоспособен. Возвращаемое функцией Runge_Kutt значение — код ошибки. Вы можете дополнить список ошибок по своему усмотрению. Рассчитанные функции системы помещаются в массив Res. Чтобы не загромождать код, в модуле опущены проверки (типа блоков try). Рекомендую их добавить по своему усмотрению.
Ниже приводится описание функции Runge_Kutt и типов, использующихся в модуле.
- FunArray — вектор функций (правых частей уравнений системы);
- First, Last — начальная и конечная точки расчетного интервала;
- Steps — число шагов по расчетному интервалу;
- InitArray — вектор начальных значений
- var Res — матрица результатов включая независимую переменную.
В модуле описаны типы:
Функция возвращает коды ошибок:
- 0 — нет ошибок;
- 100 — число уравнений не равно числу начальных условий.
Решение содержится в переменной-матрице Res. Первый индекс матрицы относится к переменной (0 — независимая переменная, 1 — первая зависимая и т.д.), второй — к номеру расчетной точки (0 — начальная точка).
Рассмотрим один пример использования модуля. Создадим новое приложение и подключим к нему модуль. На форме приложения разместим кнопку Button1 и область текста Memo1. Поместим в приложение две функции и обработчик нажатия кнопки:
Нажатие кнопки приведет к расчету точек системы, которые будут выведены в текстовую область.
Модуль с примером и справкой можно скачать бесплатно по адресу RK.zip (ZIP, 15,3Kb) (русский вариант). Английский вариант (условно-бесплатный) можно скачать по адресу RK_Eng.zip (ZIP, 23.4Kb)
Видео:6.4 Явные методы Рунге-КуттыСкачать
Ссылки
- http://sadovoya.narod.ru/RK.zip (русский вариант).
- http://sintreseng.narod.ru/RK_Eng.zip (английский, условно-бесплатный вариант)
Видео:Методы численного анализа - Метод Рунге-Кутта для ОДУ 2 порядкаСкачать
Оставить комментарий
Видео:Метод ЭйлераСкачать
Комментарии
Скачала по Вашей ссылке русский вариант, изменила для своей системы диф. уравнений, но при запуске выдаёт ошибку :
Project Ex.exe raised exception class EOverflow with message ‘ Floating point overflow ‘
Помогите, пожалуйста .
Вот изменённый мною модуль:
unit Unit1;
interface
uses
SysUtils, Forms, StdCtrls, Controls, Classes, Dialogs, Math;
type
TForm1 = class(TForm)
Memo1: TMemo;
rk_But: TButton;
procedure rk_ButClick(Sender: TObject);
private
public
end;
var
Form1: TForm1;
pn,k,ro,Pzv: Extended;
implementation
uses rk_method, Windows;
procedure Syst (var t: TFloat; var X: TFloatVector;
var RP: TFloatVector);
const
fdr1=0.503;
fdr2=0.503;
fdr3=0.196;
W1=179.8928;
W2=3773.8568;
W3=2504.1203;
b1=55.9203;
b2=98.6;
b3=98.6;
Ls1=3.78;
Ls2=9;
Ls3=15.3;
Svidj2=1352.438;
Svidj3=1352.438;
my=0.62;
vk=30;
m=1.2;
L1=30.969;
L2=42.131;
delta1=0;
begin
pn:=2.5*Power(10,4);
k:=6*Power(10,-7);
ro:=8.5*Power(10,-7);
Pzv:=3.919*Power(10,7);
RP[0] := (1/(k*W1))*(my*fdr1*sqrt(2/ro)*sqrt(Abs(pn-X[0]))-my*fdr2*sqrt(2/ro)*sqrt(Abs(X[0]-X[1]))-(delta1*delta1*delta1*b1)/(12*ro*vk*Ls1)*X[0]); // dp1/dt
RP[1] := (1/(k*W2))*(my*fdr2*sqrt(2/ro)*sqrt(Abs(X[0]-X[1]))-my*fdr3*sqrt(2/ro)*sqrt(Abs(X[1]-X[2]))-(X[4]*X[4]*X[4]*b2)/(12*ro*vk*Ls2)*X[1]); // dp2/dt
RP[2] := (1/(k*W3))*(my*fdr3*sqrt(2/ro)*sqrt(Abs(X[1]-X[2]))-(X[6]*X[6]*X[6]*b3)/(12*ro*vk*Ls3)*X[2]); // dp3/dt;
RP[3] := (((Svidj2*X[1]*(L1+L2))/L1)-Pzv)*(2/m); // dv2/dt
RP[4] := X[3]; // d delta2/dt
RP[5] := (((Svidj3*X[2]*(L1+L2))/L2)-Pzv)*(2/m); // dv3/dt
RP[6] := X[5]; // d delta3/dt
end;
procedure TForm1.rk_ButClick(Sender: TObject);
var
I, t1, t2: Cardinal;
tOut, InitConds: TFloatVector;
XOuts: TFloatMatrix;
Points: Cardinal;
First, Last: TFloat;
StepsFact: Cardinal;
Count: Word;
begin
Memo1.Clear;
First := 0.0;
Last := 10.0;
Count:= 7;
Points:=10+1; //11 points for output
StepsFact:=1000000; //all steps inside function = 10*StepsFact
try
SetLength(InitConds, Count);
InitConds[0]:=0.0; //x0(0)=0
InitConds[1]:=0.0; //x1(0)=0
InitConds[2]:=0.0; //x2(0)=0
InitConds[3]:=0.0; //x3(0)=0
InitConds[4]:=0.0; //x4(0)=0
InitConds[5]:=0.0; //x5(0)=0
InitConds[6]:=0.0; //x6(0)=0
SetLength(tOut, Points);
SetLength(XOuts, Count, Points);
except
ShowMessage(‘Out of memory. ‘);
exit;
end;
Видео:Численные методы решения ДУ: метод Рунге-КуттаСкачать
Метод Рунге — Кутта второго порядка
Рассмотрим метод Рунге — Кутта второго порядка (метод Эйлера — Коши).
В этом методе величины ум вычисляются по следующим формулам (рис. 2.24):
Обозначим
Рис. 2.24. Метод Эйлера — Коши
тогда
Геометрически это означает, что определяется направление интегральной кривой в исходной точке (х„ у,) и во вспомогательной точке (xi+l, у*+)), а в качестве окончательного выберем среднее из этих направлений.
Пример 2.59. Решить методом Эйлера дифференциальное уравнение y’=cosy + 3x методом Рунге — Кутта второго порядка (начальное условие у(0) = 1,3 на отрезке [0; 1]).
function f(x,y:real):real; begin
?ГЙе1п(‘Введите у, a, b, h’); readln(y,a,b,h); x:=a; repeat
y:=y+h*(f(x,y)+f(x+h,z))/2; x:=x+h; until x>b+0.1; readkey; end.
Видео:04 Метод Рунге-Кутты 4-го порядкаСкачать
Метод Рунге — Кутта 4-го порядка
В вычислительной практике наиболее часто используется метод Рунге — Кутта четвертого порядка. В этом методе величины ум вычисляются по следующим формулам:
Пример 2.60. Пусть дано дифференциальное уравнение у’ = = у-х с начальным условием у(0) =1,5.
Найти с точностью s = 0,01 решение этого уравнения методом Рунге — Кутта при * = 1,5.
Весь отрезок интегрирования [0; 1,5] разобьем на шесть частей точками:
- *0 = 0; *4=1;
- *, = 0,25; *5=1,25;
- *2 = 0,5; *6=1,5.
- *3 = 0,75;
Из начальных условий имеем *0 = 0; у0 = 1,5.
Найдем первое приближение
Используя формулы метода Рунге — Кутта, получаем
К = [(Уо + к ъ) — (Ло + Л)]А = 0,41.
Следовательно Ду0 = -(0,375 + 2 • 0,39 + 2 • 0,392 + 0,41) = 0,392.
Отсюда
Пример 2.61. Проинтегрировать дифференциальное уравнение
методом Рунге — Кутта на отрезке [0; 2] и выдать на печать значение функции в каждой двадцатой точке. В качестве шага интегрирования можно взять h = 0,005, в качестве начальных условий — у(0) = 1.
F(X,Y) — подпрограмма-функция (правая часть уравнения)
For I:=l TO N DO Begin X:=X+H;
Замечание. Метод Рунге—Кутта для решения дифференциального уравнения
сводится к последовательному вычислению следующих равенств
Пример 2.62. Решить дифференциальное уравнение
у(0) = 1,3 на отрезке [0; 1] методом Рунге — Кутта 4-го порядка.
Program Runge; var kl,k2,k3,k4,x,y,a,b,h,d:real; function f(x,y:real):real; begin f:= cos(y)+3*x; end; begin
угке1п(‘Введите у, a, b, h’); readln(y,a,b,h);
k2:=f(x+h/2,y+h*kl/2); k3:=f(x+h/2,y+h*k2/2); k4:=f(x+h,y+h*k3); d:=(kl+2*k2+2*k3+k4)/6; y:=y+d; x:=x+h; until x>b+0.1; readln; end.
📹 Видео
Решение ОДУ методом Рунге КуттаСкачать
4a. Методы Рунге-КуттаСкачать
Явный метод Рунге-Кутты второго порядка для решения задачи Коши. Контрольная работа МФТИСкачать
Решение ОДУ методом Рунге-Кутта 4 порядка (программа)Скачать
Решение ОДУ: метод Рунге КуттаСкачать
Численные методы. Лекция 10: метод Эйлера, методы Рунге-КуттыСкачать
Метод Рунге Кутты 2 и 4 порядковСкачать
Лекция 5. Методы Рунге--Кутты. 11.03.2021Скачать
Метод простых итераций пример решения нелинейных уравненийСкачать
Метод Эйлера. Метод Рунге-Кутта. Классический метод Рунге-Кутта 4 порядка точности. Лекция №9Скачать
6.1 Численные методы решения задачи Коши для ОДУСкачать
Линейное неоднородное дифференциальное уравнение второго порядка с постоянными коэффициентамиСкачать
Решение ОДУ методом Рунге КуттаСкачать