我正在尝试计算身体自由落体的真实速度和时间。我在 Fortran 中编写了一个代码,我正在尝试使用 RK4 方法对其进行改进
x=时间 y=总自由落体
紫线使用:
DO WHILE ((K1-K2) > y)
y = y + t*((G*m*t/(2*((r-y)**2))) + sqrt(2*(G*m*y)/(r*(r-y))))
time = time + t
END DO
绿线使用(RK4方法):
DO WHILE ((D1-D2) > y)
k1 = t*((G*m*(0)/(2*((r-y)**2))) + sqrt(2*(G*m*y)/(r*(r-y))))
k2 = (t/2)*((G*m*(t/2)/(2*((r-(y+k1))**2))) + sqrt(2*(G*m*(y+k1)/(r*(r-(y+k1))))))
k3 = (t/2)*((G*m*(t/2)/(2*((r-(y+k2))**2))) + sqrt(2*(G*m*(y+k2)/(r*(r-(y+k2))))))
k4 = t*((G*m*t/(2*((r-(y+k3))**2))) + sqrt(2*(G*m*(y+k3))/(r*(r-(y+k3)))))
y = y + (1.0/6.0)*(k1+2*k2+2*k3+k4)
time = time + t
END DO
所有其他代码都是相同的(例如,步长),并且在没有 RK4 的情况下我得到了更好的结果。我想我没有正确理解 RK4,我写错了,但我看不到我的错误。我应该改变什么以获得更好的 RK4 效果还是我做错了?