Это стандартный способ использования постоянных переменных в Matlab.Ты делаешь то, что должен.Это приведет к заметным накладным расходам, но ваши временные характеристики кажутся удивительно высокими.
Вот аналогичный тест, который я провел в 32-разрядной версии Matlab R2009b на 3-ГГц машине Intel Core 2 QX9650 под Windows XP x64.Аналогичные результаты на других машинах и версиях.Примерно в 5 раз быстрее, чем у вас.
Тест:
function call_has_persistent
for i = 1:200000
has_persistent();
end
function has_persistent
persistent CONSTANTS
if isempty(CONSTANTS)
CONSTANTS = 42;
end
Результаты:
0.89 200000 7 persistent CONSTANTS
0.25 200000 8 if isempty(CONSTANTS)
На какой версии Matlab, ОС и ЦП вы работаете?С чем инициализируется CONSTANTS?Кажется ли вывод Matlab's bench () разумным для вашей машины?
Ваши сроки кажутся высокими.Там может быть ошибка или проблема конфигурации там, чтобы исправить.Но если вы действительно хотите быстро получить код Matlab, стандартный совет состоит в том, чтобы «векторизовать» его: реструктурировать код таким образом, чтобы он выполнял меньше вызовов функций в больших входных массивах и использовал встроенные в Matlab векторизованные функции вместо циклов или управленияструктуры, чтобы избежать 200 000 вызовов функции в первую очередь.Если возможно.Matlab имеет относительно высокие накладные расходы на вызов функции или метода (см. Медленно ли работает MATLAB OOP или я что-то не так делаю? для некоторых чисел), поэтому вы часто можете получить больше пробега путем рефакторинга, чтобы исключить вызовы функций вместо выполненияОтдельная функция вызывается быстрее.
Возможно, стоит сравнить некоторые другие базовые операции Matlab на вашей машине, чтобы увидеть, является ли она «постоянной», которая кажется медленной.Также попробуйте профилировать только этот маленький тестовый скрипт call_has_persistent в отдельности, чтобы увидеть, имеет ли значение контекст вашей функции.