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 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