开始使用C ++建模磁场线

时间:2012-04-10 20:19:53

标签: physics

我正在使用C ++创建一个关于创建磁场线的项目。我曾经使用过C ++的计算部分(并不真正关心设计或任何过于花哨的东西),但是我在制作磁场线时遇到了“起飞”的麻烦。我不确定如何模拟涉及跨产品的东西

Lorenz force eqn:F = q(v x B)

我已经研究过可能的方法,例如改变半径相对于场的步长,但我也觉得我需要找到一种方法来改变场出现的角度。

我只想模拟一个简单的偶极磁铁。我会使用C ++生成点,然后将它们保存为txt文件并使用gnu plot绘制它们。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我会这样开始:

对于您想要创建的每个场线,从一个极点附近的电荷(比如电子)开始,然后求解微分方程的初始值系统(比如Runge-Kutta),直到到达另一个极点。这是一行。

重复使用不同的起点(靠近一极)。

我所说的方程的初值系统是:

F = q( v x B

d v / dt =(q / m)( v x B

希望这是一个好的开始。 (我不会详细介绍RK方法,因为你提到你熟悉计算部分,如果你不熟悉它,它很受欢迎,所以你可以毫不费力地搜索它)。

答案 1 :(得分:0)

正如盖伊格雷尔所建议的那样,你可以从一个来源开始,然后跟随该领域前往水槽。场线在每个点跟随场的矢量,因此理想情况下,您不仅要考虑该点处场的方向,还要考虑场的梯度;否则你需要更多的积分才能获得准确的线条。

另一种方法是从源到水槽绘制一条直线,并沿其长度移动,检查场矢量是否与场线对齐。如果不是,则将线分成两段并移动中心点;实际上,您正在移动线以查找场线,并添加更多线段以使其更加摆动。理想情况下使用样条曲线或其他曲线。

你提到跨产品。如果你可以在一个点上获得一个字段向量的值作为一个3d向量,那么它与另一个向量的交叉乘积只是一个交叉乘积的标准定义:

// given vectors a and b with properties x, y and z representing the components
cross.x = a.y * b.z - a.z * b.y;
cross.y = a.z * b.x - a.x * b.z;
cross.z = a.x * b.y - a.y * b.z;