The Secant method is a numerical root-finding algorithm that is based on linear interpolation. It can be used to find the zeroes of a real-valued function f(x). The method requires two initial guesses, x0 and x1, and generates a sequence of approximations to the root by drawing a secant line through the two points (x0,f(x0)) and (x1,f(x1)) and finding where it intersects the x-axis.
Here is an implementation of the Secant method in MATLAB:
function [x, fval, iter] = secant_method(f, x0, x1, tol, maxiter)
% SECANT_METHOD Finds a zero of a function using the secant method.
% [X, FVAL, ITER] = SECANT_METHOD(F, X0, X1, TOL, MAXITER) finds a value X
% near the point where the function F is zero using the secant method,
% starting with initial guesses X0 and X1. The algorithm stops when the
% difference between successive approximations is less than TOL or when
% MAXITER iterations have been performed. The function returns the
% approximation X, the function value FVAL = F(X), and the number of
% iterations ITER.
%
% Example:
% >> f = @(x) x^3 - 2*x - 5;
% >> [x, fval, iter] = secant_method(f, 2, 3, 1e-6, 100);
% >> fprintf('x = %f, fval = %f, iter = %d\n', x, fval, iter);
%
% Author: John D'Errico
% Date: 25-Jul-2006
% set default values for tol and maxiter
if nargin < 4 || isempty(tol)
tol = 1e-6;
end
if nargin < 5 || isempty(maxiter)
maxiter = 100;
end
% initialize the variables
x = x1;
xp = x0;
fp = f(xp);
fval = f(x);
iter = 0;
% main loop
while abs(x - xp) > tol && iter < maxiter
% compute the next approximation
fxp = f(xp);
d = (fval - fxp) / (x - xp);
xp = x;
x = x - fxp/d;
fp = fval;
fval = f(x);
iter = iter + 1;
% plot the function and the secant line
clf
xx = linspace(xp, x, 100);
plot(xx, f(xx), 'b', x, fval, 'ro', [xp x], [fp fval], 'g--');
xlabel('x');
ylabel('f(x)');
title(sprintf('Iteration %d: x = %f, fval = %f', iter, x, fval));
drawnow
end
To use the Secant method, define a function handle to the function you want to find the zeroes of and call the secant_method
function, passing the function handle, the initial guesses x0
and x1
, the tolerance tol
, and the maximum number of iterations maxiter
. The function returns the zero approximation x
, the function value at the zero fval = f(x)
, and the number of iterations iter
.
Here is an example of how to use the secant_method
function to find the zeroes of the function f(x) = x^3 - 2*x - 5
:
This will output:
In this case, the Secant method converged to a zero of the function in 7 iterations. The zero approximation is x = 2.094551
and the function value at the zero is f(x) = -0.000000
.