首页 > 其他分享 >磁场的绘制

磁场的绘制

时间:2024-11-16 16:41:31浏览次数:1  
标签:plt Bx magnetic field magnitude np 磁场 绘制

详见如下python代码

 

import matplotlib.pyplot as plt
import numpy as np

# 定义常量
mu_0 = 4 * np.pi * 1e-7  # 真空的磁导率 (T m/A)

# 定义磁偶极子类
class MagneticDipole:
    def __init__(self, magnetic_moment, position):
        self.magnetic_moment = np.array(magnetic_moment)  # 磁偶极矩 (二维)
        self.position = np.array(position)  # 偶极子位置

    def magnetic_field(self, X, Y):
        # 计算磁场
        r_vector = np.dstack((X, Y)) - self.position
        r_magnitude = np.linalg.norm(r_vector, axis=2)
        r_magnitude[r_magnitude == 0] = np.inf  # 防止除以零

        # 计算单位向量
        r_hat = r_vector / r_magnitude[:, :, np.newaxis]

        # 磁场公式(只考虑二维分量)
        B_magnitude = (mu_0 / (4 * np.pi)) * (3 * (r_hat[:,:,0] * self.magnetic_moment[0] + r_hat[:,:,1] * self.magnetic_moment[1])[:, :, np.newaxis] * r_hat - self.magnetic_moment) / r_magnitude[:, :, np.newaxis]**3

        return B_magnitude

    @staticmethod
    def calculate_magnetic_field(dipoles, X, Y):
        # 初始化磁场
        B_field = np.zeros((X.shape[0], X.shape[1], 2))

        # 计算每个磁偶极子的磁场并叠加
        for dipole in dipoles:
            dipole_field = dipole.magnetic_field(X, Y)
            B_field[:, :, 0] += dipole_field[:, :, 0]  # 添加 x 分量
            B_field[:, :, 1] += dipole_field[:, :, 1]  # 添加 y 分量

        # 计算磁场的分量
        Bx = B_field[:, :, 0]
        By = B_field[:, :, 1]
        return Bx, By

    @staticmethod
    def plot_magnetic_field(X, Y, Bx, By):
        plt.figure(figsize=(10, 10))

        # 使用 streamplot 绘制磁场线
        # plt.streamplot(X, Y, Bx, By, color='b', linewidth=1.5, density=1.5)
        # 归一化箭头长度
        arrow_length = 0.3  # 设置箭头的标准长度
        B_magnitude = np.sqrt(Bx**2 + By**2)  # 计算每个点的磁场大小
        Bx_normalized = Bx / B_magnitude * arrow_length  # 归一化并调整箭头长度
        By_normalized = By / B_magnitude * arrow_length

        # 使用 quiver 绘制箭头
        plt.quiver(X, Y, Bx_normalized, By_normalized, color='b', angles='xy', scale_units='xy', scale=1)

        # 绘制磁偶极子位置
        for dipole in dipoles:
            plt.plot(dipole.position[0], dipole.position[1], 'ro', markersize=10)

        plt.xlim(-5, 5)
        plt.ylim(-5, 5)
        plt.title('Magnetic Field of Multiple Magnetic Dipoles')
        plt.xlabel('x (m)')
        plt.ylabel('y (m)')
        plt.grid()
        plt.axis('equal')
        plt.show()

if __name__ == '__main__':
    # 创建多个磁偶极子
    dipoles = [
        MagneticDipole([1, 0], (-2, -2)),  # 磁偶极矩指向正x方向
        MagneticDipole([-1, 0], (2, 2)),   # 磁偶极矩指向负x方向
    ]

    # 定义网格
    x = np.linspace(-5, 5, 20)
    y = np.linspace(-5, 5, 20)
    X, Y = np.meshgrid(x, y)

    Bx, By = MagneticDipole.calculate_magnetic_field(dipoles, X, Y)

    # 绘制磁场线
    MagneticDipole.plot_magnetic_field(X, Y, Bx, By)

 

标签:plt,Bx,magnetic,field,magnitude,np,磁场,绘制
From: https://www.cnblogs.com/dogingate/p/18549474

相关文章

  • 电场的绘制
    详见python小程序 importnumpyasnpimportmatplotlib.pyplotasplt#定义常量k=8.99e9#库仑常数(Nm^2/C^2)#定义电荷类classPointCharge:def__init__(self,charge,position):self.charge=chargeself.position=np.array(po......
  • 小程序21-绘制轮播图
    在小程序中,提供了swiper和swiper-item组件实现轮播图swiper:滑块视图容器,其中只能放置swiper-item组件swiper-item:只可放置在swiper组件中,宽高自动设置为100%,代表swiper中的每一项文档所在位置:wswiper文档链接swiper常用属性autoplay:是否自动切换circular:是......
  • 绘制层次结构图
    绘制层次结构图WPS的智能图形要收费,先做个免费的不美观的版本。基于matplotlib,networkx,graphviz,pydot按需修改输入内容input_data为输入的文本。外观rankdir为指定方向。mpatches.Rectangle为节点外形。比例缩放matplotlib窗口,调整节点长宽。调整字体大小,当前为pl......
  • QT中使用图表之QChart绘制饼图
    饼图没有坐标轴,也不需要坐标轴使用的系列是QPieSeries饼图里面一个一个的块称为切片举例:绘制一个饼图,点击对应切片可以让切片分离1、创建图表视图并开启抗锯齿//1、创建图表视图QChartView*view=newQChartView(this);//开启抗锯齿view->setRenderHint(QPainte......
  • 16章15节:五大ROC曲线扩展包的对比,和其它评估曲线的绘制
    在机器学习和统计建模中,评估模型性能是至关重要的步骤。为了帮助研究人员和数据科学家更好地评估和可视化分类模型的效果,R语言提供了多个扩展包。本文将介绍几种常见的扩展包,主要包括ROCR、PROC、PRROC、以及ROCit等。首先,我们将详细探讨ROCR包的功能,重点介绍如何利用该包绘制R......
  • 2- R语言基本图形绘制之直方图——基于ggplot2
      直方图通过在x轴上将值域分割为一定数量的数据桶,在y轴上显示相应值的频数,展示了连续型变量的分布。  ggplot(data,aes(x=contvar))+geom_histogram()  #data是一个数据框;contvar是一个连续型变量。  下面我们使用ggplot包中的mpg数据框,分析2008年117个汽......
  • View绘制流程;
    ......
  • Origin图表技巧之绘制带辅助面的3D折线图
    折线图是科研中经常用到的图表之一,它通过线的升降变化显示数据的变化趋势,今天给大家分享绘制三维折线图的操作方法:操作步骤:1、先打开Origin2024软件,然后在Book1中输入如下示例数据:2、鼠标右击将C(Y)和E(Y)列设置为Z:3、将数据调整为XYZ型数据,如下:4、先选中所有数据:5......
  • 在线性坐标系中绘制对数函数图象
    本文记述了用Matplotlib在线性坐标系中绘制对数函数图象的例子。代码主体内容如下:...defmain():fig,ax=plt.subplots(figsize=(8,8))#1ax=configure_axes(ax,'LogarithmicFunction',8,3,1,0.25,1,0.25)#2x=np.linspace(......
  • [js] 突发奇想, 使用canvas绘制一个动态的扫描仪
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title&g......