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

article/2025/5/14 7:30:32

物理软件课程设计

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  y0hold 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  y1hold 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

 

 


http://chatgpt.dhexx.cn/article/RoHGUA38.shtml

相关文章

matlab描点写函数,matlab描点并标上点的序号

使用Kinect一帧可以获取构成人脸的121个点&#xff0c;每个点对应一个序号&#xff0c;其中121个点中有20个点描绘的唇部的点&#xff0c;但我们只能看出有20个点对应嘴唇&#xff0c;并不知道这20个点的序号&#xff0c;所以需要使用matlab建模并找出这20点对应的序号。 程序如…

matlab画三维散点图,调节点大小和图案

找了老半天的三维散点图&#xff0c;都没有。后来给我摸清楚了。 你随便画个三维散点&#xff0c;用scatter3 这个函数画。注意&#xff0c;plot是二维的 plot调节大小是 markersize 这个参数&#xff0c;但是三维没有。 可以画出图形后&#xff0c;用matlab自带的图形编辑器&…

Matlab画图和点标记

从csv中导出数据&#xff0c;然后需要在MATLAB图中进行标记个别点&#xff0c;但是利用MTALB自身标记的比较丑&#xff0c;因此搜了一下别的方法&#xff0c;具体效果如下&#xff0c;其中的*可以改成O或者其他的自定义的符号&#xff1a; 具体的主要代码如下&#xff1a; fi…

matlab绘制三维点云和点云凸包

matlab绘制三维点云和点云凸包 效果展示 1.在matlab命令窗口输入guide打开matlab的ui开发界面&#xff0c;按照下图的样式绘制界面。 2. 在GUIDE中鼠标右键点击选择素材文件夹按键&#xff0c;选择查看回调&#xff1d;&#xff1e;callback编辑回调函数。 function pushbutto…

matlab 绘制孤立点

绘制孤立点 clc,clear; X[1,3,5,6]; Y[3,4,1,5]; nlength(X); hold on for i1:nplot(X(i),Y(i),c*); endresult

Matlab制作高分辨率点线图

相较于其他软件&#xff0c;MATLAB在图片制作上上手难度较高&#xff0c;但其强大的代码功能使得处理出来的图片更加漂亮。直接附代码和效果图&#xff01; x[100 125 150 175 200]; %定义x轴的坐标 sign["1#",2#,3#,4#,5#,Ave];[num,txt,raw]xlsread(D:\wudi\postg…

MATLAB 绘制点的地理空间分布,并用点的颜色或大小代表数值

%% 修改日期 2021/12/8clc clear close all%% 测试数据&#xff0c;第一列代表纬度&#xff0c;第二列经度&#xff0c;第三列则是点的值 txt [46.75296619 -69.1022775 0.31290975246.80735808 -69.06131914 0.39115348546.68438136 -68.40644856 -0.52491718547.68233472 -6…

Matlab 绘制 - 点和向量:向量加减的方法和源码

前言&#xff1a; 一些博客就是转了Matlab 的中文说明&#xff0c;可是他那个说明&#xff0c;他自己都说了不是很对。 本文从实践出发&#xff0c;详细介绍Matlab对 坐标空间的点和向量的绘制方法。 1 点的概念和画法&#xff1a; 1.1 一个平面上的点 plot(2, 3, ., MarkerS…

oracle一基础查询:单表,多表查询(交叉,内联,外联),分组聚合,子查询语法。

摘要&#xff1a;条件查询&#xff0c;别名&#xff0c;排序&#xff0c;聚合函数&#xff0c;where&#xff0c;having&#xff0c;联接查询&#xff0c;where in/exists/><子查询&#xff0c;&#xff0c;rownum伪列&#xff0c;模糊查询。 查询所有信息 select *from…

wps交叉表_使用WPS图表功能中的堆叠条形图制作日程交叉图

