Variable size changes on every iteration

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.
Aftab Ahmed Khan
Aftab Ahmed Khan 2014 年 6 月 5 日
Thanks for the explanation, Accepted.
Cheers.
José-Luis
José-Luis 2014 年 6 月 5 日
My pleasure, thank you.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by