MATLAB: How to loop the code until the loop is satisfied and gives the correct number of iterations.

homeworknested loopwhile loop

Good Day.
I am writing a code and it is supposed to calculate the surface area for a very large n, and n is achieved by increasing it by 1 until the difference in the total area calculated from one iteration to the next is less than 10^-4. My code gives me an infinite recursion error.
n = 1;
Ymin = 0;
Ymax = 40;
deltaY = (Ymax - Ymin)/n;
SurfaceArea = [];
count = 1;
Temp2 = 0;
Temp1 = 0;
area1 = [];
I initialised my variables to use for my code
for count = Ymin:deltaY:Ymax
A = 2*pi*(1+sqrt(0.25+((44.56-count)/0.16)))*((1 + (1/(28.5184 - 0.64*count))^2)^0.5)*count;
area1 = [area1 A];
end
Temp2 = sum(a)
diff = Temp2 - Temp1
area2 = [];
while diff > 0.0001
area2 = [];
n = n + 1;
deltaY = (Ymax - Ymin)/n;
for count = Ymin:deltaY:Ymax
A = 2*pi*(1+sqrt(0.25+((44.56-count)/0.16)))*((1 + (1/(28.5184 - 0.64*count))^2)^0.5)*count;
area2 = [area2 A];
end
end
Temp2 =sum(area2)
diff = Temp2 - Temp1;
Logically thinking about this, I feel like it should work however I am struggling to undersstand why I am getting an error
% Your code could not run to completion. Check for errors in the code such as infinite recursion.

Best Answer

You are getting the error because the script never breaks out of the while loop. This is because the comparitor in the while satement "while diff > 0.0001" is dependant on the variable "diff" which is never altered inside of the while loop, so here is what happens...
After the script runs the code that is inside the while loop, it checks the comparitor statement "diff > 0.0001", if it evaluates to true, the while loop executes the code inside of it again and then checks the comparitor again and so on until the comparitor evaluates to false, at which time the script exits the while loop and continues on to the next line. Since "diff" never gets alterd inside the while loop, every time the while loop checks the comparitor, it will decide to continue, hence the infinite recursion error.
In general, you need to be careful when setting up a while loop so that the variable(s) in the comparitor are being changed from within the while loop or that there is some other exiting mechanism inside the while loop or you will get this problem.
It is an easy mistake to make though, I still do it sometimes myself.
Hope that helps =)