2015-12-02 240 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