My loop has an infinite recursion, and I'm not sure how to fix it?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I'm trying to implement the Babylonian method through a while loop. When I call my function in another script file, it says I have an infinite recursion. I think it has something to do with my boundary variable. I'm not quite sure how to fix it.
function y = divide_and_average(initialGuess,a,limit)
y = (initialGuess + a/(initialGuess))/2; %calculation for square
boundary = (abs(y-initialGuess)/y); % compare the limit to
while boundary > limit %will continue until false
y = initialGuess;
divide_and_average(y,a,limit);
boundary = (abs(y-initialGuess)/y);
end
0 comentarios
Respuestas (1)
Brendan Hamm
el 2 de Feb. de 2016
You always set y to be the initial guess and call divide_and_average with y which is the initial guess.
while boundary > limit %will continue until false
y = initialGuess; % y is set to your initialGuess
% Now we call this function with the exact inputs it was originally called with. This happens infinitely.
divide_and_average(y,a,limit);
boundary = (abs(y-initialGuess)/y);
end
5 comentarios
Brendan Hamm
el 2 de Feb. de 2016
In your while loop square takes on the value of y on every iteration but y does not change. Also, your calculation of the boundary is not correct.
function [y,error] = divide_and_average(initialGuess,a,limit)
% Calculate square based on initial guess, this is our new guess
y = (initialGuess + a/(initialGuess))/2;
error = (a - y^2)/(2*y); % This is the approximate error in the answer
while abs(error) >= limit %will continue until false
% Call the function with our new "initialGuess" and get the
% corresponding error.
[y,error] = divide_and_average(y,a,limit);
end
This is now within the appropriate tolerance:
format long
[square,err] = divide_and_average(3.9,16,1e-6)
square =
4.000000205391106
err =
-2.053911006834815e-07
Brendan Hamm
el 2 de Feb. de 2016
I highly suggest taking a look at the MATLAB Debugging options which will allow you to determine where error in your code are.
Ver también
Categorías
Más información sobre Whos en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!