电磁学小论文 —— 带电粒子在电磁场中运动的计算机模拟程序的简单实现 PB17000002 古宜民 2018年6月
摘要 以静电磁场基本方程:库伦定律、叠加原理和毕奥—萨伐 尔定律为基础,不考虑相对论效应等其他因素,使用Python 语言对带电粒子在静电磁场中运动轨迹进行模拟并可视化, 即实现一个简易的物理引擎,并使用实际物理模型进行验 证。
电磁场基本方程
电磁场基本方程 磁荷理论:该理论认为磁场与电场类似,由“磁荷”产生。该理论虽然被证明是不正确的,但在一些模拟任务中可以简化模型并获得直观的、较好的效果。
计算方法:欧拉法 Example:
计算方法:龙格—库塔法 Example:
程序:介绍 程序使用Python语言编写,分为两个文件:计算的calc.py和可视化的plot.py,calc计算 结果输出到文件,plot读取文件并绘图。其中calc部分只用到了Python自带的数学库等 库,而plot部分使用了matplotlib和moviepy等高级的库。为提高效率,calc.py使用PyPy 运行,效率可获得16倍左右的提升,而plot.py使用默认的Python3解释器运行。 运行系统:Debian GNU/Linux 9 (stretch) 64-bit 由于使用Python,只要安装了对应的库,程序在各主流操作系统上都能正常运行。 以下所有示例的运行时间等信息均在以下测试环境下得到。 系统配置:Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
程序:功能 该程序可以在输入空间电、磁场分布及粒子的初位置、速度等信息后对单个 粒子或多个粒子的运动轨迹进行模拟,并将结果以mp4视频的形式呈现出来。 模拟过程可以选择使用欧拉法或龙格—库塔法模拟、使用纯电场或考虑电磁 场、是否考虑重力场、是否考虑粒子间相互作用,也可以自定义步长、模拟 时间、可视化形式,只需要30行左右代码就可以完成对一个完整模型的模拟 及可视化全过程。程序不考虑相对论效应,仅在经典电磁学范围内模拟;也 不对用户给出的电、磁场函数进行高斯定理、环路定理的检验,支持电流元 IdL产生磁场的模拟但该功能还不完善,并未展示。
程序:流程 编写模型代码->迭代计算->输出到文件->作图 || V 计算每个粒子位置处电磁场->计算该时刻每个粒子受力(加速度)->更新每个粒子的位置 | v 更新每个粒子的速度 \ / \ -------------------/ | v 使用龙格—库塔法要计算多次
程序:代码概览—龙格库塔法代码 Full code at https://github.com/ustcpetergu/USTCcomputer/tree/master/EM/code
程序:代码概览—计算磁场 Full code at https://github.com/ustcpetergu/USTCcomputer/tree/master/EM/code
程序:代码概览—计算电场 Full code at https://github.com/ustcpetergu/USTCcomputer/tree/master/EM/code
程序:代码概览—一次模型模拟所用代码 Full code at https://github.com/ustcpetergu/USTCcomputer/tree/master/EM/code
程序:可视化 读入计算生成的数据,使用matplotlib模块进行3D作图,再使用moviepy模块生成mp4视频或gif动图。生成15秒、24帧每秒的mp4视频所需时间约15秒。 调用库: import math import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d from moviepy.video.io.bindings import mplfig_to_npimage import moviepy.editor as mpy import datetime import copy Full code at https://github.com/ustcpetergu/USTCcomputer/tree/master/EM/code
模拟结果 模型一:点电荷电场中的匀速圆周运动 最简单的电磁学模型之一,即一个负电荷绕一个固定正电荷做匀速圆周运动。模拟的时间范围为0到15000秒,速度理论上不变,实际从1.0000m/s变为0.9991m/s,但考虑到步长取值为0.01s,是一个相对而言很大的值,这个误差还是很令人满意的。程序共迭代了约1.5e6次,用时约4.1秒
模拟结果 模型二:匀强磁场中的等距螺旋线运动 一个简单的磁场模型,即粒子在匀强磁场中做等距螺旋线运动,洛伦兹力不做功,能量守恒。该模型以0.002s为步长,模拟约30秒时间内的运动,程序运行用时0.13秒左右。运行中粒子的速度恒为1.41421m/s未发生变化,可见模拟精度是比较高的。
模拟结果 模型三:地磁场束缚带电粒子(磁镜效应) 地磁场的磁镜效应束缚粒子的模拟,使用两个异号磁荷产生的磁场代表地磁场。从模拟结果可见,虽然是使用磁荷这个不够严格的模型进行模拟,但由于运动的粒子离磁荷较远,磁荷模型适用较好,结果还是与事实很相符的。如图可见粒子在“地球”(未画出)周围在南北极间来回运动但被约束在离中心一定距离的层中,并朝一个方向“进动”,而小范围内粒子还做螺旋运动,均与事实相符。视频中还可以看到粒子在“赤道”处速度较快且螺旋运动不太明显,而在靠近南北极处震荡剧烈,这是极光的产生原因。粒子速度仅有10^{-5}量级的误差。
不足与改进 理论方面的不足 目前模拟完全不考虑相对论效应以及运动的粒子产生的其他效应,仅仅在经典电磁学方面能够适用,有一定局限性。并且模拟中电磁场可随意给出,不能确定满足高斯定理、环路定理,也有一定缺陷,但可以通过手工检查电磁场函数形式而避免。
不足与改进 计算方法的改进 四阶龙格—库塔法在模拟中表现很好,但考虑到电磁场中运动的性质,如果能使用自适应步长的龙格—库塔法,期望可以有更好的结果。并且目前模型不支持对粒子间相互作用进行龙格—库塔模拟,这是可以改进的一点。而对电流元产生磁场的模拟也不是很理想,因为对于可能出现的粒子离电流元很近时分母接近0的情况目前未能解决。 目前粒子均为点电荷模型,故不能处理可能的粒子碰撞,尤其是正负电荷碰撞的问题,如果能够完善碰撞检测与处理,则能够使得模型的健壮性更强、适用范围更广,成为一个更完善的物理引擎。 目前只是prototype
不足与改进 计算效率的优化 由于Python作图方便、代码简介,本模拟器使用Python语言实现,但Python运行效率低是众所周知,所以如果使用如C++、Java等语言移植计算部分,将获得进一步运行效率提升。 并且本模拟器以实现功能为重,并未对可能优化的代码部分,如向量计算、迭代计算等部分进行优化,所以提升空间还是很大的。
不足与改进 可视化以及用户界面的改进 本模拟器使用moviepy模块生成视频,目前没有移动视角、缩放等交互式功能,可以考虑使用Unity等高级引擎辅助。 目前模拟器如果想对模型进行模拟,只能通过添加代码、甚至修改代码实现,没有交互式添加粒子、添加电磁场、设定参数的功能,不易于使用,这也是可以改进的一点。
The end thanks