python - 四阶龙格-库塔

标签 python numpy numerical-methods runge-kutta

假设我有一个 4 ODE 系统:dX/dt = F(X),其中 X 是向量(4 维),F:R^4 -> R^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;

看起来我在某个地方错了,但我不确定在哪里。看起来合法吗?

最佳答案

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

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

temp_vector = previous_vector;

及以后

previous_vector = temp_vector;

您不复制向量,而是使两个对象引用共享相同的向量。使用

temp_vector = previous_vector.copy();

previous_vector = temp_vector[:];

强制复制矢量数据。

关于python - 四阶龙格-库塔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41082455/

相关文章:

多维优化/寻根/某物的算法

python - 如何将 urllib.request 添加到 Herokurequirements.txt 文件?

python - 嵌套 for 循环的更多 Pythonic 方式

python - Selenium Python : Expected "handle" to be a string, 得到 [object Undefined] 未定义

python - 为什么我的 CNN 的准确性不可重现?

python - 将 Numpy 数组提供给 CNTK LSTM 模型

javascript - 如何从获取响应中获取gif

python - 导入SWIG+python模块报错"undefined symbol"

julia - 在 julia 中有效地求解特定的线性系统

c++ - log(1+x) 是 log1p 就像 log(1-x) 是?