基于Matlab的电磁场与波“电轴法”仿真

2024-03-12 10:20
文章标签 matlab 仿真 电磁场 电轴

本文主要是介绍基于Matlab的电磁场与波“电轴法”仿真,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0、代码中用到的drawEline函数

在使用代码前记得把这个函数和仿真文件放到一个文件夹下哦

function pipi=drawEline(h1,d1,d2)posAxes = get(gca, 'Position');  %获取当前坐标区位置信息
posX = posAxes(1);
posY = posAxes(2);
width = posAxes(3);
height = posAxes(4);%分解位置信息
hold on;
limX = get(gca, 'Xlim');%获取x轴范围
limY = get(gca, 'Ylim');%获取y轴范围
minX = limX(1);
maxX = limX(2);
minY = limY(1);
maxY = limY(2);
x=[h1(1).XData(d1) h1(1).XData(d2)];
y=[h1(1).YData(d1) h1(1).YData(d2)];
xNew = posX + (x - minX) / (maxX - minX) * width;
yNew = posY + (y - minY) / (maxY - minY) * height;%通过坐标变换得到箭头的绝对坐标
pipi=annotation('arrow', xNew, yNew);

1.目的:

  了解电轴法的等效原理,学会用MATLAB绘制电轴法的电场线与等势面。

2.理论分析:

 

3.源代码与结果

3.1两根相同半径轴线(电压已知,tao未知):

3.1.1二维图源代码:

a = 3;b = 4;d = 5;u0 = 10;
e0 = 10^(-9)/(36*pi);
x = linspace(-10,10,500);
y = linspace(-10,10,500);
theta=linspace(0,2*pi,50);
xr1=b+a*cos(theta);
yr1=a*sin(theta);
xr2=-b+a*cos(theta);
yr2=a*sin(theta);
[xx, yy]=meshgrid(x, y);
tao = pi*e0*u0/(log((b+d-a)/(b-d+a)));
fai = tao*log(sqrt((xx-b).^2+yy.^2)./sqrt((xx+b).^2+yy.^2))/(2*pi*e0);
[Ex,Ey] = gradient(fai);
E = sqrt(Ex.^2+Ey.^2);
Ex = Ex./E;Ey = Ey./E;
cv=linspace(min(min(fai)),max(max(fai)),51);
contour(xx,yy,fai,cv,'r-');
title('\fontname{ ËÎÌå }\fontsize{11} 两半径相同电轴'),hold on
plot(xr1,yr1,'k','linewidth',2)
plot(xr2,yr2,'k','linewidth',2)
xlabel('x');ylabel('y'),hold off
th=linspace(0,2*pi,17);
x1=-b+0.01*cos(th);
y1=0.01*sin(th);
x2=b+0.01*cos(th);
y2=0.01*sin(th);
for i=1:17h1=streamline(xx,yy,-Ex,-Ey,x1(i),y1(i));  switch icase {1,2,9,16}drawEline(h1,1000,1001);case {3,15}drawEline(h1,1030,1031);case {4,14}drawEline(h1,1150,1151);case {5,13}drawEline(h1,1350,1351);                case {6,12}drawEline(h1,1650,1651);case {7,11}drawEline(h1,2700,2701);case {8,10}drawEline(h1,930,931);otherwisecontinueend
end
for i=[1,2,16]h1=streamline(xx,yy,Ex,Ey,x2(i),y2(i)); switch icase {2,16}drawEline(h1,930,929);case 1drawEline(h1,1000,999);otherwisecontinueend
endfill(xr2,yr2,'w')
fill(xr1,yr1,'w')
for i=1:17h1=streamline(xx,yy,-Ex,-Ey,x1(i),y1(i));  set(h1,'linestyle','--');switch icase {1,2,9,16}drawEline(h1,1000,1001);case {3,15}drawEline(h1,1030,1031);case {4,14}drawEline(h1,1150,1151);case {5,13}drawEline(h1,1350,1351);                case {6,12}drawEline(h1,1650,1651);case {7,11}drawEline(h1,2700,2701);case {8,10}drawEline(h1,930,931);otherwisecontinueend
end
for i=[1,2,16]h1=streamline(xx,yy,Ex,Ey,x2(i),y2(i)); set(h1,'linestyle','--');switch icase {2,16}drawEline(h1,930,929);case 1drawEline(h1,1000,999);otherwisecontinueend
end

3.1.2二维图结果:

修改前

 修改后

 3.1.3三维图源代码:

