首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >四阶Runge-Kutta

四阶Runge-Kutta
EN

Stack Overflow用户
提问于 2016-12-11 02:41:53
回答 1查看 534关注 0票数 1

假设我有一个4 ODE: dX/dt = F(X)的系统,其中X是一个向量(4维),F: R^4 -> R^4,F称为vectorDE_total_function,我试图用RK-4来计算解。

代码语言:javascript
运行
复制
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;

看上去我错了,但我不知道在哪里。看起来是合法的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-11 08:47:01

这是一种奇怪的、很少被发现的实现方法,它只适用于经典的RK4,其他Runge方法不会那样工作。但总体观点似乎是正确的。

在通常意想不到的地方,您有一个常见的错误。设置

代码语言:javascript
运行
复制
temp_vector = previous_vector;

以及以后的

代码语言:javascript
运行
复制
previous_vector = temp_vector;

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

代码语言:javascript
运行
复制
temp_vector = previous_vector.copy();

代码语言:javascript
运行
复制
previous_vector = temp_vector[:];

强制复制矢量数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41082455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档