Filter löschen
Filter löschen

Solution is going to infinite iterations

1 Ansicht (letzte 30 Tage)
Shripad
Shripad am 4 Aug. 2017
Kommentiert: Torsten am 7 Aug. 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

Antworten (1)

Torsten
Torsten am 4 Aug. 2017
Bearbeitet: Torsten am 4 Aug. 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 Kommentare
Shripad
Shripad am 4 Aug. 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 am 7 Aug. 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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Graphics Object Identification finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by