2010-06-21 8 views
1

Le code ci-dessous me donne l'erreur = Subscript indices must either be real positive integers or logicals. Parce que le premier index utilisant la fonction FIND est i = 1, le i-1 donne la valeur négative. Comment ignorer quand je == 1 sans utiliser la fonction LOOPMatlab comment ignorer le premier index = 1

fid=fopen('data.txt'); 
A=textscan(fid,'%f%f%f%f'); 
fclose(fid); 
in = cell2mat(A); 

i = find(in(1:end,2)>20 & in(1:end,2) <50); 
out=in; 
s(i)=sqrt((out(i,3)-out(i-1,3))*(out(i,3)-out(i-1,3))+(out(i,4)-out(i-1,4))*(out(i,4)-out(i-1,4))); 

fid = fopen('newData.txt','wt'); 
format short g; 
fprintf(fid,'%g\t%g\t%g\t%g\n',out',s'); %'# Write the data to the file 
fclose(fid); 

Répondre

2

vous pouvez essayer quelque chose comme ceci:

i = find(in(1:end,2)>20 & in(1:end,2) <50); 

i = i(find(i > 1)); 

Par ailleurs, soyez prudent d'utiliser i comme une variable régulière parce que vous » re remplaçant la valeur par défaut:

i = sqrt(-1)

+0

Merci ... mais il me donne cette erreur ... les dimensions de la matrice intérieure doivent être d'accord – Jessy

+2

Vous voulez probablement ". *" Pour la multiplication de matrice élémentaire plutôt que "*" pour la multiplication matricielle-matricielle – Edric

+1

Merci Edric .. – Jessy

Questions connexes