问题标签 [runge-kutta]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
464 浏览

c - 用 C 语言对 Runge Kutta 中的轨道积分运动微分方程

我正在尝试使用 C 中的四阶 runge-kutta 积分行星轨道的微分方程。我尝试积分的第一个方程是位置,dr/dt = sqrt((2/mu)*(E-( k/r)) - pow(l, 2)/(pow(mu, 2)*pow(r, 2)))。该程序编译正确但不断返回nan,我对C相当陌生,所以我想知道为什么会这样。我正在使用的源代码如下:

我的代码如下:

0 投票
0 回答
167 浏览

matlab - Matlab:ODE45+Shooting Method 似乎不起作用

我正在尝试以数值方式求解三个同时的 ODE 函数:

我正在解决一个分成两半的列,我想绘制 w 对 x1 并有一个正 w (现在似乎不可能的事情)。主要有以下三个功能:

  • first_sec_w:使用 RK4 方法的那个,已经找到了 theta 的初始值(使用 shoot_first 和 shoot_second)。
  • shoot_first:使用 RK4 求解函数的函数,假设 theta 的初始值,直到达到 L0/2 处的 0 边界条件并返回此初始值。
  • shoot_second: 几乎和上面做的一样,但它从 L0 开始,一直到 L0/2。

谁能帮我吗?

我将上传代码,所以这里看起来不会太乱。

RK.zip

0 投票
1 回答
178 浏览

numerical-methods - ODE系统的数值稳定性

我必须对具有以下形式的 ODE 系统进行数值求解:

其中u_j(t)v_j(t)是时间 的复值标量函数tf_ig_i是给定的函数, 和j = -N,..N。这是一个初值问题,任务是在某个时间找到解决方案T

如果,则可以独立求解g_i(t) = h_i(t) = 0不同 值的方程。j在这种情况下,我借助四阶 Runge-Kutta 方法获得了稳定且准确的解。然而,一旦我打开耦合,结果就时间网格步长和函数的显式形式而言变得非常不稳定g_ih_i

我想尝试使用隐式 Runge-Kutta 方案是合理的,在这种情况下它可能是稳定的,但如果我这样做,我将不得不评估一个巨大的 size 矩阵的逆矩阵4*N*c,其中c取决于顺序每个步骤的方法(例如c = 3,对于 Gauss-Legendre 方法)。当然,该矩阵将主要包含零并具有块三对角形式,但它似乎仍然非常耗时。

所以我有两个问题:

  1. g_i有没有一种稳定的显式方法,即使在耦合函数h_i(非常)大的情况下也能工作?

  2. 如果隐式方法确实是一个很好的解决方案,那么最快的块三对角矩阵求逆方法是什么?目前我只是执行一个简单的高斯方法,避免由于矩阵的特定结构而出现的冗余操作。

可能对我们有帮助的其他信息和详细信息:

  • 我使用 Fortran 95。

  • 我目前考虑g_1(t) = h_1(t) = g_2(t) = h_2(t) = -iAF(t)sin(omega*t),其中i是虚数单位,A并且omega给定常数,并且F(t)是一个平滑的包络线,首先从 0 到 1,然后从 1 到 0,所以F(0) = F(T) = 0

  • 最初u_j = v_j = 0除非j = 0. 绝对值很大的函数u_j和对所有 来说都非常小,因此初始峰值不会到达“边界”。v_jjt

0 投票
1 回答
845 浏览

python - 使用 Runge-Kutta 4 计算卫星位置

我的问题与 Runge-Kutta 4 (RK4) 方法和轨道卫星状态向量所需的正确迭代步骤有关。以下代码(在 Python 中)根据此链接(http://www.navipedia.net/index.php/GLONASS_Satellite_Coordinates_Computation)的描述描述了运动:

还有更多代码,但是我想限制我现在展示的内容,因为这是我最感兴趣解决的中间步骤。基本上,对于那些熟悉状态向量并使用 RK4 的人来说,您可以看到在中间步骤中更新了位置和速度,但没有更新加速度。我的问题与更新加速度所需的计算有关。它会开始:

...但究竟发生了什么还不是很清楚。欢迎任何建议。

以下是完整代码:

0 投票
1 回答
422 浏览

python - 如何在 Python 中根据其参数之一绘制已定义的函数

我只是想将 x0 = 1.0, t0 = 0.0 的 Rk4 函数绘制为 dt 的函数。我尝试通过对函数进行矢量化并为时间步长 dt 创建一个数组,但得到错误“ValueError: setting an array element with a sequence”。

0 投票
1 回答
381 浏览

python - 不同时间步长的龙格-库塔四阶误差近似

当我运行代码时,它会产生一个带有尖峰的锯齿状图,在许多 dt 值处产生零误差,中间有正误差。(抱歉,我无法嵌入图表的图像)。这些大尖峰不应该发生,因为随着时间步长 dt 的减小,误差应该会持续减小。但是,我不确定如何解决这个问题,也不知道错误是从哪里引起的。我尝试通过添加 while 循环来消除尖峰,希望它只在 dt 处的误差大于 dt+delta 处的误差时向我的 dtime 数组添加点,但它会产生完全相同的图表。

0 投票
1 回答
46 浏览

python - if 语句范围内的值不打印(Python 中的 Runge-Kutta 四阶)

我正在编写代码来执行具有自适应步长的四阶龙格-库塔数值逼近。

但是,当我运行代码时,它会打印:

因此,两种情况下的误差 E 都小于 10^-5,但它不会打印 x(1)。

0 投票
3 回答
57 浏览

matlab - MATLAB 如何在整个区间上绘制我的 Runge-Kutta4 ODE 解

我使用 Runge-Kutta4 为 ODE 解决方案编写了这段代码:

f是函数y' = f(x,y)y0是初始值,x0是函数开始的地方,h子区间,x_final是函数停止的地方。

我尝试了我的代码,它为我正确地解决了 ODE,但我也想在 xy 轴上绘制我的函数到子间隔x0x_final区间h。当我尝试使用它来绘制它时,plot(x0:h:x_final,y)我只得到一个空图。我知道(猜测)我必须将我的绑定y到几个x才能进行绘图,但是我怎样才能在不过多更改代码的情况下做到这一点?

如何绘制ygiven y0、 interval x0tox_final和 given的图表h

MATLAB新手,感谢我能得到的所有帮助!

编辑:明确我的代码的用途;

我需要这个 ODE 求解器来解决和绘图。我应该通过查看yon的h值来研究截断误差,并通过查看不同2*h的图表来研究 Runge-Kutta4 的稳定性。 yh

0 投票
1 回答
469 浏览

numerical-methods - Numerical method runge kutta

Solve the differential equation. dy/dx=xz+1, dz/dx=-xy for x=0.3 given that y=0 and z=1 when x=0 using runge kutta method of order four. I am unable to start this problem. Please help. I require mathematical solution using numerical analysis not the programming one.

0 投票
0 回答
210 浏览

matlab - 为什么我在 Matlab 中的 Lotka-Volterra 时间序列图中没有出现振荡?

我正在尝试使用耦合的 DE 对 Lotka-Volterra Predator-Prey 系统进行建模:

dy(1)/dt = rx(1-x/k) - ay(1)y(2) % 猎物种群

dy(2)/dt = aby(1)y(2) - dy(2) % 捕食者种群

这是我的代码:

如何更改我的代码以使时间序列图(y(1) 与时间)显示振荡,而不是稳定状态?在集成步骤中似乎出了点问题,因为这些图的结构是我想要的,但函数的行为不是我所期望的。

稳态时间序列图

稳态时间序列图

相图达到平衡

相图达到平衡