2017-11-11 3 views
0

Hier ist ein Code, um das elektrische Potential um zwei entgegengesetzt geladene Teilchen zu simulieren:Fehler beim Versuch, Contour-Ebenen zu verwalten?

clc; clear; close all; 

e_0 = 8.987E-9;        % Coulomb's constant 
xy = [1,2.5; 4,2.5];      % particle coordinates. 
q = [1; -1];        % particle charge. 

sBeg = 0; 
sStep = 0.1; 
sEnd = 5; 
[X,Y] = meshgrid(sBeg : sStep : sEnd);  % generate a 2D-coordinate grid 

V_E = zeros(size(X));      % initialise electric potential field. 

for i = 1 : numel(q)      % add potential fields of each charge 

    V_E = V_E + e_0 * q(i) ./ hypot(xy(i,1) - X, xy(i, 2) - Y); 

end 

contourf(X,Y, V_E); 
ylabel(colorbar, 'Electric Potenial (V)') 

Ergebnis:

enter image description here

Die Konturen dicht in der Nähe der Positionen der Partikel konzentriert sind, wie „zu verbreiten sie "gleichmäßiger, während der Maßstab für die Achse beibehalten wird?

NB:

Ich habe versucht:

hc = contourf(X,Y,V_E); 

contourLevels = [ 0 quantile(V_E(:), 10) ]; 
hc.LevelList = contourLevels; 

von here, aber ich bekomme die folgende Fehlermeldung:

error: invalid assignment to cs-list outside multiple assignment

Was mache ich falsch?

I Octave-4.2.1 unter Windows 10.

Antwort

2

V_E renne scheint ein exponentielles Wachstum zu haben; Daher ist es am besten, wenn Sie ein lineares Konturbild erstellen, um dessen Logarithmus darzustellen.

Ich würde sagen, dass dies sowieso eine vernünftige Handlung ist. Aber wenn Sie müssen die ursprünglichen Größen berichten, anstatt ihre Logarithmen, können Sie einfach ändern Sie dann die ‚ticklabels‘ auf der colorbar die Werte zu reflektieren, die Sie wollen, z ..

contourf(X,Y, log(V_E)); 
ylabel(cb = colorbar, 'Electric Potenial (V)') # note added 'cb' step 
set(cb, 'yticklabel', exp(get(cb, 'ytick')))