问题标签 [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 回答
919 浏览

matlab - Matlab中Runge-Kutta延拓法的运动方程

  • 运动方程由下式给出:

方程 , 其中 m, b 是质量和阻尼的固定值。时变项 f(t) 是激励功率,q(t) 是广义位移。

  • 我解决了这个问题:

在此处输入图像描述

在此处输入图像描述

  • 我应该通过 [t,x]=ode23('rightside',tspan,x0) 在 MatLab 中求解。
  • f(t) 和 k(t) 我通过傅里叶级数求解复数,就像在 Matlab 中那样:

f(t) 的 % 复数傅立叶级数

k(t) 的 % 复数傅立叶级数

  • 我们知道:

谢谢你。

  • 它应该是类似的原则:

  • 和:

  • 但我不知道如何到达那里 f(t) 和 k(t)。
0 投票
3 回答
373 浏览

python - 如何将函数传递给 Python 中的函数?

我是 Python 的初学者/中级者。我已经将一个四阶龙格-库塔方法 (RK4)编码到 Python 中。它基本上是在解决一个钟摆,但这不是重点。

我想通过以下方式改进 RK4 方法:我希望能够将函数 f 直接传递给 RK4 函数,即 RK4(y_0, n, h) 应该变为 RK4(f,y_0,n,h)。这将具有很大的优势,我可以将 RK4 用于描述其他系统的其他 f 函数,而不仅仅是这个钟摆。

我只是将简单的函数传递给 RK4,但我做错了。我如何在 Python 中做到这一点?

0 投票
1 回答
1672 浏览

matlab - 使用龙格库塔求解贝塞尔函数

我正在为我的一个班级做作业,我应该使用我选择的程序(我选择 Matlab)编写代码,以使用四阶龙格-库塔方法求解贝塞尔函数微分方程。作为参考,贝塞尔函数 DE 是:

x^2*(J_n)''+x*(J_n)'+(x^2-n^2)*J_n=0。

我可以通过以下方式将其分成两个耦合的一阶 DE:

(J_n)'=Z_n 和

(Z_n)'+(1/x)*Z_n+[(x^2-n^2)/x^2]*J_n=0。

在此任务之前,我没有使用 Matlab 或任何其他编程语言的经验。我知道 Matlab 有“ode45”命令,但我应该自己编写代码,而不是依赖于 Matlab 的命令。到目前为止,我一直在研究 Bessel 函数的 n=0 情况,但是当我尝试绘制函数时,我一直收到错误消息。我说的当前错误是:“'double' 类型的输入参数的未定义函数或方法 'J'。” 但我不知道如何解决这个错误,也不知道我的代码是否正确。有人可以告诉我哪里出了问题或者编写此代码的正确方法是什么?

提前感谢您的帮助

0 投票
3 回答
6988 浏览

python - Runge-Kutta RK4 不比 Verlet 好?

我只是在游戏中测试几种轨道动力学的集成方案。我在这里采用了恒定和自适应步骤的 RK4 http://www.physics.buffalo.edu/phy410-505/2011/topic2/app1/index.html

我将它与简单的verlet集成(和欧拉,但它的性能非常差)进行了比较。看起来恒定步长的RK4并不比verlet好。具有自适应步长的 RK4 更好,但不是很多。我想知道我是不是做错了什么?或者说 RK4 比 verlet 优越得多是什么意思?

认为 Force 每 RK4 步骤评估 4 次,但每个 verlet 步骤仅评估 1 次。因此,为了获得相同的性能,我可以将 verlet 的 time_step 设置为小 4 倍。使用 4 倍更小的时间步长,verlet 比具有恒定步长的 RK4 更精确,并且几乎可以与具有附加步长的 RK4 相媲美。

见图片: https ://lh4.googleusercontent.com/-I4wWQYV6o4g/UW5pK93WPVI/AAAAAAAAA7I/PHSsp2nEjx0/s800/kepler.png

10T 表示 10 个轨道周期,后面的数字 48968,7920,48966 是需要的力评估数

python代码(使用pylab)如下:

0 投票
2 回答
12573 浏览

matlab - 四阶龙格-库塔方法 (RK4) 在几次迭代后崩溃

我正在尝试解决:

使用四阶龙格-库塔算法。

起点:x(0) = 8000, y(0) = 300范围:[0,15]

这是完整的功能:

我通过执行来运行它:[xx yy time] = rk4_m(8000,300,10)

问题是在 2-3 次迭代后一切都崩溃了,返回了无用的结果。我究竟做错了什么?或者只是这种方法不适合这种方程?

分号被有意省略。


看起来我没有注意实际h大小。现在可以了!谢谢!

0 投票
1 回答
323 浏览

python - python中用于解决SHM的Runge-Kutta 4算法中可能的错误来源是什么

我在 python 中编写了一个简单的 RK4 程序来求解 SHM 方程:

通过写作:

以下是 RK4 代码:

结果图几乎呈正弦曲线,但值超出 -1 和 1 的量很小。

为什么值yz超出范围[-1,1]?是否有任何type-casting错误正在传播?

0 投票
3 回答
1534 浏览

c - 在 C 中使用 Runge Kutta 求解二阶 PDE 系统

我有一个使用 Runge Kutta 算法求解微分方程组的问题。到目前为止,我已经将二阶 PDE 重写为一组两个耦合方程,其中

是两个方程,A、B、C 和 D 是常数。为了获得下一步的值,我对每个时间步 dt 进行如下操作:

我使用当前时间步的 L1 和 L2 的值并迭代计算系数。

结果,我通过在最后对系数求和和加权得到 L1 和 L2。我的问题是,整个算法在 4 个时间步后变得不稳定。

有人知道实现在技术上是否正确吗?谢谢!

0 投票
2 回答
808 浏览

c++ - C++ 中的 Runge-Kutta (RK4) 导数

您好,我在 C++ 中创建了一个小型运动模拟。我想向学生展示欧拉法、龙格-库塔法和中点法之间的差异。

但是当我切换到 Rungy-Kutta 模式时,我在某个地方犯了一个错误,所有材料点都消失了。我犯的错误是在solveRK4 方法中。附件中的 MinGW Developer Studio 项目,还有库文件夹放入 mingw 编译器目录。: http ://speedy.sh/CvDHj/LABO3.zip

当您按下“R”按钮时,当“E”到欧拉时,当“M”到中点时,它会切换到 RK4。

问题是我在solveRK4函数中哪里出错了?

结果(发布)如下所示:http://speedy.sh/h28VP/zad3.exe按 R 键会从屏幕上消失。

Punkt - Point Wektor - 矢量图

主要的:

结构:

0 投票
2 回答
379 浏览

vba - Subscript out of range in Runge Kutta method

I am programming the Runge Kutta method with adaptive step size in VBA and I have encountered an Error 9 "Subscript out of range". Can someone please help me figure out why and how to fix it?

I am attaching the three separate sub routines I was required to write as well as the beginning of the macro that runs all three programs.

0 投票
2 回答
6494 浏览

python - 为什么我的四阶 Runge-Kutta 方法的实现不起作用?

在这个网站和我的参考书上搜索后,我发现我不知道为什么我的代码不起作用。

正如我的教授在课堂上向我们展示的那样,我为质量弹簧系统(具有摊销)做了一个四阶 Runge-Kutta 实现。但是,如您所见,生成的图形非常奇怪。示例图像

我最终写的代码是这样的:

这是由 main.py 文件导入的,该文件仅包含程序的 GUI 和绘图部分,并且该函数是在课堂上推导出来的,所以我相信错误出在 Runge-Kutta 本身。(可能是我搞砸了一些愚蠢的事情。)

我尝试在“xn”和“vn”中切换 K,在 f() 中强制“F”和“c”值,重写所有内容并手动编写每个 K 的每个元素(如 K11、K12、K21 ,等等),但它只给出指数结果。此外,将 f() 的返回切换为 numpy 数组并没有任何帮助。

我发现了一些关于RK4方法的问题,但是我无法解决这个问题,也不明白哪里出了问题。我对这个方法有一些了解,但这实际上是我第一次实现它,所以请大家帮忙。

如果重要的话,我正在为 python3 使用 Anaconda 发行版。