My loop has an infinite recursion, and I'm not sure how to fix it?
3 views (last 30 days)
Show older comments
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 Comments
Answers (1)
Brendan Hamm
on 2 Feb 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 Comments
Brendan Hamm
on 2 Feb 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
on 2 Feb 2016
I highly suggest taking a look at the MATLAB Debugging options which will allow you to determine where error in your code are.
See Also
Categories
Find more on Whos 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!