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三维图结果:
完善前
完善后
(三维图的部分完善了个寂寞,感觉还不如一开始的样子)