2015-12-02 67 views
1

我有用笛卡尔坐标表示的电偶极子的函数,我想用Matlab创建矢量场。使用颤动在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

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

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

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

+0

我的朋友你是一个救星!我真的很感谢你提供给我的这个宝贵的帮助:) – Alice1nw0

+0

@ΑθηνάΠαπαδοπούλου没问题,我很高兴答案帮助你:)祝你好运与你的其余项目! – mikkola