让我们考虑我有一个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;
看起来我在某处错了,但我不知道在哪里。这看起来合法吗?
答案 0 :(得分:1)
实现它是一种奇怪的,很少见的方式,它只适用于经典的RK4,其他Runge-Kutta方法不会那样工作。但总的想法似乎是正确的。
您在通常意想不到的地方遇到常见错误。设置
temp_vector = previous_vector;
以后
previous_vector = temp_vector;
您不复制矢量,但要使两个对象引用共享相同的矢量。使用
temp_vector = previous_vector.copy();
或
previous_vector = temp_vector[:];
强制复制矢量数据。