Hi,
What is an efficient way of doing the following task.
departure_time(1) = 250;
file_arrival(1) = 0.0;
for i = 2:30
departure_time(i) = arrival_time(i)+transmission_time(i)+departure_time(i-1);
end
This code is working fine for me but the matlab script editor show the message that "the variable departure_time changes size on every loop iteration. I am sure that there will be another way of achieving the same task, right?
Thank you so much.

 채택된 답변

José-Luis
José-Luis 2014년 6월 5일
편집: José-Luis 2014년 6월 5일

0 개 추천

Pre-allocate. Before departure(1) = 250, place:
departure_time = NaN .* ones(30,1);

댓글 수: 4

Aftab Ahmed Khan
Aftab Ahmed Khan 2014년 6월 5일
편집: Aftab Ahmed Khan 2014년 6월 5일
Hi, it works fine Thank you so much. Can you explain it to me that one line of yours? Plus i have few other lines as well with the same kind of situation, i think i can replace them as well, right ?
José-Luis
José-Luis 2014년 6월 5일
The thing with Matlab is if that you don't tell it what size a variable will be, it will increase its size as long as you keep appending stuff to it, as you do in that loop.
That is very inefficient computationally: since the elements of a matrix are placed contiguously in memory, said memory needs to be reallocated when you increase the size of your array.
A way to prevent that is to tell Matlab beforehand the size the final array will have: pre-allocation.
Please accept an answer if it helped you.
Thanks for the explanation, Accepted.
Cheers.
José-Luis
José-Luis 2014년 6월 5일
My pleasure, thank you.

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

2014년 6월 5일

댓글:

2014년 6월 5일

Community Treasure Hunt

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

Start Hunting!

Translated by