Newton Raphson Method: while loop

Hi,
Maybe it's a silly question but i don't know ho to stop a while loop.
The condition for my while is when alphanew(i) - aplhanew(i-1) <toll stop but the index i is not required for while loop so i don't really know what to impose. And also i don't know how to stop the while loop when there's no solution.
while condition ?
f=log(alpha)-psi(alpha)-log(Samplemean)+meanlnSample;
f1=1/alpha-psi(1,alpha);
alphanew=alpha-f/f1;
alpha=alphanew;
end
Thanks in advance for the help!

 Accepted Answer

Voss
Voss on 9 Sep 2023
tol = 1e-6;
while true
    f=log(alpha)-psi(alpha)-log(Samplemean)+meanlnSample;
    f1=1/alpha-psi(1,alpha);
    alphanew=alpha-f/f1;
    if abs(alphanew-alpha) < tol
        break
    end
    alpha=alphanew;
end

2 Comments

it works thanks!
Now last question, how to store value of iterations?
tol = 1e-6;
iter = 1;
Alpha(1) = alpha;
while true
f=log(alpha)-psi(alpha)-log(Samplemean)+meanlnSample;
f1=1/alpha-psi(1,alpha);
alphanew=alpha-f/f1;
iter = iter + 1;
Alpha(iter) = alphanew;
if abs(alphanew-alpha) < tol
break
end
alpha=alphanew;
end
plot(iter,Alpha)

Sign in to comment.

More Answers (1)

John D'Errico
John D'Errico on 9 Sep 2023
Edited: John D'Errico on 9 Sep 2023
There are many, MANY ways to stop a while loop. For example...
tol = 1e-8;
err = inf;
iter = 0;
itmax = 100;
while (abs(err) > tol) && (iter < itmax)
iter = iter + 1;
% do stuff that computes the error
...
end
The while loop will terminate IF the error ever drops below the tolerance, OR if the iteration counter is exceeded. A nice thing is, as long as you have the iteration counter in there, it cannot keep on running forever.
The alternative that is commonly used might be something like this:
tol = 1e-8;
err = inf;
iter = 0;
itmax = 100;
while true % Will run forever, UNLESS you break out of the loop
iter = iter + 1;
% do stuff that computes the error
...
if (iter >= itmax) || (abs(err) <= tol)
break
end
end
As you can see, both while loop styles are acceptable, and both will terminate when the time is right. Personally, I prefer the style where the test is in the while statement itself, as that makes it clear what will happen.

Products

Tags

Asked:

on 9 Sep 2023

Commented:

on 11 Sep 2023

Community Treasure Hunt

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

Start Hunting!