2017-09-11 8 views
0

기본적으로 특정 값을 삭제하고 다른 셀을 셀 셀에 유지하는 문제가 있습니다.조건부 루프 셀 내용 값 필터링

나는 distance라는 셀을 생성 한 다음 "blockade and blockadeouter"라는 두 가지 기준에 따라 값을 필터링하려고합니다. 나는 거리 셀의 초기 셀을 비워 둘 수는 없지만 더 중요한 것은 필터링이 거리 셀에 머문 특정 범위를 벗어난 값을 보았다는 의미에서 작동하지 않는다는 것입니다.

범위 속성을 만족하는 거리에 대해 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 차원 숫자 배열을 사용하지 않고 NaN을 사용하여 누락 된 데이터를 나타낼 수 있습니다 (이전에 빈 [] 배열을 사용했던 곳). 예 : 'distance = 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