J'ai essentiellement le problème de supprimer certaines valeurs et d'en conserver d'autres dans une cellule de cellules.Boucle conditionnelle pour filtrer les valeurs de contenu de cellule
Je crée une cellule appelée distances, puis je souhaite filtrer les valeurs en fonction des deux critères "blockade et blockadeouter". Je suis incapable de le faire avec les cellules initiales dans la cellule de distance restant vide, mais plus important encore, le filtrage ne fonctionne pas dans le sens où je vois des valeurs en dehors de la gamme spécifiée restant dans la cellule de distance.
Je veux stocker les coordonnées xinit, yinit, zinit pour les distances qui satisfont par la propriété range et stocker ces coordonnées dans le posx, posy, posz.
Je ne suis pas sûr de l'erreur que je commets. Toute aide est la bienvenue.
Merci
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)
Plutôt que de lutter avec des réseaux cellulaires des tableaux de cellules, pourquoi ne pas utiliser des tableaux numériques 2-D réguliers et utiliser NaN pour indiquer les données manquantes (où vous utilisiez des tableaux vides [] avant)? Par exemple. initialiser quelque chose comme ceci 'distances = NaN (npics, numberofparticles);' et ensuite utiliser 'distances (ii, jj) = ...', et similaire pour 'posx',' posy' et 'posz'. – Justin