how to recursively code the bisection algorithm
25 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Dimitra
el 4 de Jun. de 2023
Comentada: Dimitra
el 4 de Jun. de 2023
This is how I'm trying to make the code recursive. But I have some errors:
Can you please haelp me?
2 comentarios
John D'Errico
el 4 de Jun. de 2023
When you post a PICTURE of your code, nobody can help you without typing in the code by hand from that picture. This makes it significantly harder to help you, when all you needed to do was to paste in the TEXT directly.
Since text is trival to do, is there a good reason why you want to make it more difficult for you to get help?
Respuesta aceptada
Tushar
el 4 de Jun. de 2023
Hi Dimitra,
I think we can do it like this:
function root = bisection_recursive(f, a, b, tol, max_it)
fa = feval(f, a);
fb = feval(f, b);
% Check if a root is already found
if abs(fa) < tol
root = a;
return;
elseif abs(fb) < tol
root = b;
return;
end
% Check if the interval is valid
if fa * fb > 0
error('No root exists in the given interval.');
end
% Recursive bisection algorithm
function root = bisection_recursive_helper(a, b, x_previous, i)
if i > max_it
error('Maximum number of iterations reached.');
end
x = (a + b) / 2; % Midpoint
fprintf('Iteration %3d: %10.8f\n', i, x);
fx = feval(f, x);
if abs(x - x_previous) < tol || abs(fx) < tol
root = x;
return;
end
if fa * fx < 0
root = bisection_recursive_helper(a, x, x, i + 1);
else
root = bisection_recursive_helper(x, b, x, i + 1);
end
end
% Call the recursive helper function
root = bisection_recursive_helper(a, b, b, 1);
end
To use this function, you need to define your function f and provide the initial interval [a, b], the tolerance tol, and the maximum number of iterations max_it. The function will recursively divide the interval and converge to the root within the specified tolerance or maximum number of iterations.
Here's an example of how you can use the bisection_recursive function to find the root of a function:
% Define your function
f = @(x) x^2 - 4;
% Define the interval [a, b]
a = 1;
b = 3;
% Set the tolerance and maximum number of iterations
tol = 1e-6;
max_it = 100;
% Call the bisection_recursive function
root = bisection_recursive(f, a, b, tol, max_it);
% Display the result
fprintf('Root: %10.8f\n', root);
Make sure to modify the function f and the input parameters a, b, tol, and max_it according to your specific problem.
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrix Indexing 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!