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 ?

 채택된 답변

Thorsten
Thorsten 2015년 10월 14일
편집: Thorsten 2015년 10월 14일
invert = 1;
for i = 1:numel(u)
if u(i) == 0.01
invert = -invert;
elseif invert<0
u(i) = -u(i);
end
end

댓글 수: 1

Sai
Sai 2015년 10월 15일
Thanks for your answer, very simple and elegant :)

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Eng. Fredius Magige
Eng. Fredius Magige 2015년 10월 14일

0 개 추천

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
Stephen23
Stephen23 2015년 10월 14일
편집: Stephen23 2015년 10월 14일
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

Sai
Sai 2015년 10월 15일
Thanks for your answer, You've introduced me to new concept. :)
Stephen23
Stephen23 2015년 10월 16일
편집: Stephen23 2015년 10월 16일
My pleasure. You can also vote for answers that introduce you to new concepts!

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터 및 File Exchange에서 MATLAB에 대해 자세히 알아보기

제품

질문:

Sai
2015년 10월 14일

편집:

2015년 10월 16일

Community Treasure Hunt

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

Start Hunting!

Translated by