【问题标题】:Getting started on modeling magnetic field lines in C++开始在 C++ 中建模磁场线
【发布时间】:2012-04-10 20:19:52
【问题描述】:

我正在做一个使用 C++ 创建磁场线的项目。我使用过 C++ 的计算部分(并不真正关心设计或任何太花哨的东西),但我在创建磁场线时遇到了麻烦。我不确定如何对涉及交叉产品的东西进行建模

洛伦兹力方程:F = q(v x B)

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

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

【问题讨论】:

    标签: physics


    【解决方案1】:

    我会这样开始:

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

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

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

    F = q(v x B)

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

    希望这是一个好的开始。 (我不会详细介绍 RK 方法,因为你提到你对计算部分很熟悉,如果你不熟悉它,它很受欢迎,所以你在谷歌上搜索应该没有问题)

    【讨论】:

      【解决方案2】:

      正如 GuyGreer 所建议的那样,您可以从源头开始,然后沿着田地到达水槽。场线在每个点都遵循场矢量,因此理想情况下,您不仅要考虑该点的场方向,还要考虑场的梯度;否则你将需要更多的点来获得准确的线。

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

      您提到了交叉产品。如果可以得到一个场向量在某一点上的值作为一个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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-19
        • 2021-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多