avoid negative index in array or matrix

조회 수: 4 (최근 30일)
Damiano Capocci
Damiano Capocci 2017년 12월 17일
답변: Damiano Capocci 2017년 12월 17일
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
Stephen23
Stephen23 2017년 12월 17일
편집: Stephen23 2017년 12월 17일
Use
if
Or change the loop index range.
David Goodmanson
David Goodmanson 2017년 12월 17일
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).

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

채택된 답변

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

추가 답변 (2개)

Jos (10584)
Jos (10584) 2017년 12월 17일
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 2017년 12월 17일
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

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by