【问题标题】:2nd order ODE using Runge-Kutta method in C在 C 中使用 Runge-Kutta 方法的二阶 ODE
【发布时间】:2017-05-27 14:06:02
【问题描述】:

我想使用一组二阶方程来模拟粒子的运动 方程是

d2x/dt2 = 1 + dy/dt + dz/dt 
d2y/dt2 = 1 + dx/dt + dz/dt 
d2z/dt2 = 1 + dx/dt + dy/dt

矢量V(dx/dt dy/dt dz/dt)X(x y z)V = [0 0 0], X = [0 0 0] 最初

我在 C 代码中实现了以下 ODE 之一 代码;

double X_function(double a[], double t, double at[],double b[],double c[]) {
//double yt, zt;
at[0] = a[0];
at[1] = 1 + b[0] + c[0];
double F = at[1];
return F;
}

我需要帮助了解如何在这种情况下使用 R-K

【问题讨论】:

  • 我们不是编码服务。无论如何,这看起来像是一个数学问题,而不是编程问题。那么,这对 C 编程语言有何特殊意义?
  • 代码必须用 C 编写,我只需要帮助理解 R-K 方法如何用于二阶 ODE
  • 正如我所写:这是一个纯数学问题,而不是编程问题。你做了什么来发现自己?一本好的数学书怎么样?
  • 也许Mathematics Stack Exchange 是去的地方,和/或一些谷歌搜索。
  • 好的,谢谢你的建议

标签: c numerical-methods runge-kutta


【解决方案1】:

你有一个方程

x''=F(x,x')

你重写为一阶系统

x' = v
v' = F(x,v)

将此耦合的 6 维系统作为一个函数实现

void derivs(double u[], double t, double du[]) {
    int j,k;
    for(k=0; k<3; k++) {
        du[k] = u[3+k];
        du[3+k] = 1;
        for(j=0;j<3; j++) 
            if(j!=k) du[3+k] += u[j]
    }
}

那么你可以为一阶系统以一般形式实现龙格-库塔方法。

【讨论】:

  • 只是为了更好地理解它,我怎样才能得到这个函数的输出?
  • 输出在du。当您只传递指针时,您在调用 derivs 函数时传递的数组仍将包含调用后的新值。
猜你喜欢
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 2015-11-17
  • 2023-03-06
  • 2023-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多