使用箭袋在matlab中绘制矢量函数

Plot vector function in matlab using quiver

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

函数是

enter image description here

enter image description here

我想出的代码是:

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 ) ; 

但它没有给我想要的输出,看起来像这样

有人有什么想法吗?我将不胜感激!

我之前的尝试没有成功,我再试一次。 :) 我相信您已经非常接近解决方案了。我注意到两件事。

首先,我认为您在 EX 的 MATLAB 方程式中有错字。不应该是EX =( p .* 3 .* X .* Z ./ R.^5 )./ (4.*pi.*e );来对应你写的等式吗?

其次,从等长向量来看,您作为示例显示的图似乎显示了场的方向(但不是大小)。原始向量在幅度上变化很大,因此并没有真正全部显示在图中。这是因为它们随着 1/r^31/r^5 的函数而减少 - 如此之快以至于无法看到与接近原点的那些相比较小的任何一个。

所以我决定尝试使用 EX 的固定方程,并在绘制它们之前将向量 [EX(jj) EZ(jj)] 归一化为单位长度(也稍微改变了绘图范围):

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

%// normalize the vectors so the arrows are visible
V = [EX(:) EZ(:)];
Vn = bsxfun(@rdivide, V, sqrt(sum(V.^2,2)));
Exn = reshape(Vn(:,1), size(EX));
Ezn = reshape(Vn(:,2), size(EZ));

quiver ( X , Z , Exn , Ezn ) ; 

这是最终结果,稍微放大了 - 更好?

顺便说一下,您可以通过调整构建网格的矢量来控制绘图的分辨率。希望您能找到合适的选择!