之前写的玩意 想着给家里小孩做的 发从来顺便加了C++ CUDA 硬件加速
这是一个带正电荷的质点,你可以设置它的一些基本属性,包括:
- 质量。它可以被设为未知量M
- 电荷量。当然也可以被设为未知量q/e/nq/ne/-q/-nq
- 速度标量。可以被设为未知量v。不过,当你不需要求解问题的时候,你可以设置为任意值。(见下方)
- 位置与速度方向。动动鼠标,拖动矢量箭头,即可在画板上绘制质点的位置与速度方向(当然,它也可以是一个静止的质点)
在这里,我设置了两个求解方法:
- 设置质点需要经过的位置,或者位置矢量,求解质点所需的m、q、v以及所处势场的强度E1、E2... B1、B2...
- 设置质点离开某个势场时的角度,同样,求解质点所需的参数以及势场的参数
a-求解途径点/途径点矢量
b-求解离场矢量
回归仿真器,在这里,你可以添加四种形状的势场:
- 矩形
- 多边形(你可能会疑惑—矩形属于多边形,为什么要区分开?因为多边形的算法,会大大提升浮点数运算的复杂度)
- 椭圆(暂时不支持旋转的椭圆,因为我数学不好,不知道怎么画图)
- 标准圆(好吧,标准圆也是椭圆)
那么效果图:如图所示,质点带正电,从左方进入E0电场,角度为16.74°,要求从-27.76°时出电场,求解质点的属性以及势场的强度。那么我们运行一下看看效果运算选项:PS:
- 常规下,CPU多线程运算可在一分钟内求解两个未知量
- 如果需要求解3/4个未知量,CPU还是能够在有限时间内求解的
- 多边形势场会极大影响求解性能。当然,预览轨迹除外(预览不谈性能)
- 在这里,势场多边形是怎么样的?不规则的凹包、凸包
- 电场区域绘制完毕后,必须指定电场的矢量方向,即拖动鼠标选择方向角
- 绘制多边形势场时,以鼠标右键结束绘制,此时将形成闭合多边形(如果存在交叉点,必然运算出错)
- 如果你的电脑有显卡并且支持CUDA硬件加速,那么求解速度将大大提升,比如求解存在两个未知量的情况:
- 纯易语言求解速度为1(优化后为1k)
- C++ 多线程 CPU拉满情况下,速度为 5k
- GPU 程序主要是单精度浮点数运算 根据单精度算力而异 配置稍微可以的 4个未知量一分钟内求解出结果
- (以上速度仅针对求解,实时预览并不吃性能)
- 所有参数都可以自己调整步长、上限
- 磁场磁通量未知量运算得比较慢
另外,CUDA版本没有易语言调用,不过可以生成代码,自己贴在上面就可以跑结果,然后把生成的坐标点导入软件,自己摸索一下
源码包括:易语言版本,C++CPU多线程加速DLL,CUDA RUNTIME部分
附上一个四磁场未知量 CUDA加速结果 20秒出结果
点我下载
(已有 16 次下载)