Using the value of the next step in a FOR loop over a vector

1 次查看(过去 30 天)
Hi everybody,
is it possible to use in a for loop over a vector the value of the next step?
e.g. if got a vector like this:
h_x=[0 0 0 -2 -15 -100 -50 50 0 0 0 0]
and a loop using the vector
for test=h_x
if test==0
disp('No')
else
if test-1 ==0
a=test %when the value of the step before was 0, it should just use the value of the current step without any operations into a new Vector 'a'
if test+1 ==0
a=test %when the value of the step after is 0, it should just use the value of the current step without any operations into a new Vector 'a'
end
end
a=h_x+(10*(test+1))+(10*(test-1)) %Here the current value and 10 times the value of the vector step befor and after should be put into the new vector 'a'
end
end
This should result in a vector a like this:
a=[0 0 0 -2 (-15+(10*-2)+(10*-100)) (-100+(10*-15)+(10*-50)) (-50+(10*-100)+(10*50)) 50 0 0 0 0]
a=[0 0 0 -2 -1035 -750 -550 50 0 0 0 0]
Does anyone has a hint for me how to include the next steps of the for loop into the formula?
Thank you in advance and very best
Christian

采纳的回答

Stephen23
Stephen23 2020-10-5
编辑:Stephen23 2020-10-5
"Does anyone has a hint for me how to include the next steps of the for loop into the formula?"
In MATLAB it is much better to loop over indices, rather than looping over data values. Then your task is easy:
h_x = [0,0,0,-2,-15,-100,-50,50,0,0,0,0];
a = h_x; % preallocate
for k = 2:numel(h_x)-1 % loop over indices!
v = h_x(k-1:k+1); % sub-vector
if all(v([1,3])) % non-zero
a(k) = v*[10;1;10];
end
end
giving:
>> out
out =
0 0 0 -2 -1035 -750 -550 50 0 0 0
Or you could avoid the loop entirely:
>> x = [0,h_x(1:end-1)];
>> y = [h_x(2:end),0];
>> z = x&y; % non-zero
>> a = [10,1,10]*[x.*z;h_x;y.*z]
a =
0 0 0 -2 -1035 -750 -550 50 0 0 0

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by