フィルターのクリア

Solution is going to infinite iterations

1 回表示 (過去 30 日間)
Shripad
Shripad 2017 年 8 月 4 日
コメント済み: Torsten 2017 年 8 月 7 日
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

回答 (1 件)

Torsten
Torsten 2017 年 8 月 4 日
編集済み: Torsten 2017 年 8 月 4 日
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 件のコメント
Shripad
Shripad 2017 年 8 月 4 日
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 2017 年 8 月 7 日
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.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeGraphics Object Identification についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by