MATLAB: «загрузка» функция для быстрого доступа - PullRequest
0 голосов
/ 14 мая 2018

Мне нужно написать довольно сложную функцию в MATLAB; давайте назовем это f. И у меня есть основная программа, скажем, main.m, которая использует f.

Если я хочу следовать своей прошлой привычке, всякий раз, когда я имею дело со сложной функцией, такой как f, я записываю ее в отдельный файл f.m и вызываю ее всякий раз, когда она мне нужна из main.m. Но для решения данной проблемы мне придется много использовать f *, и я боюсь, что чтение с диска замедлит мой код, который уже занимает много времени.

Поэтому я хотел бы спросить, является ли это действительной проблемой: т.е. считывает ли MATLAB (скажем, 2017a или более поздняя версия) с диска каждый раз, когда я приказываю ему использовать f из main.m или что-то умнее? Если первое верно, каков эффективный (по времени) способ использовать f много раз из main.m? Меняется ли любой из этих ответов, если f итеративен (т.е. f вызывает себя)?

1 Ответ

0 голосов
/ 14 мая 2018

MATLAB загружает и анализирует M-файл функции при первом его вызове и сохраняет его в памяти таким образом, что последующим вызовам не требуется его повторный анализ. Вы можете увидеть, что это действительно так, вызвав вашу функцию f в чистом сеансе MATLAB дважды, используя tic / toc для определения времени:

tic; f(...); toc
tic; f(...); toc

В первый раз это займет немного больше времени, чем во второй раз. Для очень быстрой функции эта разница во времени будет очень большой. Для функции, которая занимает много секунд, разница может быть бессмысленной.

Вы можете увидеть, какие функции загружены в память, используя функцию inmem.

При вызове clear all или clear functions функции стираются из памяти (некоторые другие формы clear также стирают функции). Избегайте их использования.

...