I am using a function and i want to update counter on each function call and use value of that counter for some condition.But every function call counter initialize to zero and if i use counter=counter+1 it always give counter =1 so how to do this?

32 views (last 30 days)
The variable counter value should be equal to number of times function call.

Accepted Answer

Jan
Jan on 26 May 2017
The question might be more clear, if you post the relevant code. The reader cannot guess, what code causes the observed "every function call counter initialize to zero".
Either:
counter = 0;
for k = 1:100
counter = counter + 1;
disp(counter);
end
Or it might be a counter inside a function:
function Y = YourFcn(X)
persistent Counter
if isempty(Counter)
Counter = 0;
end
Counter = Counter + 1;
Y = sin(X + Counter);
Then the Counter is reset by "clear YourFcn".
  3 Comments
Jan
Jan on 27 May 2017
It is not clear, what the code should do. A bold guess:
function Avg_SU = request_order(x)
persistent FirstRun
if isempty(FirstRun)
X = 1:14;
FirstRun = false;
else
z = (x == (1:14));
Xr = X(z);
n = numel(Xr);
X(z) = Xr(randperm(n,n));
end
%%some code for request order%%
Avg_SU=sum(avg_su_per_req)/100;
X is not used at all?!
But as long as I do not really undestand, what you want to solve, I would not trust this code.
Vishnubharathi Thirupathi
Vishnubharathi Thirupathi on 23 Mar 2023
Hi, I need to impletment counter within a if condition of a function. eg., if the condition goes into elseif, it should be there max 540s && SOC>=20. Is there any other way to achieve this? because t_reff = 0; makes t_reff = 0 each time, and I always see t_reff =1. I tried with persistant and global but could not rightly implement what I need.
function [I_ref,t] = fcn(t,SOC,P)
t_reff = 0;
I_ref = 0;
%% Operational Limits
% Current Limit
if (t<=1200 && SOC >= 40)
I_ref = -19.25/P;
elseif (t_reff <= 540 && SOC >= 20)
I_ref = -20.25/P;
t_reff = t_reff+1;
else
I_ref = -20.75/P;
end

Sign in to comment.

More Answers (1)

MathReallyWorks
MathReallyWorks on 26 May 2017
Hello Amit,
Keep your initialization on top of the code (i.e. outside of loop if any).
Check if it is in any loop which is causing it to initialize again.
counter=0
should be above the code (i.e. outside of loop)
and
counter=counter+1
should be inside the loop.
If you want a better answer, attach your code.

Categories

Find more on System on Chip (SoC) in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!