Effacer les filtres
Effacer les filtres

Solution is going to infinite iterations

1 vue (au cours des 30 derniers jours)
Shripad
Shripad le 4 Août 2017
Commenté : Torsten le 7 Août 2017
I am getting infinite iterations, please help me.
clear all
a=0.5;
err=1e-6;
count=0;
x=100;
%fx = a-cos(a);
%dfx= 1+sin(a);
%x1=a-(fx/dfx);
while abs(a-x)>err
fx=x-cos(x);
dfx= 1+sin(x);
x1=x-(fx/dfx);
%x=abs(x1-x);
%x=x1;
if abs(x1-a)>err
x=x1;
%elseif abs(a-x1)>err
% continue
end
count = count + 1;
sprintf('After iteration %2.0d the x is %3.15f',count,x)
end

Réponses (1)

Torsten
Torsten le 4 Août 2017
Modifié(e) : Torsten le 4 Août 2017
Your decision variable in the while statement must be
abs(fx)> err
and/or
abs(x1-x)>err
but not
abs(x1-a)>err
Note that 0.5 is not a root of f(x)=x-cos(x).
Best wishes
Torsten.
  2 commentaires
Shripad
Shripad le 4 Août 2017
Thanks for the help Torsten, your first suggestion (abs(fx)> err ) worked for me. But with your second suggestion (abs(x1-x)>err),which I thought to be more logical, MATLAB was performing only one iteration. Kindly help me to resolve this issue.
Thanks again.
Torsten
Torsten le 7 Août 2017
After the commands in the while-loop have been executed, MATLAB checks the exit condition and exits if they are no longer true. Since you set x=x1 at the end of the while-loop, the condition to exit (abs(x-x1)<=err) will be satisfied after the first iteration. The remedy is to set x=x1 at the start of the while-loop.
Best wishes
Torsten.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Graphics Object Identification dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by