x = linspace(-10,10,500);
y = linspace(-10,10,500);
[xx, yy]=meshgrid(x, y);
a = 3;b = 4;d = 5;u0 = 10;
e0 = 10^(-9)/(36*pi);
tao = pi*e0*u0/(log((b+d-a)/(b-d+a)));
fai = tao*log(sqrt((xx-b).^2+yy.^2)./sqrt((xx+b).^2+yy.^2))/(2*pi*e0);
[Ex,Ey] = gradient(fai);
E = sqrt(Ex.^2+Ey.^2);
Ex = Ex./E;Ey = Ey./E;
fai0 = tao*log(0.1/7.9)/(2*pi*e0);
F = linspace(-fai0,fai0,40);
surf(fai);
hold on
shading interp;subplot(2,1,1);
[c,h]=contour3(fai,F);
h1=streamslice(Ex,Ey);
set(h1,'Color',[0.1 0.9 0.8]);subplot(2,1,2);
for j=1:length(h1)ui = interp2(fai,h1(j).XData,h1(j).YData);h1(j).ZData = ui;
end
[c,h]=contour3(fai,F);
h.EdgeColor='k';
h.LineStyle='--';
colormap(white);

3.1.4三维图结果

修改前

 修改后

3.2两根半径不同轴线(非嵌套,tao已知):

3.2.1计算公式:

 由以下关系式

 可得

 3.2.2二维图源代码:

a1 = 2.5;a2 = 4;d = 7;tao=2.5484e-10;
h1=(d^2+a1^2-a2^2)/(2*d);
h2=(d^2-a1^2+a2^2)/(2*d);
b=sqrt(h1^2-a1^2);
e0 = 10^(-9)/(36*pi);
x = linspace(-10,10,500);
y = linspace(-10,10,500);
theta=linspace(0,2*pi,50);
xr1=h2+a2*cos(theta);
yr1=a2*sin(theta);
xr2=-h1+a1*cos(theta);
yr2=a1*sin(theta);
[xx, yy]=meshgrid(x, y);
fai = tao*log(sqrt((xx-b).^2+yy.^2)./sqrt((xx+b).^2+yy.^2))/(2*pi*e0);
[Ex,Ey] = gradient(fai);
E = sqrt(Ex.^2+Ey.^2);
Ex = Ex./E;Ey = Ey./E;
cv=linspace(min(min(fai)),max(max(fai)),51);
contour(xx,yy,fai,cv,'r-');
title('\fontname{ ËÎÌå }\fontsize{11} 两根半径不同轴线(非嵌套) '),hold on
plot(xr1,yr1,'k','linewidth',2)
plot(xr2,yr2,'k','linewidth',2)
xlabel('x');ylabel('y'),hold off
th=linspace(0,2*pi,51);
x1=-b+0.01*cos(th);
y1=0.01*sin(th);
x2=b+0.01*cos(th);
y2=0.01*sin(th);
for i=[1,5,9,13,17,21,22,23,29,30,31,35,39,43,47]h1=streamline(xx,yy,-Ex,-Ey,x1(i),y1(i)); switch icase 1drawEline(h1,350,351);case {5,47}drawEline(h1,360,361);case {9,43}drawEline(h1,388,389);                case {13,39}drawEline(h1,445,446);case {17,35}drawEline(h1,530,531);case {21,31}drawEline(h1,940,941);    case {22,30}drawEline(h1,1270,1271);case {23,29}drawEline(h1,1930,1931);otherwisecontinueend
endfor i=[24,25,26,27,28]h1=streamline(xx,yy,-Ex,-Ey,x1(i),y1(i));drawEline(h1,1250,1251); 
endfor i=[1,2,3,50,49]h1=streamline(xx,yy,Ex,Ey,x2(i),y2(i));drawEline(h1,1250,1249); 
end

3.2.3二维图结果:

(实在肝不动了,就不抠细节了)

 3.2.4三维图源代码:

a1 = 2.5;a2 = 4;d = 7;tao=2.5484e-10;
h1=(d^2+a1^2-a2^2)/(2*d);
h2=(d^2-a1^2+a2^2)/(2*d);
b=sqrt(h1^2-a1^2);
e0 = 10^(-9)/(36*pi);
x = linspace(-10,10,500);
y = linspace(-10,10,500);
[xx, yy]=meshgrid(x, y);
fai = tao*log(sqrt((xx-b).^2+yy.^2)./sqrt((xx+b).^2+yy.^2))/(2*pi*e0);
fai0 = tao*log(0.05/2.4878)/(2*pi*e0);
F = linspace(-fai0,fai0,60);
[Ex,Ey] = gradient(fai);
E = sqrt(Ex.^2+Ey.^2);
Ex = Ex./E;Ey = Ey./E;
surf(fai);
hold on
shading interp;
h1=streamslice(Ex,Ey);
set(h1,'Color',[0.1 0.9 0.8]);
for j=1:length(h1)ui = interp2(fai,h1(j).XData,h1(j).YData);h1(j).ZData = ui;
end
[c,h]=contour3(fai,F);
h.EdgeColor='k';
h.LineStyle='--';
colormap(jet);

3.2.5三维图结果:

3.3两根半径相同轴线(嵌套,tao已知):

3.3.1计算公式:

 由以下关系式

可得

 3.3.2二维图源代码

