如何将带电粒子扔到矢量场中?

问题描述 投票:0回答:1

我正在尝试研究势场内带电粒子的动力学。我尝试像这样定义一个虚拟势:

x = np.linspace(-20, 20, 10)
y = np.linspace(-20, 20, 10)
z = np.linspace(0, 10, 10)
X, Y, Z = np.meshgrid(x, y, z)
V = X**2 + Y**2 + Z**2

我使用梯度函数来获得每个点的电场。

Ex, Ey, Ez = np.gradient(V)

这给了我一个 (10,10,10) 3d 数组。现在,当我研究这个矢量场中具有一定质量的粒子的运动时,问题就出现了。

比如我的力是这样定义的:

f_e[i][0] = -Q * Ex_at_r  # Ex but at that r_x value particle is currently
f_e[i][1] = -Q * Ey_at_r
f_e[i][2] = -Q * Ez_at_r

当涉及到像重力这样的力时,你不需要担心这一切,我可以只拥有一个像这样的一维数组

f_g = np.array([0,0,-g])
,然后就可以了,但是我的 f_e 随着粒子的移动而变化。我已经尝试过像这样定义 f_e ,
f_e_x = -Q*r[i][0] # X_component of position vector for ith iteration
,这种方法是有效的,但这仍然与向量场和其中抛出的电荷不同。 有没有标准的方法来解决这个问题?

python matplotlib math physics meshgrid
1个回答
0
投票

这是一个有趣的问题,但我不确定你的方法是否能找到解决方案。

这是一个常微分方程 (ODE),其中任何时候粒子的位置都取决于其加速度和速度(以及之前的位置)。

通过考虑 10x10x10 网格,您将强制身体仅位于 1000 个离散位置之一。您真正想要的是找出身体在时间 t 的位置,而不将其位置限制为仅具有 1000 个离散值之一。

一般来说,没有精确解,可以使用 ODE 求解器找到解析近似值。您需要将 E 字段重写为函数。

例如,参见 https://pythonnumericalmethods.berkeley.edu/notebooks/chapter22.06-Python-ODE-Solvers.html

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.