基于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.理论分析:

  (1)平面镜像法

      对于一无限大导体平面上方一个点电荷的电场,只要在导体平面的下方点电荷q对称的点处放置一点电荷(-q),并把无限大导体平板撤去,整个空间充满介电常数为的电介质,这两个的电荷在上半平面共同产生的电场即为原电场。

(2)球面镜像法

      理论分析见专栏内第一期分享

  (3)本题模型

      本题为一点电荷位于半球形凸起导体附近

 点电荷q在此模型中会产生三个镜像电荷,其中有:

 导体上方电场由这四个电荷共同组成:

3.源代码与结果

3.1二维图源代码:

k=8.9875e9;
q=1.602e-18;
d=0.2;
a=0.1;
b=a*a/d;
q1=-q;
q2=-a/d*q;
q3=-q2;
theta=linspace(0,pi,50);
th=linspace(0,2*pi,25);
xr=a*cos(theta);
yr=a*sin(theta);
hold on
plot(0,d,'o','MarkerSize',6)
plot(xr,yr,'k','linewidth',2)
plot([-0.4,-0.1],[0,0],'k','linewidth',2)
plot([0.1,0.4],[0,0],'k','linewidth',2)
xlabel('X','fontsize',16)
ylabel('Y','fontsize',16)
title('接地半球突起','fontsize',20);
axis([-0.4,0.4,-0.4,0.4]);


%第一部分
xd1=linspace(-0.4,0.4,100);
yd1=linspace(0,0.4,100);
[Xd1,Yd1]=meshgrid(xd1,yd1);
r1=sqrt(Xd1.^2+(Yd1-d).^2);
r2=sqrt(Xd1.^2+(Yd1+d).^2);
r3=sqrt(Xd1.^2+(Yd1-b).^2);
r4=sqrt(Xd1.^2+(Yd1+b).^2);
U=k*q./r1+k*q1./r2+k*q2./r3+k*q3./r4;
u0=k*q./0.01+k*q1/0.39+k*q2/0.14+k*q3/0.24;
u=linspace(-u0,u0,101);
contour(Xd1,Yd1,U,u,'--');
colormap(jet);
hold on
[Ex,Ey]=gradient(-U);
E=sqrt(Ex.^2+Ey.^2);
Ex=Ex./E;
Ey=Ey./E;
x1=0.001*cos(th);
y1=d+0.001*sin(th);
for i=2:24
    h1=streamline(Xd1,Yd1,Ex,Ey,x1(i),y1(i));
    set(h1,'LineWidth',1); 
    pipi=drawEline(h1,184,185);
    set(pipi,'HeadWidth',4,'HeadLength',4,'Color','b')
end
fill(xr,yr,'w');
hold on


%第二部分
xd1=linspace(-0.4,0.4,100);
yd1=linspace(0,0.4,100);
% for i=1:100
%     for j=1:100
%         if xd1(i)^2+yd1(j)^2 <= a^2
%             xd1(i)=nan;
%             yd1(j)=nan;
%         end
%     end
% end
[Xd1,Yd1]=meshgrid(xd1,yd1);
r1=sqrt(Xd1.^2+(Yd1-d).^2);
r2=sqrt(Xd1.^2+(Yd1+d).^2);
r3=sqrt(Xd1.^2+(Yd1-b).^2);
r4=sqrt(Xd1.^2+(Yd1+b).^2);
U=k*q./r1+k*q1./r2+k*q2./r3+k*q3./r4;
u0=k*q./0.01+k*q1/0.39+k*q2/0.14+k*q3/0.24;
u=linspace(-u0,u0,101);
contour(Xd1,Yd1,U,u,'--');
colormap(jet);
hold on
[Ex,Ey]=gradient(-U);
E=sqrt(Ex.^2+Ey.^2);
Ex=Ex./E;
Ey=Ey./E;
x1=0.001*cos(th);
y1=d+0.001*sin(th);
for i=2:24
    h1=streamline(Xd1,Yd1,Ex,Ey,x1(i),y1(i));
    set(h1,'LineWidth',1,'LineStyle','--'); 
%     pipi=drawEline(h1,164,165);
%     set(pipi,'HeadWidth',4,'HeadLength',4,'Color','b')
end

