问题标签 [verlet-integration]

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 回答
53 浏览

python - 尝试进行verlet集成

我已经尝试过调整欧拉方法代码,并且正在使用欧拉来计算第一个值,所以我在 verlet 中使用了两个值,但是当我绘制图形时,我只得到两条垂直的直线。

这是代码:

然后我使用 matplotlib 绘制图表。

0 投票
1 回答
951 浏览

python - 如何实现适用于python中谐波振荡器的速度Verlet积分器?

我是 python 新手,我正在尝试实现一个适用于谐波振荡器的速度 Verlet 积分器。正如您从下面我的笔记本中看到的(取自:http ://hplgit.github.io/prog4comp/doc/pub/._p4c-solarized-Python022.html ),欧拉的方法有效,但verlet 积分器无效。我错过了什么?

0 投票
1 回答
794 浏览

python - N体模拟python

我正在尝试在 python 中编写 N 体模拟代码,并成功地使用越级近似方法成功地生成了一个涉及太阳、地球和木星的系统,如下所示。
太阳、地球、木星系统

但是,当我尝试为 N 个质量相同且速度为零的物体扩展相同的代码时,我没有得到系统形成的预期结果。取而代之的是,在最初相互吸引后身体散开的地方会产生以下情况。 在此处输入图像描述

无论使用多少初始粒子,都会复制相同的模式。

在此处输入图像描述

第二张图片只是第一张图片的放大版,显示他们最初是相互吸引的。

让我相信错误一定在于我的初始条件:

加速度计算:

蛙跳功能:

实际程序功能:

0 投票
1 回答
188 浏览

python - Velocity-Verlet 双井算法 Python

我正在实现双阱电位的 Verlet 算法V(x) = x^4-20x^2,以创建简单的相图。生成的相图具有增强的椭圆形,显然是不正确的。我有一种感觉,我的问题出现在我对 of 的定义中,x^3但我不确定。我还包含了经典谐波振荡器的算法,以表明我的代码可以正常工作。

谢谢!

0 投票
1 回答
39 浏览

c - 使用迭代公式为 C 数组赋值

语境

我想模拟电场中粒子的轨迹。我想要它在每个时间步的位置、速度和加速度。这些变量中的每一个都将存储在一个数组中,因此我可以将其写入文件并稍后绘制。我的问题是我无法修改数组的值,当我打印时,我只会得到在整个数组中重复的初始值。

我的代码

我的问题

打印 r_z、v_z 和 a_z 时,我随时都会得到 1、0、0 和零。我这样做是为了打印数组。

我是 C 新手,指针对我来说仍然很奇怪。我不知道使用它们是否是正确的方法,但是在互联网上查看我认为这是实现我的目的的最佳方法,但我可能错过了一些东西。

0 投票
0 回答
121 浏览

python - 球状星团的 N 体模拟

我正在尝试使用跳跃青蛙方案编写 n 体模拟来模拟球状星团,但是我遇到了粒子从(我认为)接近其他粒子以及这个粒子被抛出系统的问题导致势能大幅增加。我试图编写一些代码来解释碰撞,但如果我也使用软化因子,我不确定要使用什么碰撞半径。

初始位置是在球体内随机生成的,初始速度均为 0。

如果软化因子设置为 0.1 * 生成球体半径,碰撞半径设置为太阳半径(导致没有碰撞)与 N 个太阳质量的天体,我得到以下结果:

50岁以上的身体路径 50 年来的能源变化 50年能量变化百分比

从能量图中,我们可以看到当物体最初彼此靠近时,势能会出现巨大的峰值。随着时间的推移,我的能量逐​​渐减少到 0,它认为只是由于数值计算。

有没有办法阻止这些星星被抛出。我正在尝试研究初始集群形成平衡状态需要多长时间。

球体生成:

程序:

碰撞检测:

0 投票
1 回答
245 浏览

python - Leapfrog 算法用于计算围绕中心体的引力场中的物体轨迹(Python 3.8.2)

我几乎删除了最后一个代码并开始新的。我添加了一个名为 Object 的新类,它替代了名为 body_1 和 body_2 的列表。现在所有的计算都是在 Object 类中完成的。大多数以前存在的问题都是通过这个过程解决的,但仍然存在一个问题。我相信它在 StartVelocity() 函数内部,它创建了启动 Leapfrog 算法所需的 v1/2。这应该给我一个地球静止轨道,但清晰可见,卫星在放大地球后非常迅速地逃逸。 在此处输入图像描述

代码是:

我知道身体 2 的位置必须乘以 1000 才能获得米,但如果我这样做,它只会直线飞行,并且不会有任何引力迹象。

0 投票
1 回答
70 浏览

python-3.x - Python 错误,'int' 对象不可下标

我正在尝试使用 Vertel 算法求解微分方程,但我无法摆脱这个错误。有什么建议么?

在我定义的线上,a我收到错误消息:

任何帮助表示赞赏,谢谢

0 投票
2 回答
437 浏览

c++ - Velocity verlet 算法 - n 体问题的能量增加

问题

我实现了速度 verlet 算法来计算 2 个物体在重力作用下相互作用的轨迹(仅限牛顿重力)。轨道较小的物体质量很小,位于轨道中心的物体质量很大。

理论上,Velocity Verlet 不应该改变系统的总能量(它会振荡,但随着时间的推移,平均值将保持接近初始能量)。

然而在实践中,我观察到能量随着时间的推移而增加。

结果

以下是一些说明问题的结果。所有模拟均以时间步长 dt=0.001 进行。轨道物体的质量为 1000,宇宙的万有引力常数设定为 G=1.0

在所有情况下,较小的身体初始位置是 {0, 0, 1},它的初始速度是 {0, 32, 0}。较大物体的初始速度为{0,0,0}。

案例 1(小体重 = 0.00001)

这是较小的身体的轨迹:

案例1轨迹

这是超过 100k 步的能量。

案例 1 能源

正如我们所见,能量变化不大。小的变化可能是由于计算不准确造成的。

案例 1(小体重 = 0.001)

这是轨道物体的轨迹:

案例2轨迹

这是总能量:

案例 2 能源

正如我们现在所看到的,系统正在获得能量。

案例3(小体重= 1)

这是轨道物体的轨迹:

案例3轨迹

这是总能量:

案例 3 能源

现在我们获得了很多能量。

代码

这是执行所有计算的源代码:

推进积分器的代码:

这是计算作用在物体上的净重力的代码:

下面是实现 norm2() 的代码:

最后,这里是计算先前绘制的结果的代码:

类型Realfloat

我的理论

在数值积分方面,我是初学者(这就是我在这里发布这个问题的原因)。然而,这里有一些关于可能是错误的理论:

  • 当涉及到 n>=2 时,Velocity Verlet 算法存在一些陷阱,我已经陷入其中。
  • 上面的代码中某处存在实现错误,我没有看到。
  • 浮点数计算导致的误差由于大体的小运动而累积。(可能不是这种情况,请参阅下面的编辑。)
  • 在尝试调试这个的过程中,我遇到Energy drift了分子动力学模拟。也许这就是这里发生的事情?

轨道似乎没有分崩离析,但这不是我预期的结果,我想知道为什么。

有人可以帮我解开这个谜吗?

编辑:

我测试了双精度,唯一的变化是现在最小轨道质量的能量更加稳定。

在此处输入图像描述

现在即使对于最小的质量也可以看到增加的趋势。这暗示这不是计算精度的问题。

0 投票
0 回答
251 浏览

python-3.x - 粒子碰撞模拟 Python

我正在尝试创建一个相对简单的粒子模拟,它应该考虑重力、阻力、与其他粒子的碰撞(非弹性碰撞)以及与墙壁的碰撞(完全弹性)。我让重力和阻力部分与速度 Verlet 算法一起工作,但它现在无法将粒子设置为平衡状态。此外,如果我添加多个粒子,它们有时会相互攀爬,这是由于(我相信)它们仍然具有非常小的速度分量,渐近驱动为零。如果粒子的能量变得足够小,我试图切断粒子的速度,但这看起来并不现实。有人可以指出一些如何解决这些问题的建议。我有一个粒子对象:

我使用 Verlet 积分来解释重力和阻力:

在这里我计算碰撞部分: