2015-11-16 2 views
-4

У меня есть этот код рунета kutta. Тем не менее, упоминалось, что мой подход ошибочен. И я не мог понять, почему от него, так кто-нибудь здесь, кто мог бы дать понять, почему этот путь неправильный?Правый подход Рунге Кутта 4-го метода?

Vector3d r = P.GetAcceleration(); 

    Vector3d s = P.GetAcceleration() + 0.5*m_dDeltaT*r; 

    Vector3d t = P.GetAcceleration() + 0.5*m_dDeltaT*s; 

    Vector3d u = P.GetAcceleration() + m_dDeltaT*t; 

    P.Velocity += m_dDeltaT * (r + 2.0 * (s + t) + u)/6.0); 

==== ==== РЕДАКТИРОВАТЬ

Vector3D хранят координаты х, у, г.

GetAcceleration возвращает ускорение для каждого x, y и z.

+0

Что такое 'Vector3d' и что возвращает' GetAcceleration'? –

+0

Извините. Я должен был подробно рассказать. – user2180833

ответ

1

У Вас есть некоторая функция ускорения

a(p,q) where p=(x,y,z) and q=(vx,vy,vz) 

Ваш заказ 1 система, которая может быть решена с помощью RK4 является

dotp = q 
dotq = a(p,q) 

этапов способа РК включает смещение вектора состояния (ы)

k1p = q 
k1q = a(p,q) 

p1 = p + 0.5*dt*k1p 
q1 = q + 0.5*dt*k1q 
k2p = q1 
k2q = a(p1,q1) 

p2 = p + 0.5*dt*k2p 
q2 = p + 0.5*dt*k2q 
k3p = q2 
k3q = a(p2,q2) 

и т.д. Вы можете настроить векторы состояния точки P теме каждый шаг, сохранение исходных координат или использование временной копии P для вычисления k2, k3, k4.

0

Вы не определили свои методы, но вещь, которая выпрыгивает из меня, заключается в том, что вы смешиваете свои результаты со своими входами. Поскольку Рунге-Кутта является методом вычисления y_ (n + 1) = y_n + h sum (b_i k_i), я ожидаю, что ваше решение сохранит ваши _n условия справа, а ваши (n + 1) термины налево. Это НЕ то, что вы делаете. Вместо этого s (n + 1) зависит от r_ (n + 1), а не от r_n, t_ (n + 1) от s_ (n + 1) и т. Д. Это пахнет ошибкой, когда вы пытались ограничить количество используемых переменных.

Имея это в виду, вы можете указать фактические промежуточные значения вычислений, которые генерирует ваша программа, и сравнить их с предполагаемыми промежуточными значениями?