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

由镜像法可知,对于夹角为θ=2Π/n的导体劈,则其对应的镜像电荷数为2n-1个,分别位于每一个镜像区域中,正负号交替出现。

其中电荷量:q=1e-6

常系数:k= 8.9875e9

3.源代码与结果:

3.1点电荷位于无限大导体平面上方:

3.1.1原理:

 3.1.2二维图源代码:

[x,y]=meshgrid(-20:1:20,-20:1:20); 
Xi=1;
h=7.2;
q1=4*pi*Xi;
q2=-q1; 
U=(q1./sqrt(x.^2+(y-h).^2) + q2./sqrt(x.^2+(y+h).^2))./4*pi*Xi;
S=-10:0.8:10; 
contour(x,y,U,S,'--');
[Ex,Ey]=gradient(-U);
hold on
plot(0,h,'o','MarkerSize',5);
plot(0,-h,'o','MarkerSize',5);
plot([-20,20],[0,0],'k','linewidth',2);

th1=0:2*pi/20:2*pi;
 
r0=0.65;
x1=r0*cos(th1);
y1=h+r0*sin(th1);
for i=1:20
    line1=streamline(x,y,Ex,Ey,x1(i),y1(i));
    set(line1,'LineWidth',1);
    if i>2 && i <10
        pipi=drawEline(line1,100,101);
    elseif i >=14  && i<=18
        pipi=drawEline(line1,70,71);
    else
        pipi=drawEline(line1,150,151);
    end
    set(pipi,'HeadWidth',7,'HeadLength',7,'Color','b')
end
    
x2=r0*cos(th1);
y2=-h+r0*sin(th1);
for i=13:19
    line2=streamline(x,y,-Ex,-Ey,x2(i),y2(i));
    set(line2,'LineWidth',1);
    pipi=drawEline(line2,100,101);
    set(pipi,'HeadWidth',7,'HeadLength',7,'Color','b')
end

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

contour(x,y,U,S,'--');
r0=0.65;
x1=r0*cos(th1);
y1=h+r0*sin(th1);
for i=1:20
    line1=streamline(x,y,Ex,Ey,x1(i),y1(i));
    set(line1,'LineWidth',1,'linestyle','--');
    if i>2 && i <10
        pipi=drawEline(line1,100,101);
    elseif i >=14  && i<=18
        pipi=drawEline(line1,70,71);
    else
        pipi=drawEline(line1,150,151);
    end
    set(pipi,'HeadWidth',7,'HeadLength',7,'Color','b')
end
    
x2=r0*cos(th1);
y2=-h+r0*sin(th1);
for i=13:19
    line2=streamline(x,y,-Ex,-Ey,x2(i),y2(i));
    set(line2,'LineWidth',1,'linestyle','--');
    pipi=drawEline(line2,100,101);
    set(pipi,'HeadWidth',7,'HeadLength',7,'Color','b')
end

title('点电荷对无限大接地导体平面的镜像')  ;
xlabel('x') ;
ylabel('y');

3.1.3二维图截图:

完善前

完善后

 3.1.4三维图代码:

