2015-12-02 5 views
1

У меня есть функция электрического диполя, выраженная в декартовых координатах, и я хочу создать векторное поле с использованием 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) ; 

Но это не дает мне выход I хотите, чтобы он выглядел следующим образом: enter image description here

У кого-нибудь есть идеи? Буду признателен!

ответ

1

Поскольку моя предыдущая попытка не увенчалась успехом, я дам ей еще одну попытку. :) Я считаю, что вы очень близки к решению. Есть две вещи, которые я заметил.

Во-первых, я считаю, что у вас есть опечатка в уравнении MATLAB для EX. Разве это не должно быть EX =(p .* 3 .* X .* Z ./ R.^5)./ (4.*pi.*e);, чтобы соответствовать вашему письменному уравнению?

Во-вторых, фигура, отображаемая в качестве примера, кажется, показывает направление (но не величину) поля, судя по векторам равной длины. Первоначальные векторы варьируются в некоторой степени по величине, и, следовательно, на самом деле все они не появляются в сюжете. Это связано с тем, что они уменьшаются в зависимости от 1/r^3 или 1/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