微软的项目&#xff0c;作为一个老式的项目管理软件&#xff0c;被许多朋友在工作中使用。它的功能相对完善&#xff0c;与微软的sharepoint服务器相结合&#xff0c;功能非常强大。一般来说&#xff0c;我们很少使用微软项目的所有功能。毕竟&#xff0c;与中国人的使用习惯还…

sql 交叉查询

日常开发中遇到多表查询时&#xff0c;首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等&#xff0c;但是这两种查询有时候不能满足需求。比如&#xff0c;左表一条关联右表多条记录时&#xff0c;我需要控制右表的某一条或多条记录跟左表匹配。貌似&#xff0c;INNER JOIN 或 L…

交叉表和透视表

交叉表: 用于计算一列数据对于另一列数据的分组个数&#xff08;用于统计分组频率的特殊透视表&#xff09; pd.crosstab(value1,value2)透视表&#xff1a;将原有的dataframe的列分别作为行索引和列索引&#xff0c;然后对指定的列应用聚集函数 data.pivot_table() 探究股票的…

【交叉表查询】行列转换的魅力

本文主要是讲一下行列转换&#xff0c;也就是大家经常讲的交叉表查询。 行列转换在实际的应用中非常的实用&#xff0c;可以大大的减少工作量。 很多时候&#xff0c;在Excel中处理数据时&#xff0c;我们需要统计每个月的销量或者需要填写每个月的销量&#xff0c;如下图 &a…

Mysql5 实现交叉表查询

交叉表、行列转换和交叉查询经典 一、什么是交叉表 “交叉表”对象是一个网格&#xff0c;用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个元素组成&#xff1a; 行 列 摘要字段 “交叉表”中的行沿水平方向延…

access交叉表

一、交叉表查询每门课的成绩 交叉表&#xff1a;左边是行标题&#xff0c;上面是列标题&#xff0c;交叉的是值。更改字段名:更改字段名用双引号 二、查询每个年级的每门课的成绩 [表名]![字段名] 三、生成表 生成表&#xff1a;在一张表上生成一张新表原来只有三张表 点击运行…

access如何查询两张表的内容_Access使用技术2:使用交叉表查询向导进行每日汇总...

个人主页:http://office-access.cn公众号:DataMapHuanyu Access使用技术2:使用交叉表查询向导进行每日汇总 Access交叉表查询可以合并每日的量,日汇总功能对于大量数据统计是很有帮助的,Excel很难胜任。 1.技术要求 将不同的表用Union Select合并到一张表中,不能用两张表…

【Access数据库】关于带参数的交叉表查询

查了一圈&#xff0c;网上关于带参数的交叉表查询的介绍很少。 1.用SQL语句写带参数的交叉表查询的话&#xff0c;不能用having语句设置条件&#xff0c;必须用where。 2.where语句里不能像普通参数查询一样写模糊查询&#xff0c;必须是精确的。 3.即使用了where&#xff0c;也…

在MySQL中实现交叉表查询1(静态交叉表)

在MySQL中实现交叉表查询1&#xff08;静态交叉表&#xff09; 一、什么是交叉表 交叉表查询是将来源于某个表中的字段进行分组&#xff0c;一组列在交叉表左侧&#xff0c;一组列在交叉表上部&#xff0c;并在交叉表行与列交叉处显示表中某个字段的各种计算值。比如&#xf…

5.7.1 使用向导创建交叉表查询

示例ACCESS数据库下载链接&#xff1a; https://download.csdn.net/download/ngbshzhn/20979935 使用交叉表查询计算和重构数据&#xff0c;可以简化数据分析&#xff0c;交叉表查询计算数据的总和、平均值、计数或其他类型的总计值&#xff0c;并将它们分组。一组列在数…

5.7.2 使用设计视图创建交叉表查询

交叉表查询由三部分组成&#xff0c;行标题字段、列标题字段和值字段。按照Access的规定&#xff0c;列标题字段和值字段只能各有一个&#xff0c;行标题字段最多可以有3个。 (1)打开“罗斯文”数据库&#xff0c;在“创建”选项卡上的“查询”组中&#xff0c;单击“查询设…