Replacing for loop in order to decrease run time
조회 수: 2 (최근 30일)
이전 댓글 표시
I'm trying to add the difference between 2 arrays (if A(i) > B(i)) to the next element of array A. I'm unsure how to decrease the time needed to run this code (it'll be integrated using ode45)
for i = 1:length_chain_classes
if Rate_array(i) > ChainLengths(i) %% if more glucose gets designated to class than it can accept, at surplus to next class
Surplus_g1p = Rate_array(i) - ChainLengths(i);
Rate_array(i) = ChainLengths(i);
if i ~= length(Rate_array) %% voids surplus only if at last class
Rate_array(i+1) = Rate_array(i+1) + Surplus_g1p;
end
end
end
I'm unsure how to reference the next/previous value in a vector without using a for loop
댓글 수: 2
Tommy
2020년 4월 24일
It seems like the order in which this loop runs does matter, as you might change Rate_array(i+1) on one iteration, thereby changing the result of Rate_array(i) > ChainLengths(i) on the next iteration. Therefore, vectorizing this code may leave you with incomplete results. You could solve the issue by rerunning the code until you know you're done, demonstrated below using sample A and B vectors:
A = randi(10,10,1);
B = randi(10,10,1);
i = A>B;
while any(i)
sg = A-B;
A(i) = B(i);
A([false; i(1:end-1)]) = A([false; i(1:end-1)]) + sg([i(1:end-1); false]);
i = A>B;
end
There may be a better way. This at least shows how you can "reference the next/previous value in a vector without using a for loop."
답변 (1개)
Athul Prakash
2020년 4월 30일
Hi Bastiaan,
I think this way you can solve it. Below is how yo
D = A(1, end-1) - B(1, end-1);
D = [0; D] % ';' Assuming A & B are col vectors. Otherwise use ','
A = A + D;
Hope it helps!
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!