4阶的龙格库塔

时间:2016-12-11 02:41:54

标签: python numpy numerical-methods runge-kutta

让我们考虑我有一个4 ODE系统:dX / dt = F(X),其中X是矢量(4维)和F:R ^ 4 - > R 1 4。 F称为vectorDE_total_function,我尝试使用RK-4计算解决方案。

def solvingDES():
    previous_vector = np.array ([theta_1, omega_1, theta_2, omega_2]);
    for current_time in time:
        temp_vector = previous_vector;
        RK_vector = np.array([0.0,0.0,0.0,0.0]);
        for c in [6,3,3,6]:
            RK_vector = vectorDE_total_function(previous_vector + c * RK_vector/6) * time_step;
            temp_vector += RK_vector / c;
        previous_vector = temp_vector;
        current_time += 1;

看起来我在某处错了,但我不知道在哪里。这看起来合法吗?

1 个答案:

答案 0 :(得分:1)

实现它是一种奇怪的,很少见的方式,它只适用于经典的RK4,其他Runge-Kutta方法不会那样工作。但总的想法似乎是正确的。

您在通常意想不到的地方遇到常见错误。设置

temp_vector = previous_vector;

以后

previous_vector = temp_vector;

您不复制矢量,但要使两个对象引用共享相同的矢量。使用

temp_vector = previous_vector.copy();

previous_vector = temp_vector[:];

强制复制矢量数据。