Глобальные переменные и аргументы в matlab, который самый быстрый? - PullRequest
3 голосов
/ 16 ноября 2011

Я использую рекурсивную функцию в Matlab, где некоторые переменные требуются на каждом уровне, они не меняются. Хотя некоторые меняют функции и также должны быть отражены в основной программе.

Я хотел бы знать, что лучше:

  • Для определения глобальных переменных в main & function, таких как global in1, in2, out1
  • или передать затем в качестве аргументов функцию, подобную [out1]=functionName(in1,in2)

Поскольку моя программа сложная, я бы хотел уменьшить требования к памяти и ускорить ее выполнение.

1 Ответ

3 голосов
/ 16 ноября 2011

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

Вот простой арифметический пример:

function z = times1(x,y)

if y == 0
    z = 0;
else
    z = plusy(times1(x, y-1));
end

    function z = plusy(x)
    z = x+y;
    end

end

Вы можете видеть, что переменная y используется внутривложенная функция plusy, хотя это не входной аргумент, а в рабочей области родительской функции;тем не менее, это не глобальный.(Обратите внимание, что в последних версиях MATLAB y будет выделен в редакторе голубым цветом, чтобы подчеркнуть эту общую область).

Какой подход будет самым быстрым и использует наименьшее количество памяти, это, вероятноочень сильно зависит от деталей вашего конкретного алгоритма - насколько много копий данных, от глубины рекурсии и т. д. Я думаю, вам нужно будет поэкспериментировать и потратить время, либо с tic и toc,или, что еще лучше, с помощью функции Стива Эддинса timeit из Центрального обмена файлами MATLAB.

...