Я оптимизирую свой код, который много раз вычисляет много разных факториалов. Вызовы состоят из нескольких разных функций, поэтому я хотел избежать того, чтобы массив с заранее вычисленными факториалами был аргументом для каждой из функций, хотя я думаю, что это был бы самый быстрый метод.matlab оптимизация использования factorial
Использование глобальной переменной работает лучше, но это все еще не так быстро, как я ожидаю, так как загрузка глобальной переменной теперь занимает почти столько же времени, сколько и вычисление факториала.
function [ facn ] = cfactorial(n)
global facs
if n > 170
facn = Inf;
elseif n == 0
facn = 1;
else
facn = facs(n);
end
Я также попытался установить его настойчивое, что также не намного быстрее.
function [ facn ] = cfactorial(n)
persistent facs
if isempty(facs)
load('facs.mat')
facs = faccs;
end
if n > 170
facn = Inf;
elseif n == 0
facn = 1;
else
facn = facs(n);
end
В обоих случаях линия "стойкие фары" соответственно. «global facs» теперь занимает большую часть времени в профилировщике.
Есть ли другой способ сделать это? Могу ли я определить что-то вроде переменной, доступной во всем мире, без ее загрузки?
Почему бы вам не предвычисление массива всех значений а затем получить их оттуда? – mpaskov
Это то, что я делаю, я ищу эффективный способ совместного использования массива между всеми функциями. На данный момент я добавил дополнительный аргумент, в котором я передаю этот массив, но этого я и хотел избежать. Меня больше всего интересует, если есть более элегантный и эффективный способ, которого я еще не знаю. – kili
Как использовать встроенную функцию гаммы? –