matlab平台
应用contourslice函数与streamslice函数分别完成等势线与电场线的绘制
对于电场线和等势面的计算,有以下两种思路:
1.由点电荷在某点处的电场强度表达式,与叠加定理相结合进行计算。
2.由电场与电压的关系,与叠加定理相结合进行计算。
经过进一步分析,由于矢量计算与矢量空间合成在建模上有一定复杂性,本次仿真采用方法2进行验+证,具体分析如下:
由电场和电势的数值关系,可得:
上式中, 为梯度算子。假设空间中有场源S(x0,y0,z0),有电荷Q,其在P(x,y,z)点的电势为: ,其中 。再由叠加定理,可以得到,对于有N个电荷的系统而言,点P(x,y,z)的电势为
(3)
结合(2)与(3),即可求出一个点电荷体系中的电场强度和电势分布。
map_size=[100,100,100]; % 图窗大小
a=[40,0,-2;-40,0,2]; % 电荷位置 eg.[-4,0,0;4,0,0]
Q=[-1,1]; % 每个电荷带电量 eg.[-1,1]
% 程序编写设计----可自由更改电荷的数量和位置
radius = 0.05; % 点电荷的半径
k = 9e+9; % k = 1/(4πε)
limitdist = 1; % 避免出现无限大情况
q = 1.602e-19; % 元电荷电量初始化
angles = linspace(-pi, pi, 20);
x=map_size(1);
y=map_size(2);
z=map_size(3);
[X, Y, Z] = meshgrid(-x : 2*x/80 : x, -y : 2*y/80 : y,-z : 2*z/80 : z); % 张成三维网格平面
ls=size(a);
l=ls(1);
r={};
for i=(1:l)
r{1,i}=sqrt((X - a(i,1)).^2 + (Y-a(i,2)).^2 + (Z-a(i,3)).^2 + limitdist); % 网格平面中的每个点到每个电荷之间的距离
end
hold on;
V1=zeros(size(X));
for i=(1:l)
V1=V1+Q(i)*q*(k./r{1,i}); % 每个电荷对(x,y, z)点的电势均有影响,累加求得电势
end
%绘制等势线
min1 = min(min(min(V1)));
max1 = max(max(max(V1)));
range = linspace(min1, max1, 200);
contourslice(X, Y, Z, V1, range);
view(3)
%绘制电力线
[Ex, Ey, Ez] = gradient(-V1); % 电势的负梯度求解电场强度
for i=(1:l)
if Q(i)>0
factor=1;
else
factor=-1;
end
startlx = a(i,1) + radius*cos(angles);
startrx = a(i,1) + radius*cos(angles);
startly = a(i,2) + radius*sin(angles);
startry = a(i,2) + radius*sin(angles);
startlz = a(i,3) + radius*cos(angles);
startrz = a(i,3) + radius*cos(angles);
streamslice(X, Y, Z, factor*Ex, factor*Ey, factor*Ez, startlx, startly, startlz);
streamslice(X, Y, Z, factor*Ex, factor*Ey, factor*Ez, startrx, startry, startrz);
end
view(3)
for i=(1:l)
%标记点电荷
q1=Q(i);
locx=a(i,1);
locy=a(i,2);
locz=a(i,3);
if(q1>0)
plot3(locx, locy, locz, 'r+', 'MarkerSize', 5);
elseif(q1<0)
plot3(locx, locy,locz, 'ro', 'MarkerSize', 5);
end
end
view(3)
legend('等位线','电场线')
title('多点电荷电力线与等位线示意图');