오일러 방법을 Runge-Kutta 4 차 순서로 대체하여 일정한 중력 크기가 아닌 자유 낙하 운동을 결정하려면 어떻게해야합니까 (예 : 지상 10,000km에서 자유 낙하)?
지금까지 나는 오일러 방법으로 간단한 통합을 작성했습니다.
while()
{
v += getMagnitude(x) * dt;
x += v * dt;
time += dt;
}
x 변수는 현재 위치를, v는 속도를, getMagnitude (x)는 x 위치에서 가속을 반환합니다.
RK4 구현을 시도했습니다.
while()
{
v += rk4(x, dt) * dt; // rk4() instead of getMagintude()
x += v * dt;
time += dt;
}
rk4 () 함수 본문은 다음과 같습니다.
inline double rk4(double tx, double tdt)
{
double k1 = getMagnitude(tx);
double k2 = getMagnitude(tx + 0.5 * tdt * k1);
double k3 = getMagnitude(tx + 0.5 * tdt * k2);
double k4 = getMagnitude(tx + tdt * k3);
return (k1 + 2*k2 + 2*k3 + k4)/6.0;
}
그러나 RK4 (가속)를 사용하여 한 번만 통합하기 때문에 무언가 잘못되었습니다. RK4를 사용한 속도 통합은 v * dt와 같기 때문에 의미가 없습니다.
Runge-Kutta 적분을 사용하여 2 차 미분 방정식을 푸는 방법을 알려주시겠습니까? k1, l1, k2, l2 ... l4 계수를 계산하여 RK4를 구현해야합니까? 어떻게해야합니까?