问题标签 [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.
c++ - 龙格库塔方法圆周运动
我被要求解决这个微分方程:
(x,y,vx,vy)'=(vx,vy,vy,-vx)
它应该返回一个带有2*pi
周期的圆周运动。我实现了这个功能:
其中_alpha
等于0
。现在,这适用于欧拉方法:如果我将此 ODE 积分为2 * pi * 10
,给定初始条件(1, 0, 0, -1)
,并具有一定的0.003
精度,我得到的位置与(1, 0)
的范围内相当1 ± 0.1
,正如我们所期望的那样。但是,如果我将相同的 ODE 与 Runge Kutta 的方法(0.003
精确到2 * pi * 10
几秒钟)集成,实现如下:
对于四阶龙格库塔方法,该程序返回一个近似x
等于的位置,当理论上精度应该是,大约。我检查并发现 Runge_Kutta 的时期似乎几乎是一式四份(因为在一段时间内,从到),但我不明白为什么。这是我的主要内容:0.39
1E-6
2 * pi
x
1
0.48
先感谢您。
python - 绘图python显示空值
我正在尝试绘制一个 runge kutta 方程,但它显示一个空值。我在逻辑上哪里出错了?
也许我尝试简化一点
我试过运行上面的简化脚本,它为打印提供了价值,但它只是不会出现在情节中。所以这个问题最终可能与 runge kutta 无关,只是绘图中的一些逻辑。对于那个很抱歉。
performance - 来自 Skyfield 的轨道与太阳系重力场的整合 - 速度问题
在下面显示的时间测试中,我发现Skyfield需要几百微秒到一毫秒才能返回obj.at(jd).position.km
单个时间值jd
,但较长对象(时间点列表)的增量成本JulianDate
仅为每点大约 1 微秒. 我使用Jplephem和两种不同的星历表看到了相似的速度。
我的问题是:如果我想随机访问时间点,例如作为使用自己的变量步长的外部 Runge-Kutta 例程的奴隶,有没有办法可以在 python 中更快地做到这一点(无需学习编译代码)?
我知道这根本不是 Skyfield 的典型使用方式。通常我们会加载一个JulianDate
包含一长串时间点的对象,然后一次计算它们,并且可能会像轨道积分器那样做几次,而不是数千次(或更多)。
解决方法:我可以想象一种解决方法,我NumPy
通过使用具有精细时间粒度的对象运行 Skyfield 一次来构建自己的数据库JulianDate
,然后编写我自己的 Runge-Kutta 例程,该例程通过离散量上下改变步长,这样时间步长总是直接对应 NumPy 数组的跨步。
或者我什至可以尝试重新插值。我没有进行高度精确的计算,所以简单的 NumPy 或 SciPy 2 阶可能没问题。
最终我想尝试在太阳系重力场的影响下整合物体的路径(例如深空卫星、彗星、小行星)。在寻找轨道解决方案时,可能会在 6D 相空间中尝试数百万个起始状态向量。我知道我应该使用ob.at(jd).observe(large_body).position.km
方法之类的东西,因为重力像其他一切事物一样以光速传播。这似乎花费了大量时间,因为(我猜)它是一个迭代计算(“让我们看看......木星会在哪里让我现在感觉到它的引力”)。但是,让我们一次剥一层宇宙洋葱。
图 1.我的笔记本电脑上针对 de405 和 de421 的不同长度JulianDate
对象的 Skyfield 和 JPLephem 性能。它们都差不多——(非常)第一个点大约是半毫秒,每个附加点大约是一微秒。此外,脚本运行时要计算的第一个点len(jd) = 1
(地球(蓝色),带有)还有一个额外的毫秒伪影。
地球和月球较慢,因为它是内部的两步计算(地球-月球质心加上围绕质心的各个轨道)。水星可能更慢,因为它与星历时间步长相比移动得如此之快,以至于它在(昂贵的)切比雪夫插值中需要更多的系数?
SKYFIELD DATA 脚本 JPLephem 脚本位于更下方
JPLEPHEM 数据 的脚本 Skyfield 脚本在上面
matlab - 如何实现 newton-raphson 来计算隐式 runge kutta 的 k(i) 系数?
我正在尝试使用 fdm_2nd 和高斯屠夫系数实现 RK 隐式 2 阶对流扩散方程 (1D): 'u_t = -uu_x + nu .u_xx' 。
我的目标是比较显式与隐式方案。显式 rk 在少量粘度下效果很好。显式方案的曲线向我们展示了一个非常好的冲击波。
我需要您的帮助来正确实现 k(i) 系数的求解器。我看不到如何为所有 k(i) 实现牛顿法。我是否需要为所有时空步骤实施它?还是及时?雅可比可能是错的,但我不知道在哪里。或者,也许我在错误的方向使用雅可比......
实际上,我的代码有效,但我认为它在某个地方是错误的......而且隐式曲线也不会从初始值移动。
这是我的功能:
雅可比人:
这是我的牛顿代码:
python - 钟摆集成。溢出。Python
我编写了一个使用四阶龙格-库塔积分计算钟摆的速度和力的代码,不幸的是我无法运行它,因为我收到了这个错误:
我不确定我错过了什么或我的错误是什么。任何想法都会有所帮助。谢谢!
这是我的代码:
python - Runge-Kutta 的 Python 代码 (GLONASS Ephemeris)
我正在寻找有关如何使用 Runge-Kutta 4 技术推断 GLONASS 卫星的解释。我的问题基本上是关于如何通过将输入应用于函数来从 K1 跳到 K2 步骤及以后。我无法确切地弄清楚该功能应该是什么。这是我的代码:
有很多关于如何推断 GPS 卫星的文献,但不幸的是,GLONASS 似乎更加有限。欢迎所有反馈。
c - Runge Kutta 评估不适用于 1 以外的步长
我一直在将 4 个链接微分方程的欧拉方法实现转换为四阶龙格库塔实现。我有理由确定我的一般方法是正确的,并且我已经了解如何应用 RK4,但是我可能已经有 6 年没有做过任何半认真的数学了,所以我可能会遗漏一些东西。当我使用步长 1 时,我的 RK4 计算给出了合理的输出,但如果我使用任何其他步长,我的计算很快就会崩溃到零。我希望有一双新的眼睛能够迅速发现我做错了什么。请不要发布完整的解决方案——我更喜欢指出我可能犯的错误——无论是代码还是对 RK4 的理解,因为我希望自己能够理解这一点。
所以这是我的欧拉实现。效果很好
这是我的 RK4 实现
python - 4 阶 Runga Kutta 方法 - 扩散方程 - 图像分析
这是速度问题。我正在尝试求解具有三种行为状态的扩散方程,其中:
- Lambda == 0 平衡
- Lambda > 0 最大扩散
- Lambda < 0 分钟扩散
瓶颈是扩散算子函数中的 else 语句
平衡态有一个简单的 T 算子和扩散算子。对于其他两个州来说,情况变得相当复杂。到目前为止,我还没有耐心等待代码运行时间。据我所知,方程是正确的,平衡状态的输出看起来是正确的,也许有人有一些技巧可以提高非平衡状态的速度?
(我想欧拉解决方案(FTCS)而不是龙格库塔会更快。还没有尝试过。)
您可以导入任何黑白图像来试用代码。
简而言之,f_out_equil 的计算速度相对较快,而 min 和 max 的情况既昂贵又缓慢。
这是我一直在使用的图像的链接:http: //4.bp.blogspot.com/_KbtOtXslVZE/SweZiZWllzI/AAAAAAAAAIg/i9wc-yfdW78/s200/Zebra_Black_and_White_by_Jenvanw.jpg
改进我的编码的提示表示赞赏,非常感谢,
这是输出的快速绘图脚本