2017-09-11 10 views
0

基本的には、特定の値を削除し、セルのセル内に他の値を保持するという問題があります。条件付きループを使用してセルの内容の値をフィルタリングする

私は距離と呼ばれるセルを作成し、2つの基準 "blockade and blockadeouter"に基づいて値を除外します。距離セルの最初のセルが空のまま残っているので、私はそうすることができませんが、より重要なのは、距離セルにとどまっている特定の範囲外の値が表示されているという意味でフィルタリングが機能していないことです。

rangeプロパティで満たす距離の座標xinit、yinit、zinitを格納し、これらの座標をposx、posy、poszに格納します。

私が作っている間違いをよく知りません。すべての助けを歓迎します。

おかげ

kb = 1.38065*10^(-23) ; %Boltzmann Constant 
amu = 1.660539040*10^-27; % atomic mass unit 
mRb= 85;%mass of Rubidium 85 
c = 299792458; % speed of light 
e=1.6021892*10^-19;%electron unit charge 
epsilon0 = 8.854 * 10^-12; 

%=============Minimum Allowable Distance/Blockade Radius===================== 
a = 12.8*10^-6; 
blockade =14*10^-6;%lower limit for filtering 
blockadeouter = blockade + a;%upper limit for filtering 

sigmax = 40; 
sigmay = 40; 
sigmaz = 0; 
%==================Number of Scan Steps==================================== 
npics =50; %number of iterations 
%=============Number of initial particles in the excitation volume in the MOT Stage=================== 
numberofparticles =100; 
%=============Creating a cell system for importing GPT Data into=========== 
distances = cell(npics,1);%Collecting all distances between particles 
posx = cell(npics,1); 
posy = cell(npics,1); 
posz = cell(npics,1); 

for n = 1 : 1 : npics 
    fprintf('%d ',n); 
    %Declaration of orgin for simulation 
    mux = 0; muy = 0; muz =0; 
    %Creating a x,y,z coordinate system for the ion 
    xinit = normrnd(mux,sigmax*10^-6,[1 numberofparticles]); 
    yinit = normrnd(muy,sigmay*10^-6,[1 numberofparticles]); 
    zinit = normrnd(muz,sigmaz*10^-6,[1 numberofparticles]); 

    for ii = 1 : 1 : numberofparticles 

     for jj = ii+1 : 1 : numberofparticles 

      distances{ii}{jj} = sqrt((xinit(ii) - xinit(jj)).^2 + (yinit(ii) - yinit(jj)).^2 + (zinit(ii) - zinit(jj)).^2); 

      if (distances{ii}{jj} >= blockade) && (distances{ii}{jj} <= blockadeouter) 
       posx{n}{jj} = xinit(jj); 
       posy{n}{jj} = yinit(jj); 
       posz{n}{jj} = 0; 
      end 

     end 
    end 
end % end of npics loop 

figure 
for ii = 1:1:length(distances) 
    trial{ii} = cell2mat(distances{ii,1}(1,:)); 
end 
trial = cell2mat(trial); 
grid on; 
title('Filtered Distances') 
hist(trial) 
+0

ではなく、セル配列に苦しんで通常の2-d数値配列を使用せず、NaNを使って欠けているデータ(以前は空の[]配列を使用していた場所)を示すのはなぜですか?例えば。 '距離= NaN(npics、numberofparticles);'のようなものを初期化し、 'posx'、' posy'、 'posz'に対して' distance(ii、jj)= ... 'を使います。 – Justin

答えて

0

私は条件文で問題だったかわからないが、私は次の操作を行って問題を解決することができました:

for ii = 1 : 1 : numberofparticles 

     for jj = ii+1 : 1 : numberofparticles 

      distances{ii}{jj} = sqrt((xinit(ii) - xinit(jj)).^2 + (yinit(ii) - yinit(jj)).^2 + (zinit(ii) - zinit(jj)).^2); 
      if distances{ii}{jj} > blockadeouter 
       distances{ii}{jj} = []; 
      end 

      if distances{ii}{jj} < blockade 
       distances{ii}{jj} = []; 
      else 
       posx{n}{jj} = xinit(jj); 
       posy{n}{jj} = yinit(jj); 
       posz{n}{jj} = zinit(jj); 
      end 

     end 
    end 
関連する問題