Método das Secantes

O método das secantes é uma técnica iterativa utilizada para encontrar as raízes de uma função não-linear f(x). É semelhante ao método da secante geométrica, onde se traça uma reta que passa por dois pontos consecutivos na curva da função e usa essa reta para aproximar a solução.

Formulação Do Método

A fórmula iterativa do método das secantes é dada por:

xn+1=xnf(xn)(xnxn1)f(xn)f(xn1)

onde:

Passos Do Método

  1. Escolha Inicial dos Pontos:

    • Selecione dois pontos iniciais próximos à raiz, geralmente denotados por x0 e x1.
  2. Iteração:

    • Para cada iteração n, calcule o próximo valor de xn+1 usando a fórmula acima.
  3. Convergência:

    • A iteração continua até que a diferença entre os valores consecutivos seja menor do que um critério de parada ϵ:
|xn+1xn|<ϵ
  1. Exemplo:
    Considere a função f(x)=x32x5. Sejam os pontos iniciais x0=2 e x1=2.5.

    • Iteração 1:
f(2)=23225=1f(2.5)=(2.5)322.55=4.875x2=2.54.875(2.52)4.875+12.094 f(2.094)(2.094)322.09450.678x3=2.0940.678(2.0942.5)0.678+4.8752.094551

Aproximadamente, a raiz é x2.094551.

Exemplo em Python

import math
import numpy


def secant_method(f, x0, x1, tol=1e-6, max_iter=100):
    """
    Find a root of the function f(x) = 0 using the Secant method.

    Parameters:
    f        -- Function for which the root is sought (callable)
    x0, x1   -- Initial approximations (floats)
    tol      -- Tolerance for stopping criterion (float, default 1e-6)
    max_iter -- Maximum number of iterations (int, default 100)

    Returns:
    result -- Dictionary with keys:
        'root'           : Approximated root (float)
        'function_value' : Value of f at the root (float)
        'iterations'     : Number of iterations performed (int)
        'converged'      : Boolean indicating if the method converged (bool)
    """
    fx0 = f(x0)
    fx1 = f(x1)
    iteration = 0
    while iteration < max_iter:
	# Check If The Denominator Is Too Close To Zero
        if abs(fx1 - fx0) < tol:
            return {
                'root': x1,
                'iterations': iteration,
                'function_value': fx1,
                'converged': abs(fx1) < tol
            }
		# Secant Method Formula
        x_new = x1 - fx1 * (x1 - x0) / (fx1 - fx0)
		# Update Values For Next Iteration
        x0, x1 = x1, x_new
        fx0, fx1 = fx1, f(x_new)
        iteration += 1
		# Check For Convergence
        if abs(fx1) < tol or (iteration > 0 and abs(x1 - x0) < tol):
            break
    return {
        'root': x1,
        'iterations': iteration,
        'function_value': fx1,
        'converged': iteration < max_iter
    }


if __name__ == "__main__":
    def example_function(x):
        return numpy.cos(x) - x

    result = secant_method(example_function, 0.5, 1, tol=1e-4)
    print(f"Approximate root: {result['root']}")
    print(f"Function value at the root: {result['function_value']}")
    print(f"Number of iterations: {result['iterations']}")
    print(f"Converged: {result['converged']}")

Arquivo Adicional

![[Método Secantes.pdf]]