Учитывая следующие входные данные,
- Обычное дифференциальное уравнение, которое определяет значение dy / dx в виде x и y.
- Начальное значение y, т. Е. Y (0)
Таким образом, мы приведены ниже.
Задача состоит в том, чтобы найти значение неизвестной функции y в заданной точке x.
Метод Рунге-Кутты находит приблизительное значение y для данного x. Только обыкновенные дифференциальные уравнения первого порядка могут быть решены с помощью метода 4-го порядка Рунге Кутты.
Ниже приведена формула, используемая для вычисления следующего значения y n + 1 из предыдущего значения y n . Значения n равны 0, 1, 2, 3,… (x — x0) / h. Здесь h — высота шага, а x n + 1 = x 0 + h
, Меньший размер шага означает большую точность.
Формула в основном вычисляет следующее значение y n + 1, используя текущее значение y n плюс средневзвешенное значение четырех приращений.
- k 1 — приращение, основанное на наклоне в начале интервала, используя y
- K 2 представляет собой приращение на основе наклона в средней точке интервала, с использованием Y + 1 HK / 2.
- к 3 снова приращение на основе наклона в средней точке, используя при помощи у + кк 2/2.
- k 4 — это приращение, основанное на наклоне в конце интервала, с использованием y + hk 3 .
Этот метод является методом четвертого порядка, это означает, что локальная ошибка усечения имеет порядок O (h 5 ), в то время как общая накопленная ошибка составляет порядок O (h 4 ).
Ниже приведена реализация приведенной выше формулы.
// C программа для реализации метода Рунге Кутты
#include
// Пример дифференциального уравнения «dy / dx = (x — y) / 2»
float dydx( float x, float y)
// Находит значение y для заданного x, используя размер шага h
// и начальное значение y0 в x0.
float rungeKutta( float x0, float y0, float x, float h)
// Подсчитать количество итераций, используя размер шага или
int n = ( int )((x — x0) / h);
float k1, k2, k3, k4, k5;
// Итерация по количеству итераций
// Применить формулы Рунге Кутты, чтобы найти
// следующее значение у
k2 = h*dydx(x0 + 0.5*h, y + 0.5*k1);
k3 = h*dydx(x0 + 0.5*h, y + 0.5*k2);
k4 = h*dydx(x0 + h, y + k3);
// Обновить следующее значение y
y = y + (1.0/6.0)*(k1 + 2*k2 + 2*k3 + k4);;
// Обновляем следующее значение x
float x0 = 0, y = 1, x = 2, h = 0.2;
printf ( «nThe value of y at x is : %f» ,
rungeKutta(x0, y, x, h));
// Java-программа для реализации метода Рунге Кутты
double dydx( double x, double y)
// Находит значение y для заданного x, используя размер шага h
// и начальное значение y0 в x0.
double rungeKutta( double x0, double y0, double x, double h)
differential d1 = new differential();
// Подсчитать количество итераций, используя размер шага или
int n = ( int )((x — x0) / h);
double k1, k2, k3, k4, k5;
// Итерация по количеству итераций
for ( int i = 1 ; i
// Применить формулы Рунге Кутты, чтобы найти
// следующее значение у
k1 = h * (d1.dydx(x0, y));
k2 = h * (d1.dydx(x0 + 0.5 * h, y + 0.5 * k1));
k3 = h * (d1.dydx(x0 + 0.5 * h, y + 0.5 * k2));
k4 = h * (d1.dydx(x0 + h, y + k3));
// Обновить следующее значение y
y = y + ( 1.0 / 6.0 ) * (k1 + 2 * k2 + 2 * k3 + k4);
// Обновляем следующее значение x
public static void main(String args[])
differential d2 = new differential();
double x0 = 0 , y = 1 , x = 2 , h = 0.2 ;
System.out.println( «nThe value of y at x is : «
+ d2.rungeKutta(x0, y, x, h));
// Этот код предоставлен Prateek Bhindwar
# Программа Python для реализации метода Рунге Кутты
# Пример дифференциального уравнения «dy / dx = (x — y) / 2»
# Находит значение y для заданного x, используя размер шага h
# и начальное значение y0 при x0.
def rungeKutta(x0, y0, x, h):
# Подсчитать количество итераций, используя размер шага или
n = ( int )((x — x0) / h)
# Итерировать по количеству итераций
for i in range ( 1 , n + 1 ):
«Apply Runge Kutta Formulas to find next value of y»
k1 = h * dydx(x0, y)
k2 = h * dydx(x0 + 0.5 * h, y + 0.5 * k1)
k3 = h * dydx(x0 + 0.5 * h, y + 0.5 * k2)
k4 = h * dydx(x0 + h, y + k3)
# Обновить следующее значение y
y = y + ( 1.0 / 6.0 ) * (k1 + 2 * k2 + 2 * k3 + k4)
# Обновить следующее значение x
print ‘The value of y at x is:’ , rungeKutta(x0, y, x, h)
# Этот код предоставлен Prateek Bhindwar
// C # программа для реализации Runge
// метод Кутты
static double dydx( double x, double y)
// Находит значение y для данного x
// используя размер шага h и начальный
// значение y0 в x0.
static double rungeKutta( double x0,
double y0, double x, double h)
// Подсчитать количество итераций используя
// размер шага или высота шага h
int n = ( int )((x — x0) / h);
double k1, k2, k3, k4;
// Итерация по количеству итераций
for ( int i = 1; i
// Применяем формулы Рунге Кутты
// найти следующее значение у
k1 = h * (dydx(x0, y));
k2 = h * (dydx(x0 + 0.5 * h,
k3 = h * (dydx(x0 + 0.5 * h,
k4 = h * (dydx(x0 + h, y + k3));
// Обновить следующее значение y
y = y + (1.0 / 6.0) * (k1 + 2
// Обновляем следующее значение x
public static void Main()
double x0 = 0, y = 1, x = 2, h = 0.2;
Console.WriteLine( «nThe value of y»
+ rungeKutta(x0, y, x, h));
// Этот код предоставлен Sam007.
// PHP-программа для реализации
// метод Рунге Кутта
// Пример дифференциального уравнения
// «dy / dx = (x — y) / 2»
function dydx( $x , $y )
return (( $x — $y ) / 2);
// Находит значение y для
// дано х, используя размер шага h
// и начальное значение y0 в x0.
function rungeKutta( $x0 , $y0 , $x , $h )
// Подсчитать количество итераций
// используя размер шага или шаг
$k1 ; $k2 ; $k3 ; $k4 ; $k5 ;
// Итерация по номеру
for ( $i = 1; $i $n ; $i ++)
// Применить Рунге Кутта
// формулы для поиска
// следующее значение у
$k1 = $h * dydx( $x0 , $y );
$k2 = $h * dydx( $x0 + 0.5 * $h ,
$k3 = $h * dydx( $x0 + 0.5 * $h ,
$k4 = $h * dydx( $x0 + $h , $y + $k3 );
// Обновить следующее значение y
$y = $y + (1.0 / 6.0) * ( $k1 + 2 *
// Обновляем следующее значение x
echo «The value of y at x is : » ,
rungeKutta( $x0 , $y , $x , $h );
// Этот код предоставлен anuj_67.
?>
Сложность по времени вышеупомянутого решения составляет O (n), где n — (x-x0) / ч.
Некоторые полезные ресурсы для подробных примеров и большего количества объяснения.
http://w3.gazi.edu.tr/
Эта статья предоставлена Арпит Агарвал . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Видео:4a. Методы Рунге-КуттаСкачать
7.4. Метод Рунге-Кутта 4 порядка
На практике наибольшее распространение получил метод Рунге-Кутта 4-го порядка, в котором усреднение проводится по трём точкам, формула Эйлера на каждом отрезке используется 4 раза: в начале отрезка, дважды в его середине и в конце отрезка.
Расчетные формулы метода для дифференциального уравнения (7.3) имеют вид:
, (7.8)
Где i = 0, 1, …., n-1 — номер узла;
Xi = a + i×h — координата узла;
У0 = у(х0) — начальное условие.
Погрешность метода dМ = О(h5).
Схема алгоритма решения ОДУ методом Рунге-Кутта 4-го порядка отличается алгоритмом расчёта новой точки (Рис. 7.5).
Пример 7.4. Решение ранее рассмотренного уравнения (пример 7.1) методом Рунге-Кутта 4 порядка.
Y’ — 2×y + x2 = 1, x Î [0;1], y(0) = 1.
Пусть n = 10 , h = (1 — 0)/10 = 0,1.
Начальная точка x0 = 0, y0 = 1.
Рассчет первой точки.
Сначала вычислим значения C0, C1, C2, C3:
Вычислим значение y1:
Аналогично можно вычислить значения функции во 2, 3, . , 10 точках.
Рис. 7.7. Схема алгоритма расчета новой точки методом Рунге-Кутта 4-го порядка.
Общая характеристика методов:
1. Все методы являются Одношаговыми, то есть для вычисления значения функции в новой точке используется ее значение в предыдущей точке. Это свойство называется Самостартованием.
2. Все методы легко обобщаются на системы дифференциальных уравнений 1-го порядка.
Видео:Метод ЭйлераСкачать
Метод Рунге — Кутты
Этот онлайн калькулятор реализует классический метод Рунге — Кутты (встречается также название метод Рунге — Кутта) четвертого порядка точности. Метод используется для решения дифференциальных уравнений первой степени с заданным начальным значением
Калькулятор ниже находит численное решение дифференциального уравнения первой степени методом Рунге-Кутты (иногда встречается название метод Рунге-Кутта, а в поисковиках бывает ищут «метод рунге кута», «метод рунги кутта» и даже «метод рунги кута»), который также известен как классический метод Рунге — Кутты (потому что есть на самом деле семейство методов Рунге-Кутты) или метод Рунге — Кутты четвертого порядка.
Для того, чтобы использовать калькулятор, вам надо привести дифференциальное уравнение к форме
и ввести правую часть уравнения f(x,y) в поле y’ калькулятора.
Также вам понадобится ввести начальное значение
и указать точку в которой вы хотите получить численное решение уравнения .
Последнее параметр калькулятора — размер шага с которым вычисляется следующее приближение по графику функции.
Описание метода можно найти под калькулятором.
🎥 Видео
Решение ОДУ методом Рунге-Кутта 4 порядка (программа)Скачать
Решение ОДУ: метод Рунге КуттаСкачать
3_11. Алгоритм Рунге-КуттыСкачать
Решение ОДУ методом Рунге КуттаСкачать
04 Метод Рунге-Кутты 4-го порядкаСкачать
Программируем метод Рунге-Кутта 4 порядкаСкачать
Методы численного анализа - Метод Рунге-Кутта для ОДУ 2 порядкаСкачать
Численные методы решения ДУ: метод Рунге-КуттаСкачать
6.4 Явные методы Рунге-КуттыСкачать
Интегрирование систем дифференциальных уравнений методом Рунге-Кутта 4-ог порядка в Arduino IDE.Скачать
Метод Рунге Кутты 2 и 4 порядковСкачать
Решение ОДУ методом Рунге КуттаСкачать
Линейное дифференциальное уравнение Коши-ЭйлераСкачать
6.1 Численные методы решения задачи Коши для ОДУСкачать
Метод Эйлера. Метод Рунге-Кутта. Классический метод Рунге-Кутта 4 порядка точности. Лекция №9Скачать
Численное решение задачи Коши методом ЭйлераСкачать
Численные методы решения ОДУСкачать