在matlab中绘制向量场

计算科学 matlab 向量 电磁学
2021-12-17 12:42:31

我有以笛卡尔坐标表示的电偶极子的功能,我想使用 Matlab 创建矢量场。

功能是

Ez=p4πϵ0(3z2r51r3)
Ex=p4πϵ03xzr5.
.

我想出的代码是:

clear;
clc;
p = 1;
e = 8.85*10^(-12);
x  =linspace(-5 , 5, 50);
z = linspace(-5 , 5 ,50);
[X, Z ] = meshgrid(x,z );
R=sqrt(X.^2+Z.^2) ; 
EX =( p .* 3 .* X .* Z )./ (4.*pi.*e ./ R.^5);
EZ = p./( 4 .* pi .* e ) .* ( 3.* Z.^2 ./R.^5 -1./ R.^3);
quiver ( X , Z , EX , EZ ) ; 

但它并没有给我想要的输出,看起来像这样 在此处输入图像描述

有没有人有任何想法?我会很感激!

2个回答

对于绘图,如果您想缩放箭头,我认为不使用网格网格更容易。你有一个向量场(EX,EZ)您可以像下面的代码一样简单地对其进行规范化:

clear;
clc;
p = 1;
e = 8.85*10^(-12);
x  =linspace(-5 , 5, 20);
z = linspace(-5 , 5 ,20);

for i = 1:length(x)
    for k = 1:length(z)
        R=sqrt(x(i)^2 + z(k)^2) ; 
        EX =( p * 3 * x(i) * z(k) ) / (4 * pi * e / R^5);
        EZ = p / ( 4 * pi * e ) * ( 3 * z(k)^2 / R^5 - 1 / R^3);
        ex(i, k) = EX / sqrt(EX^2 + EZ^2);
        ez(i, k) = EZ / sqrt(EX^2 + EZ^2);
    end
end
scaleFactor = 0.5; 
quiver ( x , z , ex , ez, scaleFactor, 'LineWidth', 2); 
axis([-5 5 -5 5])

为了使箭头看起来更好,您可以使用 Matlab 的绘图操纵器。

这就是我的做法。标准化所有内容,使箭头大小相同,并在原点删除 NaN。

p = 1;
eps0 = 8.854e-12;

x = linspace(-5,5,20);
z = x;

[xx,zz] = meshgrid(x,z);

rr = sqrt(xx.^2 + zz.^2);

ex = p/(4*pi*eps0) .* (3.*xx.*zz)./(rr.^5);
ez = p/(4*pi*eps0) .* (3.*zz.^2./rr.^5 - 1./rr.^3);

E = sqrt(ex.^2 + ez.^2);
E(isnan(E)) = max(E(:));

figure;
    quiver(x,z,ex./E,ez./E)