While loop does not iterate
显示 更早的评论
Hello,
I am trying to write the bisection method manually but having problems with the while loop. I am calculating the error in the loop and i want it to go on until the error reaches 0.05 %.
But the code wont work. It only does the first iteration and the ans =1 , logical appears on the command window and it freezes.
I would appreciate any help.
Here is what i did;
x1=1;
x2=2;
bb=0;
err = 2;
%bisection
while ne(err,0.05)
y1 = sin(exp(-x1))-cos(x1);
y2 = sin(exp(-x2))-cos(x2);
carpim = y1*y2;
if le(carpim,0)
xm = (x1+x2)/2;
ym = sin(exp(-xm))-cos(xm);
cc = y1*ym;
cc2 = y2*ym;
if le(cc2,0)
bb = y2;
y2 = ym;
err = (y2-bb)*100/y2;
else
le(cc,0)
bb=y1;
y1 = ym;
err = (y1-bb)*100/y1;
end
end
end
2 个评论
dpb
2019-3-10
while ne(err,0.05)
will run until the value of err is identically equal to 0.05 which probably will never happen. Hence, you've written an infinite loop for all cases other than a fluke, rare event. What you probably intended was something like
while err>0.05
instead altho I've not tried to debug your code, that's likely a good start.
dpb
2019-3-10
Intended to write
while abs(err)>0.05
回答(1 个)
KALYAN ACHARJYA
2019-3-10
编辑:KALYAN ACHARJYA
2019-3-10
No the iteration going on, may be infinite
@dpb already suggested you to use
while err>0.05
end
and second approach use
err=abs() % absolute error
Please carefully check the data and expression to validate the data, so that the error reaches the value less than 0.05 and iteration number not goes large or infinite.
As the error value is not changing in large iterations also (check the expression)
err =
220.0063
err =
220.0063
Therefore while loop true always and code running infinite.
类别
在 帮助中心 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!