[x,y]=meshgrid(-25:1:25,-25:1:25); 
Xi=1;
h=7.2;
q1=4*pi*Xi;
q2=-q1; 
U=(q1./sqrt(x.^2+(y-h).^2) + q2./sqrt(x.^2+(y+h).^2))./4*pi*Xi;
u0=(q1./1.5 + q2./12.9)./4*pi*Xi;
u = linspace(-8*u0,8*u0,501);
x = linspace(-0.3,0.3,60);
y = linspace(-0.16,0.16,60);
[X,Y] = meshgrid(x);
[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.1.5三维图截图:

完善前

完善后

3.2点电荷位于60度导体劈:

3.2.1原理:

在夹角为六十度的导体劈中放置一个点电荷(为简化模型,不妨将电荷放置于导体劈的60度角平分线上),则

 3.2.2二维图源代码:( 这个做起来最难受了,叠了好几层,想了好久)

k = 8.9875e9;
d = 0.05;
b = d/sqrt(3);
q0 = 1e-6;
q1 = -q0;
q2 = q0;
q3 = -q0;
q4 = q0;
q5 = -q0;
 
axis([-0.1 0.1 -0.1 0.1])

x = linspace(-0.1,0.1,100);
y = linspace(-0.1,0.1,100);
[X,Y] = meshgrid(x,y);
 
r0 = sqrt((X - d).^2 + (Y - b).^2);
r1 = sqrt(X.^2 + (Y - 2*b).^2);
r2 = sqrt((X + d).^2 + (Y - b).^2);
r3 = sqrt((X + d).^2 + (Y + b).^2);
r4 = sqrt(X.^2 + (Y + 2*b).^2);
r5 = sqrt((X - d).^2 + (Y + b).^2);
U = k * q0./r0 + k * q1./r1 + k * q2./r2 + k * q3./r3 + k * q4./r4 + k * q5./r5;
u = linspace(-5000000,5000000,101);
[C,H] = contour(X,Y,U,u,'k-');
contour(X,Y,U,u,'c-');
% plot( d,b,'r.','MarkerSize',20);
hold on;

x = linspace(0,0.1,100);
y = linspace(0,0.1,100);
[X,Y] = meshgrid(x,y);
r0 = sqrt((X - d).^2 + (Y - b).^2);
r1 = sqrt(X.^2 + (Y - 2*b).^2);
r2 = sqrt((X + d).^2 + (Y - b).^2);
r3 = sqrt((X + d).^2 + (Y + b).^2);
r4 = sqrt(X.^2 + (Y + 2*b).^2);
r5 = sqrt((X - d).^2 + (Y + b).^2);
U = k * q0./r0 + k * q1./r1 + k * q2./r2 + k * q3./r3 + k * q4./r4 + k * q5./r5;
u = linspace(-500000,5000000,1001);
[Ex,Ey] = gradient(-U);
E = sqrt(Ex.^2 + Ey.^2);
Ex = Ex./E;
Ey = Ey./E;
th=linspace(0,2*pi,30);
x1=d+0.0001*cos(th);
y1=b+0.0001*sin(th);
for i=1:30
    h1 = streamline(X,Y,Ex,Ey,x1(i),y1(i));
    set(h1,'LineWidth',1);
    pipi=drawEline(h1,280,281);
    set(pipi,'HeadWidth',4,'HeadLength',4,'Color','k')
end
 

x = linspace(-0.1,0,100);
y = linspace(0,0.1,100);
[X,Y] = meshgrid(x,y);
r0 = sqrt((X - d).^2 + (Y - b).^2);
r1 = sqrt(X.^2 + (Y - 2*b).^2);
r2 = sqrt((X + d).^2 + (Y - b).^2);
r3 = sqrt((X + d).^2 + (Y + b).^2);
r4 = sqrt(X.^2 + (Y + 2*b).^2);
r5 = sqrt((X - d).^2 + (Y + b).^2);
U = k * q0./r0 + k * q1./r1 + k * q2./r2 + k * q3./r3 + k * q4./r4 + k * q5./r5;
u = linspace(-500000,5000000,1001);
[Ex,Ey] = gradient(-U);
E = sqrt(Ex.^2 + Ey.^2);
Ex = Ex./E;
Ey = Ey./E;
th=linspace(0,2*pi,30);
x1=-d+0.0001*cos(th);
y1=b+0.0001*sin(th);
for i=1:30
    h1 = streamline(X,Y,Ex,Ey,x1(i),y1(i));
    set(h1,'LineWidth',1,'linestyle','--');
    pipi=drawEline(h1,280,281);
    set(pipi,'HeadWidth',4,'HeadLength',4,'Color','b')
end

x = linspace(0,-0.1,100);
y = linspace(0,-0.1,100);
[X,Y] = meshgrid(x,y);
r0 = sqrt((X - d).^2 + (Y - b).^2);
r1 = sqrt(X.^2 + (Y - 2*b).^2);
r2 = sqrt((X + d).^2 + (Y - b).^2);
r3 = sqrt((X + d).^2 + (Y + b).^2);
r4 = sqrt(X.^2 + (Y + 2*b).^2);
r5 = sqrt((X - d).^2 + (Y + b).^2);
U = k * q0./r0 + k * q1./r1 + k * q2./r2 + k * q3./r3 + k * q4./r4 + k * q5./r5;
u = linspace(-500000,5000000,1001);
[Ex,Ey] = gradient(-U);
E = sqrt(Ex.^2 + Ey.^2);
Ex = Ex./E;
Ey = Ey./E;
th=linspace(0,2*pi,30);
x1=-d+0.0001*cos(th);
y1=-b+0.0001*sin(th);
for i=1:30
    h1 = streamline(X,Y,Ex,Ey,x1(i),y1(i));
    set(h1,'LineWidth',1,'linestyle','--');
    pipi=drawEline(h1,285,284);
    set(pipi,'HeadWidth',4,'HeadLength',4,'Color','b')
end

x = linspace(0.1,0,100);
y = linspace(0,-0.1,100);
[X,Y] = meshgrid(x,y);
r0 = sqrt((X - d).^2 + (Y - b).^2);
r1 = sqrt(X.^2 + (Y - 2*b).^2);
r2 = sqrt((X + d).^2 + (Y - b).^2);
r3 = sqrt((X + d).^2 + (Y + b).^2);
r4 = sqrt(X.^2 + (Y + 2*b).^2);
r5 = sqrt((X - d).^2 + (Y + b).^2);
U = k * q0./r0 + k * q1./r1 + k * q2./r2 + k * q3./r3 + k * q4./r4 + k * q5./r5;
u = linspace(-500000,5000000,1001);
[Ex,Ey] = gradient(-U);
E = sqrt(Ex.^2 + Ey.^2);
Ex = Ex./E;
Ey = Ey./E;
th=linspace(0,2*pi,30);
x1=d+0.0001*cos(th);
y1=-b+0.0001*sin(th);
for i=1:30
    h1 = streamline(X,Y,Ex,Ey,x1(i),y1(i));
    set(h1,'LineWidth',1,'linestyle','--');
    pipi=drawEline(h1,285,284);
    set(pipi,'HeadWidth',4,'HeadLength',4,'Color','b')
end


fill([0,0,0.1/sqrt(3)],[0,0.1,0.1],'w','edgecolor','w');

x = linspace(0,0.1,100);
y = linspace(0,0.1,100);
[X,Y] = meshgrid(x,y);
r0 = sqrt((X - d).^2 + (Y - b).^2);
r1 = sqrt(X.^2 + (Y - 2*b).^2);
r2 = sqrt((X + d).^2 + (Y - b).^2);
r3 = sqrt((X + d).^2 + (Y + b).^2);
r4 = sqrt(X.^2 + (Y + 2*b).^2);
r5 = sqrt((X - d).^2 + (Y + b).^2);
U = k * q0./r0 + k * q1./r1 + k * q2./r2 + k * q3./r3 + k * q4./r4 + k * q5./r5;
u = linspace(-500000,5000000,1001);
[Ex,Ey] = gradient(-U);
E = sqrt(Ex.^2 + Ey.^2);
Ex = Ex./E;
Ey = Ey./E;
th=linspace(0,2*pi,30);
x1=d+0.0001*cos(th);
y1=b+0.0001*sin(th);
for i=1:30
    h1 = streamline(X,Y,Ex,Ey,x1(i),y1(i));
    set(h1,'LineWidth',1,'linestyle','--');
%     pipi=drawEline(h1,170,171);
%     set(pipi,'HeadWidth',7,'HeadLength',7,'Color','b')
end

x = linspace(-0.1,0.1,100);
y = linspace(-0.1,0.1,100);
[X,Y] = meshgrid(x,y);
r0 = sqrt((X - d).^2 + (Y - b).^2);
r1 = sqrt(X.^2 + (Y - 2*b).^2);
r2 = sqrt((X + d).^2 + (Y - b).^2);
r3 = sqrt((X + d).^2 + (Y + b).^2);
r4 = sqrt(X.^2 + (Y + 2*b).^2);
r5 = sqrt((X - d).^2 + (Y + b).^2);
U = k * q0./r0 + k * q1./r1 + k * q2./r2 + k * q3./r3 + k * q4./r4 + k * q5./r5;
u = linspace(-5000000,5000000,101);
[C,H] = contour(X,Y,U,u,'k-');
contour(X,Y,U,u,'c-');

plot([0,0.1/sqrt(3)],[0,0.1],'k-','LineWidth',3);
plot([0,0.1],[0,0],'k-','LineWidth',3);%画出导体劈
plot( d,b,'r.','MarkerSize',20);
plot( -d,b,'r.','MarkerSize',20);
plot( 0,sqrt(b^2+d^2),'y.','MarkerSize',20);
plot( 0,-sqrt(b^2+d^2),'r.','MarkerSize',20);
plot( -d,-b,'y.','MarkerSize',20);
plot( d,-b,'y.','MarkerSize',20);
title('镜像法——60度导体劈 ','fontsize',15);

3.2.3二维图结果:

完善前

 

完善后

 

 3.2.4三维图源代码:

k = 8.9875e9;
d = 0.05;
b = d/sqrt(3);
q0 = 1e-6;
q1 = -q0;
q2 = q0;
q3 = -q0;
q4 = q0;
q5 = -q0;
%题目中的电荷,半径等参数

x = linspace(-0.1,0.1,118);
y = linspace(-0.1,0.1,118);
[X,Y] = meshgrid(x,y);
%生成网格

r0 = sqrt((X - d).^2 + (Y - b).^2);
r1 = sqrt(X.^2 + (Y - 2*b).^2);
r2 = sqrt((X + d).^2 + (Y - b).^2);
r3 = sqrt((X + d).^2 + (Y + b).^2);
r4 = sqrt(X.^2 + (Y + 2*b).^2);
r5 = sqrt((X - d).^2 + (Y + b).^2);
U = k * q0./r0 + k * q1./r1 + k * q2./r2 + k * q3./r3 + k * q4./r4 + k * q5./r5;
%由已知值计算出电势表达式

u = linspace(-40000000,40000000,2001);
[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.2.5三维图结果:

完善前

 完善后

 

(三维图的部分完善了个寂寞,感觉还不如一开始的样子)

### 使用MATLAB绘制接地导体外部点电荷的静电场 为了实现这一目标,可以采用镜像电荷来求解该问题。具体来说,在距离球心 \( d_1 \) 处放置一个实际点电荷 \( q \),则可以在球内找到一个位置使得引入的虚设电荷能够满足边界条件——即球表面保持零电势。 #### 镜像电荷的位置和大小 对于位于 \( (0, 0, d_1) \) 的正电荷 \( q \),其对应的负镜像电荷 \( -\frac{a^2}{d_1} \)[^1]。这里 \( a \) 是导体球的半径,而 \( d_1 \) 表示外置点电荷到球中心的距离。因此,\( q'=\left(\frac{a}{d_1}\right)^3q \)。 #### 计算总电位 整个空间内的任意一点 P(x,y,z) 上总的电位 V 可由这两个电荷共同贡献得出: \[V(P)=k_e\left[\frac{q}{r_{PQ}}-\frac{\left(a/d_1\right)^3q}{r_{PR'}}\right]\] 其中 \( k_e=8.99\times10^{9}Nm^2/C^2 \) 是库仑常数;\( r_{PQ}=|QP| \), \( r_{PR'}=|QR'| \) 分别代表从 Q 和 R’ 到 P 点的距离向量长度。 #### 绘制等位面图 利用上述公式编写 MATLAB 脚本以生成三维网格数据,并调用 `surf` 函数展示不同高度上的等位线图形。下面是一个简单的例子: ```matlab % 参数设定 ke = 8.99e9; % Coulomb's constant a = 1; % Sphere radius d1 = 2*a; % Distance of point charge from sphere center q = 1; % Charge value [X,Y,Z]=meshgrid(linspace(-3*a,3*a,50)); R=sqrt(X.^2+Y.^2+(Z-d1).^2); Rp=sqrt(X.^2+Y.^2+(Z+a^2./d1).^2); V=(ke*q*(1./R-(a/d1)^3./(Rp))); figure; isosurface(X,Y,Z,V,-Inf,'FaceColor','red','EdgeColor','none'); hold on; contourslice(X,Y,Z,V,X(1,:),[],[]); colorbar; xlabel('X axis'); ylabel('Y axis'); zlabel('Z axis'); title(['Potential Distribution around Grounded Conducting Sphere and Point Charge']); axis equal tight vis3d; view([30 30]); shading interp; lightangle(45,30); camlight headlight; material shiny; ``` 此脚本创建了一个包含多个切片视图的图像窗口,用于表示围绕着带有点电荷的接地金属球周围的电位分布情况。 #### 特性分析 当存在这样的配置时,由于导体内部不存在净自由电荷,所以所有的感应电荷都集中在表面上形成均匀分布的状态。这导致了在靠近导体的地方出现了强烈的局部畸变效应,而在远离区域逐渐趋于正常的空间衰减趋势。此外,因为采用了镜像处理边界条件,故而保证了导体表层始终维持在一个固定的零伏特水平上。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鸽呜顾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值