a1 = 1.5;a2 = 4;d = 2;tao=2.5484e-10;
H1=(a2^2-a1^2-d^2)/(2*d);
H2=(a2^2-a1^2+d^2)/(2*d);
b=sqrt(H1^2-a1^2);
e0 = 10^(-9)/(36*pi);
x = linspace(-10,10,500);
y = linspace(-10,10,500);
theta=linspace(0,2*pi,50);
xr1=-H2+a2*cos(theta);
yr1=a2*sin(theta);
xr2=-H1+a1*cos(theta);
yr2=a1*sin(theta);
[xx, yy]=meshgrid(x, y);
fai = tao*log(sqrt((xx-b).^2+yy.^2)./sqrt((xx+b).^2+yy.^2))/(2*pi*e0);
[Ex,Ey] = gradient(fai);
E = sqrt(Ex.^2+Ey.^2);
Ex = Ex./E;Ey = Ey./E;
cv=linspace(min(min(fai)),max(max(fai)),51);
contour(xx,yy,fai,cv,'r-');
title('\fontname{ ËÎÌå }\fontsize{11} 两根半径不同轴线(嵌套)'),hold on
plot(xr1,yr1,'k','linewidth',2)
plot(xr2,yr2,'k','linewidth',2)
xlabel('x');ylabel('y'),hold off
th=linspace(0,2*pi,51);
x1=-b+0.01*cos(th);
y1=0.01*sin(th);
x2=b+0.01*cos(th);
y2=0.01*sin(th);
for i=[1,5,9,13,17,21,22,23,29,30,31,35,39,43,47]h1=streamline(xx,yy,-Ex,-Ey,x1(i),y1(i)); switch icase {1,5,47}drawEline(h1,550,551);case {9,43}drawEline(h1,570,571);                case {13,39}drawEline(h1,680,681);case {17,35}drawEline(h1,950,951);case {21,31}drawEline(h1,1950,1951);    case {22,30}drawEline(h1,2570,2571);case {23,29}drawEline(h1,1230,1231);otherwisecontinueend
endfor i=[24,25,26,27,28]h1=streamline(xx,yy,-Ex,-Ey,x1(i),y1(i));drawEline(h1,1250,1251); 
endfor i=[1,2,3,4,48,49,50]h1=streamline(xx,yy,Ex,Ey,x2(i),y2(i));drawEline(h1,1250,1249); 
end

3.3.3二维图结果

 3.3.4三维图源代码

a1 = 1.5;a2 = 4;d = 2;tao=2.5484e-10;
H1=(a2^2-a1^2-d^2)/(2*d);
H2=(a2^2-a1^2+d^2)/(2*d);
b=sqrt(H1^2-a1^2);
e0 = 10^(-9)/(36*pi);
x = linspace(-10,10,500);
y = linspace(-10,10,500);
[xx, yy]=meshgrid(x, y);
fai = tao*log(sqrt((xx-b).^2+yy.^2)./sqrt((xx+b).^2+yy.^2))/(2*pi*e0);
fai0 = tao*log(0.1/3.7426)/(2*pi*e0);
F = linspace(-fai0,fai0,60);
[Ex,Ey] = gradient(fai);
E = sqrt(Ex.^2+Ey.^2);
Ex = Ex./E;Ey = Ey./E;
surf(fai);
hold on
shading interp;
h1=streamslice(Ex,Ey);
set(h1,'Color',[0.1 0.9 0.8]);
for j=1:length(h1)ui = interp2(fai,h1(j).XData,h1(j).YData);h1(j).ZData = ui;
end
[c,h]=contour3(fai,F);
h.EdgeColor='k';
h.LineStyle='--';
colormap(jet);

3.3.5三维图结果

这篇关于基于Matlab的电磁场与波“电轴法”仿真的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800950

相关文章

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

libsvm在matlab中的使用方法

原文地址:libsvm在matlab中的使用方法 作者: lwenqu_8lbsk 前段时间,gyp326曾在论坛里问libsvm如何在matlab中使用,我还奇怪,认为libsvm是C的程序,应该不能。没想到今天又有人问道,难道matlab真的能运行libsvm。我到官方网站看了下,原来,真的提供了matlab的使用接口。 接口下载在: http://www.csie.ntu.edu.

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数_matlab pmsm-CSDN博客

MATLAB层次聚类分析法

转自:http://blog.163.com/lxg_1123@126/blog/static/74841406201022774051963/ 层次聚类是基于距离的聚类方法,MATLAB中通过pdist、linkage、dendrogram、cluster等函数来完成。层次聚类的过程可以分这么几步: (1) 确定对象(实际上就是数据集中的每个数据点)之间的相似性,实际上就是定义一个表征

MATLAB的fix(),floor()和ceil()函数的区别与联系

fix(x),floor(x)和ceil(x)函数都是对x取整,只不过取整方向不同而已。 这里的方向是以x轴作为横坐标来看的,向右就是朝着正轴方向,向左就是朝着负轴方向。 fix(x):向0取整(也可以理解为向中间取整) floor(x):向左取整 ceil(x):向右取整 举例: 4个数:a=3.3、b=3.7、c=-3.3、d=-3.7 fix(a)=3 fl