Cycle depth limit 500 exceeded in MATLAB Function MATLAB Function. This could indicate an infinite cycle.

I have received this error message, but I am not using an infinite loop:
function [t_winding,pc,pe] = fcn(ta,tw,net_torque,motor_speed)
tm = 0.5*(ta+tw);
B = 1.32-0.0012*(tm-293);
i = 0.561*B*net_torque
R = 0.0575*(1+0.0039*(tw-293));
pc = 3*i^2*R;
pe = (9.602e-06*(B*motor_speed)^2)/R;
t_winding = 0.455*(pc+pe)+ta;
if (abs(t_winding-tw)) > 1
[t_winding,pc,pe] = fcn(ta,t_winding,net_torque,motor_speed);
end
end

 Accepted Answer

Your function is an infinite recursion. Within your fcn() function, you are calling the fcn() function. Your code reduces to:
function fcn(x)
fcn(x)
which means the fcn function is calling itself over and over again. It's like an M.C. Escher painting.

2 Comments

There's nothing inherently wrong with recursion, and here there's a limit in place to stop the recursion. However, the limit is not reached before 500 recursions so matlab puts a stop to it.
To add to Guillaume's point, if you intend to recurse, you could replace the conditional with a while-loop which is cleaner.
function [t_winding,pc,pe] = fcn(ta,tw,net_torque,motor_speed)
t_winding = tw+2;
while (abs(t_winding-tw)) > 1
tm = 0.5*(ta+tw);
B = 1.32-0.0012*(tm-293);
i = 0.561*B*net_torque;
R = 0.0575*(1+0.0039*(tw-293));
pc = 3*i^2*R;
pe = (9.602e-06*(B*motor_speed)^2)/R;
t_winding = 0.455*(pc+pe)+ta;
end

Sign in to comment.

More Answers (1)

Your function is recursive, it calls itself. You've put a condition to stop the recursion when abs(t_winding-tw) is less than 1, unfortunately after calling itself 500 times the condition still hasn't been met. It's most likely a bug in your code.
If you did mean to recurse more than 500 times, there is a way to increase that limit. However, matlab puts the limit in the first place to protect you as each recursion consumes quite a lot of memory as it needs to create a new set of all the variables in your function.
To start debugging what is actually happening with your recursion, I would remove the semi-colon on the t_winding = ... line, so you can see how it evolves. If it doesn't decrease then you indeed have an infinite loop.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 11 Jul 2018

Edited:

on 11 Jul 2018

Community Treasure Hunt

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

Start Hunting!