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

时间:2015-12-02 18:59:28

标签: matlab plot vector-graphics

我具有以笛卡尔坐标表示的电偶极子的功能,我想使用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 ) ; 

但它并没有给我想要的输出,看起来像这样 enter image description here

有没有人有任何想法?我将不胜感激!

1 个答案:

答案 0 :(得分:1)

由于我以前的尝试没有成功,我会再试一次。 :)我相信你非常接近解决方案。我注意到了两件事。

首先,我相信你在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 ) ; 

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

field image

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