Решение методом Рунге-Кутты

Andrey43

кто-нибудь может подсказать , как следующая система : dx/dt=v , m*dv/dt=F(x)
решается методом Рунге-Кутты 2-го порядка ... что-то я не догоняю
или ссылку киньте плиз.
спасибо.

Vitaminka

Рунге-Кутта! ищи книжку здесь http://www.scientific-library.net/diskra.php
метод не сложный, берешь начальное условие x0,y0 по нему по формуле строишь xi+1,yi+1
и все...
только я формулы не вспомню надо в книге смотреть

sashok009

- КУТТЫ... Лапшин по тебе плачет :-)

Andrey43

формулы то не сложны ... но вот для конкретной системы не догоняю

login

Начальные значения надо считать другими методами

yurimedvedev

Для второго порядка это случайно не метод Эйлера?

yurimedvedev

Если так, то
f = (x, v); - вектор
df/dt = (dx/dt, dv/dt) = (v, F(x)/m);
Нам дано f0 = (x0, v0);
тогда
f1 = f0 + df/dt * delta_t; (1)
f1 = (x0 + v0 * delta_t, v0 + F(x0)/m * delta_t);
где в правой части все величины относятся к времени тому же времени, что x0, v0.
то есть
x1 = x0 + v0 * delta_t;
v1 = v0 + F(x0)/m * delta_t;
Дальше аналогичнейшим образом находишь x2, v2. Разные методы Рунге-Кутта отличаются только формулой (1).

dysh

Чего-то я у тебя не заметил главной фишки:
для уравнения x'=f(x где x -- вектор
x_1 = x_0 + dt * f(x_0);
x_1 = x_0 + dt * f( (x_0 + x_1) / 2 );
или
x_1 = x_0 + dt * f(x_0);
x_1 = x_0 + dt * (f(x_0) + f(x_1 / 2 ;
(прямоугольник или трапеция)
Точно должна быть посумма правой части от старого и временного х, иначе это у тебя просто измельчение шага получится, или я даже не знаю...

stas911

нет, 2 порядок - это "предиктор-корректор", эйлер - это "Р.-К. 1 порядка", если так можно выразиться.

yurimedvedev

x_1 = x_0 + dt * f(x_0);
x_1 = x_0 + dt * f( (x_0 + x_1) / 2 );
или
x_1 = x_0 + dt * f(x_0);
x_1 = x_0 + dt * (f(x_0) + f(x_1 / 2 ;
Нельзя выражать х_1 через f(x_1). Как ты себе это представляешь? В будущее что ли смотреть?
2 - спасибо.

dysh

x_1 = x_0 + dt * f(x_0);
x_1 = x_0 + dt * (f(x_0) + f(x_1 / 2 ;
Нельзя выражать х_1 через f(x_1). Как ты себе это представляешь? В будущее что ли смотреть?
Ну, это ж информатика, а не математика В смысле это :=, а не ==
x_1temp = x_0 + dt * f(x_0);
x_1 = x_0 + dt * (f(x_0) + f(x_1temp / 2 ;
смысл этой переменной -- x_1, посчитанное в первом приближении

yurimedvedev

Тогда понятно.
по-любому, у меня более понятно написано, хоть и формула (1) не правильная. Ты можешь ее написать в моих обозначениях?

dysh

Некому. Автор темы ушел
Она не то что неправильная... Теперь я думаю, что ты просто писал метод РК первого порядка, а (x2, v2) --- это просто следующий шаг. А когда первый раз прочитал, думал, что это как раз итог первого шага, а (x1,v1) --- промежуточный.
Я могу просто раскрыть свою формулу, подставив в нее x и f
x1temp = x0 + delta_t * v0;
v1temp = v0 + delta_t * (F(x0)/m);
x1 = x0 + delta_t * (v0 + v1temp);
v1 = v0 + delta_t * (F(x0 + x1temp)/m);

Vitaminka

начальные значения берутся из условия что это стационарная точка, т.е f_{i}(x) = 0

Andrey43

спасибо . но я имел ввиду следующую схему: уравнение df/dt=F(f) , метод
f_n+1=f_n+delta_t*F( f_n+0.5*delta_t*F(f_n) ) . f_0 - задано . вот я и затруднился написать ее покомпонентно для системы написанной выше .
может так ?
x_n+1=x_n+delta_t* ( v_n+0.5*delta_t*F[x_n] )
v_n+1=v_n+delta_t*F[ x_n+0.5*delta_t*v_n ]
x_0 и v_0 - заданы
?

Vitaminka

у тебя в правой части v и F/m, неужели это настолько сложно?

Vitaminka

и еще... исправь тему поста на Рунге-Кутта, а то выглядит убого

Andrey43

правильно говорить "метод Рунге-Кутты" !

Vitaminka

угу

Andrey43

хотя кто как ... нам так говорили , в книгах по - другому ...

Vitaminka

вам на мехмате такое сказали?

Andrey43

ВМиК , причем несколько преподов ...

Vitaminka

без комментариев

dysh

Ты написал правильную формулу. Только везде, где F, надо еще на m делить, если следовать исходной формулировке. А еще не модно использовать квадратные скобки вместо круглых.

Andrey43

ок. спасибо.
Оставить комментарий
Имя или ник:
Комментарий: