利用Matlab绘制两个点电荷电场线【物理软件课程设计】

物理软件课程设计

2021年6月的课程设计题目之一:设计程序,画出两个点电荷之间电场线分布图

入门级别,代码思想可能有点像C语言,本人应用物理学专业。

资源链接:(4条消息) 利用MATLAB绘制点两个电荷电场线-C文档类资源-CSDN文库 https://download.csdn.net/download/qq_45327517/85376120

(第一次上传,不知道对不对)  代码文章后半段也会附上。

历史久远,以下是我的课程设计报告:(2021.06)

电场线作图

一、 目的:

设计程序,画出两个点电荷之间电场线分布图

二、硬件环境:

CPU:Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz 内存:8+8G 硬盘:256G                               

三、软件环境:

操作系统: Windows 10 家庭中文版    软件:Matlab2016b

四、程序流程图:

 

原理图(截取自老师所给原理PPT)

相关物理原理就不放了。

五、程序调速情况:

原理如图

E=k*q/r^2,k取1,△l分度值暂定0.2

下一点坐标迭代为x=x+h*(Ex/ER);y=y+h*(Ey/ER)

那么问题的核心就是确定初始点,以及如何实现电场力的叠加。

关于初始点的确立,采用点电荷为圆心,选取半径,通过分角度,极坐标表示初始点的横纵坐标(x0,y0)来确立初始点。

两个点电荷在不同位置的电场力分量方向可能是不同的,单纯的代码无法体验大小正负的区别,所以采用向量坐标的办法实现向量相加,求得场点的总的电场力向量,进而求得下一点坐标。

点电荷与场点的电场力方向肯定与点电荷和场点的连线共线,因此可以通过

场点坐标与点电荷坐标求得电场力向量的角度,又可通过电场力大小公式求得其大小,通过极坐标与直角坐标的转换,得到两个点电荷分别对场点的电场力的向量坐标,将其坐标存入数组。E1与E2的向量坐标求和,就是场点总电场力的向量坐标。这样就解决了判断分量是相加还是相减的问题!

(当时我记得参考其他的做法函数较为高级,可能三五行代码搞定!但是本着原创的思想,就对问题进行了分析,采用了可能比较一般的方法解决问题,不那么像Matlab,毕竟我们专业课程学过只c语言(应用物理学),不过我倒是逻辑玩的明白。--2022.05.15)

再根据后续坐标迭代公式,利用MATLAB中ploy函数,以及调整for循环,while循环语句的位置,实现了完整的电场线的绘制。

六、程序运行结果

 (具体可调节的地方见于具体代码。--2022.05.15)

八、附录(源程序代码):

clc
clear
Q1=1;Q2=1;h=0.2;r=0.3;%同种电荷,左A右B各一个正电荷q=2,坐标(-5,0)(5,0),△l=h=1,点电荷初始点的圆半径为1
%E1是左边到场点的电场向量,E2是右边到场点的电场向量 E=[0,0]总电场的真正向量
for t=pi/8:pi/4:2*pi       %初始点的确立,8个初始点,用角度来区分
        x0=r*cos(t)-5;     %初始点的横坐标(x,y),下一个点是(x+△,y+△)
        y0=r*sin(t);       %初始点的纵坐标.
       plot(x0,y0,'g.');   %绘制初始点的位置,星星符号 x0  y0
       hold on            %图形保持
       plot(-5,0,'m+');
       x=x0;y=y0;s1=[];s2=[];  %给x,y赋值(初始点坐标)
   while  (x<0&&x>-22)&&(y>-15&&y<15)   %y轴左边,二,三象限                            
R1=sqrt((x+5)^2+y^2);R2=sqrt((x-5)^2+y^2);%R1R2也是三角形的!斜边!(用来确定角度)%disp('R1和R2'); disp(R1);disp(R2);
    Ezuod=Q1/(R1^2);Eyoud=Q2/(R2^2);%求出场点与左右点电荷间的电场力!大小!仅是大小,实际大小
    coA=(x+5)/R1;siA=(y)/R1; %根据大小和方向确定左右电场的向量 (-5,0)(5,0)
    coB=(x-5)/R2;siB=(y)/R2; %A是E左与场点 电场力的夹角,B是E右与场点 电场力的夹角
    E1x=Ezuod*coA;E1y=Ezuod*siA;E2x=Eyoud*coB;E2y=Eyoud*siB;%大小,角度,得出横纵坐标(x=r*cosθ,y=r*sinθ)
E1=[0,0];E2=[0,0];E=[0,0];   %预先赋值,数组来存储E1 E2和E的坐标,通过向量计算,跳过单纯叠加的大小正负判断
E1=[E1x,E1y];E2=[E2x,E2y];%左右两个电场力的向量坐标表示-向量坐标相加就是总的E的向量坐标,正负包含在坐标其中%disp('左E1');disp(E1);disp('E2');disp(E2);disp('E');disp(E);
E=E1+E2;Ex=E(1,1);Ey=E(1,2);%向量相加求出E的真正向量坐标表示,与横纵坐标,若求大小要加abs绝对值 %disp('左E1');disp(E1);disp('E2');disp(E2);disp('E');disp(E);
    ER=sqrt(Ex.^2+Ey.^2);%总电场力的绝对大小,勾股定理
    x=x+h*(Ex/ER);y=y+h*(Ey/ER);%x+△x=x+h(Ex/E),y+△y=y+h(Ey/E) 原理求下一个点坐标的公式
    s1(end+1)=x;s2(end+1)=y;%场点横坐标x存入s1,场点y存入s2,(需要画的点的坐标存入数组,方便后续plot作图)
    plot(s1,s2,'k-');%画图s1-x s2- y   (x,y),绿色 实线
   end
