2017-11-11 15 views
0

は、2個の反対に帯電した粒子の周りの電位でシミュレートするコードです:輪郭レベルを管理しようとしているときにエラーが発生しましたか?ここ

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)') 

結果:

enter image description here

輪郭が「普及する方法を、粒子の位置の近くに密集していますそれらの軸を同じスケールに維持しながら、より均等に、

NB:私が試した

hc = contourf(X,Y,V_E); 

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

が、私は次のエラーを取得:

error: invalid assignment to cs-list outside multiple assignment

私が間違っているのは何を?

は、私はWindows上でオクターブ-4.2.1を実行している10

答えて

2

V_Eは指数関数的な成長を持っているようです。そのように、あなたの最良の賭けは、線形の輪郭イメージを得るために、対数をプロットすることです。

とにかくこれはもっと賢明なプロットだと思います。あなたはその対数ではなく、元の大きさを報告しなければならない場合でも、あなたは単にそれから...例えば、あなたがしたい値を反映するためにカラーバー上の「ticklabels」を変更することができます

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

関連する問題