Bisection method relative error
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Sazcl
el 17 de Mzo. de 2022
Comentada: Jan
el 2 de Ag. de 2023
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/930524/image.png)
I have a function below that I have to find its roots using bisection method. I want the for loop to stop on the point where relative error is lower than %0.05. I couldn't understand how I can define n.
f=@(x) log(x)-cos(x)-exp(-x);
x1=1;
x2=2;
xmid=(x1+x2)/2
for i=1:n;
if (f(xmid)*f(x2))<0
x1=xmid;
else
x2=xmid;
end
xmid=(x1+x2)/2;
end
fprintf('The root is: %3.8g\n',xmid)
0 comentarios
Respuesta aceptada
Mohammed Hamaidi
el 17 de Mzo. de 2022
Editada: Mohammed Hamaidi
el 18 de Mzo. de 2022
Hi
Just use "while" loop with your condition as follows:
f=@(x) log(x)-cos(x)-exp(-x);
x1=1;
x2=2;
xmid=(x1+x2)/2;
while (x2-x1)>0.0005
if (f(xmid)*f(x2))<0
x1=xmid;
else
x2=xmid;
end
xmid=(x1+x2)/2;
end
fprintf('The root is: %3.8g\n',xmid)
4 comentarios
Más respuestas (1)
John
el 31 de Jul. de 2023
function [p, pN] = Bisection_371(a,b,N, tol)
if f(a)*f(b) > 0
disp("IVT does not guarantee a root in [a,b]")
elseif f(a)*f(b) == 0
disp("The root is either a or b")
else
for n = 1:N
p = (a+b)/2;
pN(n) = p;
if f(p) == 0 || (b-a)/2 < tol
break
elseif f(p)*f(a) < 0
b = p;
else
a = p;
end
end
end
end
%f = @(x)x^2 - 1;
function y = f(x)
y = x^2 - 1;
end
1 comentario
Jan
el 2 de Ag. de 2023
For numerical reasons it is rather unlikely that the condiotion f(p) == 0 is met exactly. Use a tolerance instead.
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!