avoid negative index in array or matrix

4 Ansichten (letzte 30 Tage)
Damiano Capocci
Damiano Capocci am 17 Dez. 2017
Beantwortet: Damiano Capocci am 17 Dez. 2017
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 Kommentare
Stephen23
Stephen23 am 17 Dez. 2017
Bearbeitet: Stephen23 am 17 Dez. 2017
Use
if
Or change the loop index range.
David Goodmanson
David Goodmanson am 17 Dez. 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).

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

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

Weitere Antworten (2)

Jos (10584)
Jos (10584) am 17 Dez. 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 am 17 Dez. 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

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by