%第三部分
xd2=linspace(-0.4,0.4,100);
yd2=linspace(-0.2,0.2,100);
[Xd2,Yd2]=meshgrid(xd2,yd2);
r1=sqrt(Xd2.^2+(Yd2-d).^2);
r2=sqrt(Xd2.^2+(Yd2+d).^2);
r3=sqrt(Xd2.^2+(Yd2-b).^2);
r4=sqrt(Xd2.^2+(Yd2+b).^2);
U=k*q./r1+k*q1./r2+k*q2./r3+k*q3./r4;
u0=k*q./0.01+k*q1/0.39+k*q2/0.14+k*q3/0.24;
u=linspace(-u0,u0,101);
% contour(Xd2,Yd2,U,u,'--');
colormap(jet);
hold on
[Ex,Ey]=gradient(-U);
E=sqrt(Ex.^2+Ey.^2);
Ex=Ex./E;
Ey=Ey./E;
x2=0.001*cos(th);
y2=-d+0.001*sin(th);
for i=2:24
    h1=streamline(Xd2,Yd2,-Ex,-Ey,x2(i),y2(i));
    set(h1,'LineWidth',1,'LineStyle','--'); 
%     pipi=drawEline(h1,164,163);
%     set(pipi,'HeadWidth',4,'HeadLength',4,'Color','b')
end
x4=0.001*cos(th);
y4=-b+0.001*sin(th);
for i=2:11
    h1=streamline(Xd2,Yd2,Ex,Ey,x4(i),y4(i));
    set(h1,'LineWidth',1,'LineStyle','--'); 
%     pipi=drawEline(h1,80,81);
%     set(pipi,'HeadWidth',4,'HeadLength',4,'Color','b')
end

fill([-0.4,0.4,0.4,-0.4],[0,0,-0.4,-0.4],'w');

%第四部分
xd2=linspace(-0.4,0.4,100);
yd2=linspace(-0.4,0,100);
[Xd2,Yd2]=meshgrid(xd2,yd2);
r1=sqrt(Xd2.^2+(Yd2-d).^2);
r2=sqrt(Xd2.^2+(Yd2+d).^2);
r3=sqrt(Xd2.^2+(Yd2-b).^2);
r4=sqrt(Xd2.^2+(Yd2+b).^2);
U=k*q./r1+k*q1./r2+k*q2./r3+k*q3./r4;
u0=k*q./0.01+k*q1/0.39+k*q2/0.14+k*q3/0.24;
u=linspace(-u0,u0,101);
contour(Xd2,Yd2,U,u,'--');
colormap(jet);
hold on
[Ex,Ey]=gradient(-U);
E=sqrt(Ex.^2+Ey.^2);
Ex=Ex./E;
Ey=Ey./E;
x2=0.001*cos(th);
y2=-d+0.001*sin(th);
for i=2:24
    h1=streamline(Xd2,Yd2,-Ex,-Ey,x2(i),y2(i));
    set(h1,'LineWidth',1,'LineStyle','--'); 
    pipi=drawEline(h1,184,183);
    set(pipi,'HeadWidth',4,'HeadLength',4,'Color','b')
end
x4=0.001*cos(th);
y4=-b+0.001*sin(th);
for i=2:11
    h1=streamline(Xd2,Yd2,Ex,Ey,x4(i),y4(i));
    set(h1,'LineWidth',1,'LineStyle','--'); 
    pipi=drawEline(h1,120,121);
    set(pipi,'HeadWidth',4,'HeadLength',4,'Color','b')
end

text(0.03,d,'q=+1.602e-18C')

3.2二维图结果:

修改前

 修改后

 3.3三维图源代码:

k=8.9875e9;
q=1.602e-18;
d=0.2;
a=0.1;
b=a*a/d;
q1=-q;
q2=-a/d*q;
q3=-q2;
theta=linspace(0,pi,50);
xr=a*cos(theta);
yr=a*sin(theta);
x=linspace(-0.2,0.2,100);
y=linspace(0.1,0.5,100);
[X,Y]=meshgrid(x,y);
r1=sqrt(X.^2+(Y-d).^2);
r2=sqrt(X.^2+(Y+d).^2);
r3=sqrt(X.^2+(Y-b).^2);
r4=sqrt(X.^2+(Y+b).^2);
U=k*q./r1+k*q1./r2+k*q2./r3+k*q3./r4;
u0=k*q./0.01+k*q1/0.39+k*q2/0.14+k*q3/0.24;

u=linspace(-4*u0,4*u0,400);
[Ex,Ey]=gradient(-U);
E=sqrt(Ex.^2+Ey.^2);
Ex=Ex./E;
Ey=Ey./E;
surf(U);
hold on
shading interp;

subplot(2,1,1);
[c,h]=contour3(U,u);
colormap(jet);
h.EdgeColor='c';

subplot(2,1,2);
[c,h]=contour3(U,u);
colormap(white);
h.EdgeColor='w';
% % h.LineStyle='--';
h1=streamslice(Ex,Ey);
set(h1,'Color',[0.1 0.9 0.8]);
for j=1:length(h1)
    ui = interp2(U,h1(j).XData,h1(j).YData);
    h1(j).ZData = ui;
end

3.4三维图结果

修改前

 修改后

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鸽呜顾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值