maltab绘制等量同/异号电荷电势图和电场线

先上图:

等量正电荷


等量异号电荷

maltab代码如下:

clear;
q = 1.602e-19; %元电荷带电量
Mode = input('等量正电荷请输入1,等量异号电荷请输入2,等量负电荷请输入3:');
if(Mode == 1)
    q1 = q;
    q2 = q;
elseif(Mode ==2)
    q1 = q;
    q2 = -q;
elseif(Mode == 3)
    q1 = -q;
    q2 = -q;
end   

radius = 1;   %点电荷半径

x = 20; y = 20; %x和y轴显示边界值

k = 9e+9; %k = 1/4πε
delta = 1;%引入距离误差以消除点电荷处点位无限大的问题
phi = linspace(-pi,pi,20);  %电场线发射范围

for a =1:18
    %--------------左半部分--------------%
    %计算电势
    [X,Y]=meshgrid(-x:0.5:0,-y:0.5:y);%获取左半部分矩阵
    r1=sqrt((X+a).^2 + Y.^2 + delta);
    r2=sqrt((X-a).^2 + Y.^2 + delta);
    V1=q1*(k./r1) + q2*(k./r2);
    %画等势线
    min1 = min(V1,[],"all");
    max1 = max(V1,[],"all");
    range = linspace(min1,max1,100);
    contour(X,Y,V1,range);
    hold on; 
    %计算电场强度并绘制
    if(Mode == 1)
        [Ex,Ey]=gradient(-V1);
        startx = -a + radius* cos(phi);
        starty =  radius*sin(phi);
    elseif(Mode == 2)
       [Ex,Ey]=gradient(-V1);
        startx = -a + radius* cos(phi);
        starty =  radius*sin(phi);
    elseif(Mode == 3)
        [Ex,Ey]=gradient(V1);
        startx = -a + radius*cos(phi);
        starty =  radius*sin(phi);
    end
    
    %quiver(X1,Y1,Ex1,Ey1); %绘制箭头矢量图
    
    streamline(X,Y,Ex,Ey,startx,starty); %绘制电场强度线
    
    %--------------右半部分--------------%
    %计算电势
    [X,Y]=meshgrid(0:0.5:x,-y:0.5:y);%获取左半部分矩阵
    r1=sqrt((X+a).^2 + Y.^2+delta);
    r2=sqrt((X-a).^2 + Y.^2+delta);
    V2=q1*(k./r1)+q2*(k./r2);
    %画等势线
    min2 = min(V2,[],"all");
    max2 = max(V2,[],"all");
    range2=linspace(min2, max2,100);
    contour(X,Y,V2,range2);
    hold on; 
    %计算电场强度
    if(Mode == 1)
        [Ex,Ey]=gradient(-V2);
        startx = a - radius*cos(phi);
        starty =  -radius*sin(phi);
    elseif(Mode == 2)
        [Ex,Ey]=gradient(V2);
        startx = a - radius*cos(phi);
        starty =  -radius*sin(phi);
    elseif(Mode == 3)
        [Ex,Ey]=gradient(V2);
        startx = a - radius*cos(phi);
        starty =  -radius*sin(phi);
    end
    
    %quiver(X,Y,Ex,Ey); %绘制箭头矢量图
    %phi = linspace(-pi,pi,30);%左半部分已定义
    streamline(X,Y,Ex,Ey,startx,starty);%绘制电场强度线
    %标记正电荷位置
    if(q1>0)
        plot(-a,0,'r+','MarkerSize',5)
    end
    if(q2>0)
        plot(a,0,'r+','MarkerSize',5)
    end
    hold off;
    drawnow;%刷新图窗
end

你可能感兴趣的:(其他,matlab)