end   %下面右边画--------------------------原理重复-------------------------
for t=pi/8:pi/4:2*pi       %初始点的确立,8个初始点,用角度来区分
        x0=r*cos(t)+5;     %初始点的横坐标(x,y),下一个点是(x+△,y+△)
        y0=r*sin(t);       %初始点的纵坐标.
        plot(x0,y0,'r.')   %绘制初始点的位置,星星符号 x1  y1
        hold on            %上面的图形保持
         plot(5,0,'m+');
        x=x0;y=y0;s1=[];s2=[];%给x,y赋值(初始点坐标)
  while   (x<22&&x>0)&&(y>-15&&y<15) %y轴右边,一,四象限           
     R1=sqrt((x+5)^2+y^2);R2=sqrt((x-5)^2+y^2);%R1  R2也是三角形的斜边(用来确定角度)%disp('R1和R2');disp(R1);disp(R2);
     Ezuod=Q1/(R1^2);Eyoud=Q2/(R2^2);%求出场点与左右点电荷间的电场力大小,仅是大小,实际大小
     coA=(x+5)/R1;siA=(y)/R1; %coA=abs(x+5)/R1;siA=abs(y)/R1;%根据大小和方向确定左右电场的向量
     coB=(x-5)/R2;siB=(y)/R2;%coB=abs(x-5)/R2;siB=abs(y)/R2;%A 是E左的夹角  B 是E右 的夹角
     E1x=Ezuod*coA;E1y=Ezuod*siA;E2x=Eyoud*coB;E2y=Eyoud*siB;
 E1=[0,0];E2=[0,0];E=[0,0];   %预先赋值,数组来存储E1 E2和E的坐标,通过向量计算,跳过单纯叠加的大小正负判断
 E1=[E1x,E1y];E2=[E2x,E2y];   %左右两个电场力的向量坐标表示---%disp('右E1');disp(E1);disp('E2');disp(E2);disp('E');disp(E);
 E=E1+E2;Ex=E(1,1);Ey=E(1,2); %向量相加求出E的真正向量坐标表示,与横纵坐标,求大小要加abs绝对值----%disp('左E1');disp(E1);disp('E2');disp(E2);disp('E');disp(E);
    ER=sqrt(Ex.^2+Ey.^2);%总电场力的绝对大小
  x=x+h*(Ex/ER);y=y+h*(Ey/ER);%x+△x=x+h(Ex/E),y+△y=y+h(Ey/E),%Ex的计算 场点与左电荷之间。   Ey的计算 场点与左电荷之间。
  s1(end+1)=x;s2(end+1)=y;%场点横坐标x存入s1,场点y存入s2,(需要画的点的坐标存入数组,方便后续plot作图)
    plot(s1,s2,'r-');%画图s1-x   s2- y   (x,y),红色,实线
   end
end
title('两个点电荷的电场线分布')%(’图形名称’)
grid on    %显示网格线      
axis on    %显示坐标轴 

(再附上代码截图!)

 

 

 

 

完结!--发于2022.05.15

 

 

以下是用 Matlab 电场线的基本步骤: 1. 定义电荷分布或电势场:可以通过数值计算或手动指定电荷分布或电势场。 2. 计算电场强度:通过电势场和电荷分布计算电场的强度。 3. 选择绘制区域:选择要绘制电场线的区域。 4. 定义起始点:定义每条电场线的起始点。 5. 选择绘图参数:选择绘图参数,如线条颜色、线条宽度等。 6. 绘制电场线:使用 Matlab 的 plot 函数绘制电场线。 以下是一个简单的示例代码,用于绘制二维平面上的电场线: ```matlab % 定义电荷分布 xq = [-1, 1]; % 电荷的 x 坐标 yq = [0, 0]; % 电荷的 y 坐标 q = [1, -1]; % 电荷的电量 % 计算电场强度 [X, Y] = meshgrid(-2:0.1:2, -2:0.1:2); % 定义绘图区域 Ex = zeros(size(X)); % 初始化电场的 x 分量 Ey = zeros(size(Y)); % 初始化电场的 y 分量 k = 9e9; % 真空中的电介质常数 for i = 1:length(q) r = sqrt((X-xq(i)).^2 + (Y-yq(i)).^2); % 计算距离 Ex = Ex + k*q(i)*(X-xq(i))./r.^3; % 计算 x 分量 Ey = Ey + k*q(i)*(Y-yq(i))./r.^3; % 计算 y 分量 end % 定义起始点 x0 = [-1.5, -1, -0.5, 0, 0.5, 1, 1.5]; % 起始点的 x 坐标 y0 = zeros(size(x0)); % 起始点的 y 坐标 % 选择绘图参数 lw = 1.5; % 线条宽度 color = 'b'; % 线条颜色 % 绘制电场线 figure hold on streamline(X, Y, Ex, Ey, x0, y0); % 使用 streamline 函数绘制电场线 xlim([-2, 2]) % 设置 x 轴范围 ylim([-2, 2]) % 设置 y 轴范围 xlabel('x') % 设置 x 轴标签 ylabel('y') % 设置 y 轴标签 title('Electric Field Lines') % 设置图像标题 set(gca, 'LineWidth', lw) % 设置坐标轴线条宽度 set(gca, 'FontSize', 12) % 设置字体大小 box on % 绘制图像边框 ``` 运行上述代码,即可得到一个绘制电场线的图像。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间之外2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值