avoid negative index in array or matrix

1 view (last 30 days)
I'm working on 2 loops in which i have the difference of two indices like this:
for i=1:interval_1
for j=0:interval_2
if(i-j>0)
X(i+1)=c(j+1)*X(i-j);
else
%nothing
end
end
In my situation interval_1 and interval_2 are more or less 1 million so i want to optimize and remove if/else. It would be useful if there exist a command which ignores operations with negative index. Tell me.
  2 Comments
Stephen23
Stephen23 on 17 Dec 2017
Edited: Stephen23 on 17 Dec 2017
Use
if
Or change the loop index range.
David Goodmanson
David Goodmanson on 17 Dec 2017
Hi Damiano, it looks like the j loop is overwriting X(i+1) every time, with the effect that the loop collapses down to the single j value min(interval_2,i-1).

Sign in to comment.

Accepted Answer

Roger Stafford
Roger Stafford on 17 Dec 2017
Just do this:
for i=1:interval_1
j = min(i-1,i2);
X(i+1)=c(j+1)*X(i-j);
end

More Answers (2)

Jos (10584)
Jos (10584) on 17 Dec 2017
Why not switch the loops, and let i start from j+1
for j=0:interval_2
for i=j+1:interval_1
% if(i-j>0) % this is now always true
X(i+1)=c(j+1)*X(i-j);
% else
% %nothing
% end
end
end
And then you also see immediately that X(i+1) gets overwritten all the time (as David pointed out) and X(1) is never calculated ...

Damiano Capocci
Damiano Capocci on 17 Dec 2017
Yes, all of u are right in particular david, my code is a bit complex so i've tried to explain the question giving the idea of my code but i've made a mistake. (I think) The best solution of my problem is
for k=1:interval_1 for p=0:(k-1,interval_2)
x(k+1)=x(k+1)+c(p+1)*x(k-p)
end end
tic toc gives a little improvement but however it is always a function called every step

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!