How to pass control from one loop to the other loop

2 vues (au cours des 30 derniers jours)
Sai
Sai le 14 Oct 2015
Modifié(e) : Stephen23 le 16 Oct 2015
My aim is to alter a data sample in such a way that the sign of values in between 0.01 to next 0.01 are altered.
Like for example; if given sample is
{0.3,0.21,0.9,0.3,0.01,0.3,0.4,0.32,0.01,0.9,0.97}
My code has to give the output as
{0.3,0.21,0.9,0.3,0.01,-0.3,-0.4,-0.32,0.01,0.9,0.97}
So, I'm trying to write a nested loop to read the sample and alter the sign in between 0.01 to next 0.01
for n=1:100000
if u(n)=0.01
for m=n+1:10000
if u(m)=0.01
% switch to the original 'n' loop
end
u(m)=-1*u(m);
end
end
end
But, I'm unable to switch to the original loop. Anyone suggest, how can I switch between them ?

Réponse acceptée

Thorsten
Thorsten le 14 Oct 2015
Modifié(e) : Thorsten le 14 Oct 2015
invert = 1;
for i = 1:numel(u)
if u(i) == 0.01
invert = -invert;
elseif invert<0
u(i) = -u(i);
end
end
  1 commentaire
Sai
Sai le 15 Oct 2015
Thanks for your answer, very simple and elegant :)

Connectez-vous pour commenter.

Plus de réponses (2)

Eng. Fredius Magige
Eng. Fredius Magige le 14 Oct 2015
try this
for n=1:100000 if(find(sample(:)==0.01,1)=<find(sample(:)==0.01,2)) % sample is your data num=-1*sample(:,n) else num=sample(:,n) end
  1 commentaire
Sai
Sai le 15 Oct 2015
Thanks for your suggestion :). It worked

Connectez-vous pour commenter.


Stephen23
Stephen23 le 14 Oct 2015
Modifié(e) : Stephen23 le 14 Oct 2015
There is no need for slow and inefficient loops when code vectorization is faster and neater:
>> tol = 0.0005;
>> val = 0.01;
>> V = [0.3,0.21,0.9,0.3,0.01,0.3,0.4,0.32,0.01,0.9,0.97];
>> idx = abs(V-val)<tol;
>> idy = mod(cumsum(idx),2);
>> idz = (-1).^(idy&[false,idy(1:end-1)]);
>> V.*idz
ans =
0.3 0.21 0.9 0.3 0.01 -0.3 -0.4 -0.32 0.01 0.9 0.97
  2 commentaires
Sai
Sai le 15 Oct 2015
Thanks for your answer, You've introduced me to new concept. :)
Stephen23
Stephen23 le 16 Oct 2015
Modifié(e) : Stephen23 le 16 Oct 2015
My pleasure. You can also vote for answers that introduce you to new concepts!

Connectez-vous pour commenter.

Catégories

En savoir plus sur MATLAB dans Help Center et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by