# Bisection Method Code MATLAB

3.486 visualizaciones (últimos 30 días)
Emmanuel Pardo-Cerezo el 4 de Oct. de 2019
Respondida: albertson el 6 de Oct. de 2023
Problem 4 Find an approximation to (sqrt 3) correct to within 10−4 using the Bisection method (Hint: Consider f(x) = x 2 − 3.) (Use your computer code)
I have no idea how to write this code. he gave us this template but is not working. If you run the program it prints a table but it keeps running. for some reason the program doesnt stop.
tol = 1.e-10;
a = 1.0;
b = 2.0;
nmax = 100;
% Initialization
itcount = 0;
error = 1.0;
% Graph of the function
xval = linspace(a,b,100);
for i=1:100
fval(i) = func(xval(i));
end
plot(xval,fval);
grid on;
hold on;
% iteration begins here
while (itcount <= nmax && error >= tol)
itcount = itcount + 1;
% Generate and save iteratres
x = a + (b-a)/2;
z(itcount) = x;
fa = func(a);
fb = func(b);
fx = func(x);
error = abs(fx);
% error = abs(x - xold);
if (error < tol)
x_final = x;
else
if (fa*fx < 0)
% root is between a and x
b = x;
else
% root is between x and b
a = x;
end
end
plot(z(1:itcount),zeros(itcount,1),'r+');
pause(5)
end
if (itcount < nmax);
val = func(x);
fprintf(1,'Converged solution after %5d iterations',itcount);
fprintf(1,' is %15.7e, %e \n',x_final, val);
else fprintf(1,'Not converged after %5d iterations',nmax);
end
function val = func(x)
%val = x^3 + 4 * x^2 - 10;
val = x^3 - x - 3;
%val = sin(x);
end
##### 2 comentariosMostrar NingunoOcultar Ninguno
tala saffarini el 24 de Mzo. de 2021
can u help me??
Aristi Christoforou el 14 de Abr. de 2021
function[x]=bisect(m)
a=1;
b=3;
k=0;
while b-a>eps*b
x=(a+b)/2
if x^2>m
b=x
else
a=x
end
k=k+1
end

Iniciar sesión para comentar.

### Respuestas (6)

David Hill el 4 de Oct. de 2019
function c = bisectionMethod(f,a,b,error)%f=@(x)x^2-3; a=1; b=2; (ensure change of sign between a and b) error=1e-4
c=(a+b)/2;
while abs(f(c))>error
if f(c)<0&&f(a)<0
a=c;
else
b=c;
end
c=(a+b)/2;
end
Not much to the bisection method, you just keep half-splitting until you get the root to the accuracy you desire. Enter function above after setting the function.
f=@(x)x^2-3;
root=bisectionMethod(f,1,2);
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Justin Vaughn el 10 de Oct. de 2022
Thank you for this because I was not sure of how to easily send a functino into my method's function. yours helped tremendously!

Iniciar sesión para comentar.

SHUBHAM GHADOJE el 29 de Mayo de 2021
function c = bisectionMethod(f,j,k,error)%f=@(x)x^2-3; j=1; k=2; (ensure change of sign between a and b) error=1e-4
c=(j+k)/2;
while abs(f(c))>error
if f(c)<0&&f(a)<0
j=c;
else
k=c;
end
c=(j+k)/2;
end
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Iniciar sesión para comentar.

Prathamesh Purkar el 6 de Jun. de 2021
Editada: Walter Roberson el 3 de Dic. de 2021
tol = 1.e-10;
a = 1.0;
b = 2.0;
nmax = 100;
% Initialization
itcount = 0;
error = 1.0;
% Graph of the function
xval = linspace(a,b,100);
for i=1:100
fval(i) = func(xval(i));
end
plot(xval,fval);
grid on;
hold on;
% iteration begins here
while (itcount <= nmax && error >= tol)
itcount = itcount + 1;
% Generate and save iteratres
x = a + (b-a)/2;
z(itcount) = x;
fa = func(a);
fb = func(b);
fx = func(x);
error = abs(fx);
% error = abs(x - xold);
if (error < tol)
x_final = x;
else
if (fa*fx < 0)
% root is between a and x
b = x;
else
% root is between x and b
a = x;
end
end
plot(z(1:itcount),zeros(itcount,1),'r+');
pause(5)
end
if (itcount < nmax);
val = func(x);
fprintf(1,'Converged solution after %5d iterations',itcount);
fprintf(1,' is %15.7e, %e \n',x_final, val);
else
fprintf(1,'Not converged after %5d iterations',nmax);
end
function val = func(x)
%val = x^3 -x + 1;
val = x^3 -x + 1;
%val = sin(x);
end
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Iniciar sesión para comentar.

narendran el 2 de Jul. de 2022
5cosx + 4.5572 -cos30cosx-ssin30sinx
##### 2 comentariosMostrar NingunoOcultar Ninguno
Image Analyst el 2 de Jul. de 2022
@narendran it doesn't look like this is an answer to the original question. I think you posted this in the wrong place.
Walter Roberson el 2 de Jul. de 2022
syms x
y = 5*cos(x) + 4.5572 - cos(30)*cos(x)-sin(30)*sin(x)
y =
fplot(y, [-20 20]); yline(0)
vpasolve(y,x)
ans =

Iniciar sesión para comentar.

Aman Pratap Singh el 3 de Dic. de 2021
Editada: Walter Roberson el 3 de Dic. de 2021
f = @(x)('x^3-2x-5');
a = 2;
b = 3;
eps = 0.001;
m = (a+b)/2;
fprintf('\nThe value of, after bisection method, m is %f\n', m);
while abs(b-a)>eps
if (f(a)*f(m))<0
b=m;
else
a=m;
end
m = (a+b)/2;
end
fprintf('\nThe value of, after bisection method, m is %f\n', m);
##### 1 comentarioMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos
Walter Roberson el 3 de Dic. de 2021
f = @(x)('x^3-2x-5');
That means that f will become a function handle that, given any input, will return the character vector ['x', '^', '3', '-', '2', 'x', '-', '5'] which is unlikely to be what you want to have happen.
f(0)
ans = 'x^3-2x-5'
f(1)
ans = 'x^3-2x-5'
f(rand(1,20))
ans = 'x^3-2x-5'

Iniciar sesión para comentar.

albertson el 6 de Oct. de 2023
f(x) = x3-2x-5 (xl = 0, xu = 4, x0 = 0, εs = 0.0001%)
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Iniciar sesión para comentar.

### Categorías

Más información sobre Conversion en Help Center y File Exchange.

### Community Treasure Hunt

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

Start Hunting!

Translated by