Количество функций оценки накапливается с каждым прогоном - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь оценить количество функций оценки из кода Matlab. Проблема в том, что каждый раз, когда я запускаю код, кажется, что NFE продолжает увеличиваться (накапливаться). Как я могу остановить это, чтобы при переключении на другое выражение функции, NFE будет отличаться, если это возможно. Тело моей функции выглядит так:

function y = g(x,n)
global gcount
if isempty(gcount)
 gcount = 0;
end
if nargin == 0  % Reply counter and reset it
  y = gcount;
  gcount = 0;
  return;
end
gcount = gcount + 1;
%----------------------- problem 6 -------------------------%
% c = 1:n;
% yy = 2*sum(x(c))+1/50*c*x(c);
% y = yy';
%----------------------- problem 8 -------------------------%
c = 1:n;
yy = 2*c*(x(c)).^2+1/50*sum(x(c));
y = yy';

1 Ответ

0 голосов
/ 01 октября 2019

Вы объявляете gcount как global где-нибудь еще в вашем коде, или вы делали это в командном окне перед его запуском? Если вы объявите глобальную переменную в базовом рабочем пространстве до , то вы объявите ее как глобальную в определении функции, функция получит доступ к переменной в базовом рабочем пространстве, поэтому значение будет сохраняться между запусками.

Если вы хотите, чтобы ваша переменная gcount начинала считать с 0 при каждом запуске кода, самый простой способ - сбросить ее на 0 или clear в начале сценария верхнего уровня.

Однако, если вы действительно хотите узнать, сколько раз была вызвана функция, гораздо лучший способ сделать это - использовать profiler MATLAB. Сводный отчет профиля показывает эту информацию для всех функций в вашем коде. Если вам нужен программный доступ к результатам, вы можете использовать profile, чтобы получить данные для отдельной функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...