Raíces no lineales · Tema 13

Método de la secante

Cómo aproximar la pendiente con dos evaluaciones anteriores y conservar gran parte de la velocidad de Newton sin calcular una derivada simbólica.

01 · Punto de partida

Newton sin una derivada explícita

Newton-Raphson utiliza la pendiente de la tangente f′(xₙ). Si la derivada es difícil de obtener, costosa o no está disponible porque la función proviene de una simulación, podemos aproximarla mediante los dos últimos puntos:

f′(xn) ≈ (f(xn) − f(xn−1)) / (xn − xn−1)

Al sustituir esta pendiente en Newton obtenemos el método de la secante:

xn+1 = xn − f(xn) (xn−xn−1) / (f(xn)−f(xn−1))

El método necesita dos valores iniciales y, después de las dos primeras evaluaciones, utiliza una evaluación nueva de la función por iteración.

02 · Construcción geométrica

Intersección de la recta secante

Dados los puntos (xₙ₋₁,f(xₙ₋₁)) y (xₙ,f(xₙ)), su recta secante tiene pendiente:

mn = (f(xn)−f(xn−1)) / (xn−xn−1)

La ecuación de la recta desde el segundo punto es:

y = f(xn) + mn(x−xn)

Al imponer y=0 y despejar x, obtenemos xₙ₊₁. Geométricamente, cada paso reemplaza la curva por la recta que une las dos últimas aproximaciones.

function pasoSecante(f, anterior, actual) {
  const fAnterior = f(anterior);
  const fActual = f(actual);
  const denominador = fActual - fAnterior;

  if (denominador === 0) {
    throw new Error("La secante es horizontal");
  }
  return actual - fActual * ((actual - anterior) / denominador);
}

03 · Procedimiento

El algoritmo paso a paso

  1. 1
    Elegir dos valores.

    Definir x₀ y x₁, distintos y dentro del dominio.

  2. 2
    Evaluar la función.

    Calcular y conservar f(x₀) y f(x₁).

  3. 3
    Construir la secante.

    Verificar que f(x₁)−f(x₀) no sea demasiado pequeño.

  4. 4
    Actualizar.

    Calcular la intersección x₂ con el eje horizontal.

  5. 5
    Desplazar la memoria.

    Reemplazar (x₀,x₁) por (x₁,x₂).

  6. 6
    Comprobar.

    Evaluar cambio, residuo, finitud, ciclos y máximo de iteraciones.

xₙ₋₁, xₙ→secante→xₙ₊₁→descartar xₙ₋₁

04 · Ejemplo manual

Aproximar √2

Usamos f(x)=x²−2, x₀=1 y x₁=2.

Primeras actualizaciones del método.
nxₙ₋₁xₙxₙ₊₁|f(xₙ₊₁)|
11.0000002.0000001.33333333330.2222222222
22.0000001.33333333331.40000000000.0400000000
31.33333333331.40000000001.41463414630.0011897679
41.40000000001.41463414631.41421143850.0000060073
51.41463414631.41421143851.4142135621aprox. 8.93×10⁻¹⁰

La secuencia no mantiene necesariamente una raíz entre los dos últimos valores, pero converge rápidamente en este ejemplo.

05 · Velocidad asintótica

Convergencia superlineal

Para una raíz simple, una función suficientemente regular y valores iniciales favorables, la secante tiene orden de convergencia:

p = (1+√5)/2 ≈ 1.618

Este número es la proporción áurea. El método converge más rápido que un proceso lineal, aunque generalmente más lento que la convergencia cuadrática de Newton.

Velocidad y costo local por iteración.
MétodoOrden típicoEvaluaciones nuevas
Bisección1, lineal1 función
Secanteaprox. 1.6181 función
Newton2, cuadrática1 función + 1 derivada

Comparar solo el número de iteraciones puede ser engañoso. Si la derivada es costosa, la secante puede alcanzar una solución en menos tiempo total aunque necesite más pasos que Newton.

06 · Relación con Newton

Derivada exacta o pendiente aproximada

Newton-Raphson

Usa f′(xₙ)

Necesita una derivada disponible y confiable. Posee convergencia cuadrática local.

Secante

Usa diferencias entre dos puntos

No requiere derivada explícita. Posee convergencia superlineal local.

La secante reutiliza f(xₙ₋₁) y f(xₙ). Después de inicializar, solo evalúa la función en el nuevo punto. Esta memoria explica su eficiencia.

07 · Dos usos de la misma recta

Secante y falsa posición no son el mismo método

Ambos calculan la intersección de una secante con el eje, pero actualizan los puntos de manera diferente.

Diferencia fundamental de actualización.
CaracterísticaSecanteFalsa posición
Puntos siguientesLos dos más recientesLos que mantienen signos opuestos
Encierra una raízNoSí, bajo continuidad
TipoAbiertoAcotado
Orden típicoSuperlinealGeneralmente lineal
Riesgo principalDivergencia o salida del dominioBloqueo de un extremo

La fórmula del punto puede coincidir en una iteración, pero la historia posterior será distinta porque cada algoritmo conserva puntos diferentes.

08 · Preparar la iteración

Elegir dos valores iniciales

Los valores x₀ y x₁ deben ser distintos y producir valores de función suficientemente diferentes. No es obligatorio que tengan signos opuestos, pero un intervalo explorado previamente aporta contexto y seguridad.

Buenas estrategias:

  • usar extremos de un intervalo que aísle una raíz;
  • elegir dos muestras cercanas a un cruce observado;
  • evitar puntos con valores de función casi iguales;
  • respetar el dominio y las restricciones del modelo;
  • no separar excesivamente los puntos si la función cambia mucho.

Si x₀ y x₁ están muy juntos, la pendiente puede sufrir cancelación. Si están demasiado separados, la secante puede representar mal la forma local.

09 · Secante casi horizontal

Denominador pequeño

El paso contiene el denominador:

f(xn) − f(xn−1)

Si ambos valores son iguales o casi iguales, la pendiente de la secante es cero o muy pequeña y el nuevo punto puede quedar extremadamente lejos.

Una comprobación escalada puede comparar:

|fn−fn−1| ≤ tolden · max(1,|fn|,|fn−1|)
function denominadorUtil(fAnterior, fActual, tolerancia = 1e-14) {
  const diferencia = Math.abs(fActual - fAnterior);
  const escala = Math.max(1, Math.abs(fAnterior), Math.abs(fActual));
  return diferencia > tolerancia * escala;
}

El umbral debe adaptarse al problema. Rechazar el paso permite cambiar valores, aplicar bisección o finalizar con un diagnóstico claro.

10 · Dinámicas problemáticas

Divergencia, ciclos y salida del dominio

Divergencia

Los puntos se alejan

La aproximación lineal no representa bien la curva en esa región.

Secante horizontal

El paso se vuelve enorme

Los valores de función consecutivos son casi iguales.

Ciclo

Se repite una secuencia

La dinámica vuelve a pares anteriores sin disminuir el residuo.

Dominio inválido

El nuevo punto no puede evaluarse

Aparecen NaN, infinitos o una excepción del modelo.

Como método abierto, la secante no impide que xₙ₊₁ salga de una región razonable. Un límite de paso o un intervalo protector puede mejorar su robustez.

11 · Criterios de finalización

Comprobar cambio y residuo

Una política conservadora exige simultáneamente:

|xn+1−xn| ≤ tolabs + tolrel|xn+1|
|f(xn+1)| ≤ tolf

También debemos controlar:

  • máximo de iteraciones y evaluaciones;
  • denominador pequeño;
  • valores no finitos;
  • estancamiento xₙ₊₁===xₙ;
  • ciclos cortos y crecimiento excesivo.

Un cambio pequeño puede deberse a redondeo o a una secante degenerada, por lo que el residuo es indispensable.

12 · Código reutilizable

Implementación robusta en JavaScript

function secante(funcion, x0, x1, opciones = {}) {
  const {
    toleranciaAbsoluta = 1e-12,
    toleranciaRelativa = 1e-9,
    toleranciaResiduo = 1e-10,
    toleranciaDenominador = 1e-14,
    maxIteraciones = 100,
    guardarHistorial = false
  } = opciones;

  if (!Number.isFinite(x0) || !Number.isFinite(x1) || x0 === x1) {
    throw new Error("Se requieren dos valores iniciales finitos y distintos");
  }
  if (!Number.isInteger(maxIteraciones) || maxIteraciones < 1) {
    throw new Error("El máximo debe ser un entero positivo");
  }

  let anterior = x0;
  let actual = x1;
  let fAnterior = funcion(anterior);
  let fActual = funcion(actual);
  const historial = [];

  if (!Number.isFinite(fAnterior) || !Number.isFinite(fActual)) {
    throw new Error("La función no es finita en los valores iniciales");
  }
  if (Math.abs(fAnterior) <= toleranciaResiduo) {
    return resultado(anterior, true, "primer_inicial", 0);
  }
  if (Math.abs(fActual) <= toleranciaResiduo) {
    return resultado(actual, true, "segundo_inicial", 0);
  }

  for (let iteracion = 1; iteracion <= maxIteraciones; iteracion++) {
    const denominador = fActual - fAnterior;
    const escala = Math.max(1, Math.abs(fActual), Math.abs(fAnterior));

    if (!Number.isFinite(denominador)
        || Math.abs(denominador) <= toleranciaDenominador * escala) {
      return resultado(actual, false, "secante_invalida",
        iteracion - 1, { residuo: Math.abs(fActual), historial });
    }

    const siguiente = actual
      - fActual * ((actual - anterior) / denominador);
    const fSiguiente = funcion(siguiente);
    const cambio = Math.abs(siguiente - actual);
    const limite = toleranciaAbsoluta
      + toleranciaRelativa * Math.abs(siguiente);

    if (guardarHistorial) {
      historial.push({ iteracion, anterior, actual, siguiente,
        fAnterior, fActual, fSiguiente, cambio });
    }
    if (!Number.isFinite(siguiente) || !Number.isFinite(fSiguiente)) {
      return resultado(siguiente, false, "valor_no_finito",
        iteracion, { cambio, residuo: Math.abs(fSiguiente), historial });
    }
    if (cambio <= limite && Math.abs(fSiguiente) <= toleranciaResiduo) {
      return resultado(siguiente, true, "tolerancias",
        iteracion, { cambio, residuo: Math.abs(fSiguiente), historial });
    }
    if (siguiente === actual) {
      return resultado(siguiente, false, "estancamiento",
        iteracion, { cambio, residuo: Math.abs(fSiguiente), historial });
    }
    if (siguiente === anterior) {
      return resultado(siguiente, false, "ciclo_periodo_2",
        iteracion, { cambio, residuo: Math.abs(fSiguiente), historial });
    }

    anterior = actual;
    fAnterior = fActual;
    actual = siguiente;
    fActual = fSiguiente;
  }

  return resultado(actual, false, "maximo_iteraciones",
    maxIteraciones, { residuo: Math.abs(fActual), historial });
}

function resultado(valor, convergio, motivo, iteraciones, datos = {}) {
  return { valor, convergio, motivo, iteraciones, ...datos };
}

La función conserva evaluaciones previas para no repetir cálculos y devuelve diagnósticos en lugar de ocultar los fallos.

13 · Mejorar la robustez

Secante amortiguada e híbrida

Podemos limitar el paso o combinar la secante con un intervalo protector:

  1. proponer xₙ₊₁ mediante secante;
  2. rechazarlo si no es finito, sale del intervalo o resulta demasiado grande;
  3. usar bisección como alternativa segura;
  4. actualizar el intervalo por signos;
  5. conservar los puntos más informativos para la próxima interpolación.

Otra posibilidad es amortiguar el paso:

xn+1 = xn + λ(xsecante−xn),    0<λ≤1

Las bibliotecas numéricas suelen utilizar métodos híbridos más sofisticados, como Brent, que combinan bisección, secante e interpolación cuadrática inversa.

14 · Exploración interactiva

Laboratorio: seguir las rectas secantes

Elegí una función, dos valores iniciales y una cantidad de actualizaciones. El gráfico muestra cada secante y su intersección con el eje.

EXPERIMENTO 13

Dos puntos y una nueva aproximación

f(x) = x² − 2

Los resultados numéricos aparecen debajo.
Aproximación1,414213562
Residuo8,93e−10
Último cambio2,12e−6
Estado5 pasos

La secante converge hacia √2 sin evaluar una derivada.

Preguntas para explorar

  1. Para x²−2, acercá entre sí los valores iniciales. ¿Cómo cambia el primer paso?
  2. En la función difícil, probá x₀=0 y x₁=1.
  3. Compará una raíz simple con (x−1)³.
  4. Buscá dos valores que produzcan alturas casi iguales y observá el diagnóstico.

15 · Comprensión

Confusiones frecuentes

«Secante y falsa posición son sinónimos»

Comparten la fórmula de interpolación, pero secante conserva los dos puntos más recientes y falsa posición conserva un cambio de signo.

«No calcular una derivada significa que no hay información de pendiente»

La pendiente se aproxima mediante una diferencia dividida entre las dos últimas evaluaciones.

«Dos valores iniciales de signos opuestos garantizan el encierro»

El primer paso puede usar ese intervalo, pero las iteraciones posteriores no preservan necesariamente signos opuestos.

«El orden 1.618 garantiza convergencia»

Es una propiedad local bajo condiciones favorables, no una garantía global desde cualquier par inicial.

«Un denominador no nulo siempre es seguro»

Si es muy pequeño respecto de la escala de f, puede producir un paso enorme y pérdida de precisión.

16 · Práctica guiada

Ejercicios

Ejercicio 1: primer paso

Aplicá un paso de secante a f(x)=x²−3 con x₀=1 y x₁=2.

Ver solución

f(1)=−2 y f(2)=1. Entonces x₂=2−1(2−1)/(1−(−2))=5/3≈1.666667.

Ejercicio 2: siguiente aproximación

Continuá el ejercicio anterior usando x₁=2 y x₂=5/3.

Ver solución razonada

f(2)=1 y f(5/3)=−2/9. La fórmula produce x₃≈1.7272727273, más cercano a √3≈1.7320508076.

Ejercicio 3: secante inválida

¿Qué ocurre al usar f(x)=x² con x₀=−1 y x₁=1?

Ver solución

f(−1)=f(1)=1. El denominador es cero, la secante es horizontal y no existe una intersección finita calculable con la fórmula.

Ejercicio 4: costo

Si evaluar f cuesta 20 ms y evaluar f′ cuesta 30 ms, compará el costo de diez iteraciones de Newton y secante después de inicializar.

Ver solución

Newton requiere aproximadamente 10×(20+30)=500 ms. Secante reutiliza una evaluación y necesita aproximadamente 10×20=200 ms después de las dos evaluaciones iniciales. La comparación real también debe considerar cuántas iteraciones necesita cada método.

Ejercicio 5: limitar el paso

Escribí una función que limite la magnitud de una propuesta de secante a pasoMaximo.

Ver una posible solución
function limitarPaso(actual, propuesta, pasoMaximo) {
  if (!(pasoMaximo > 0)) {
    throw new Error("El paso máximo debe ser positivo");
  }
  const paso = propuesta - actual;
  if (Math.abs(paso) <= pasoMaximo) return propuesta;
  return actual + Math.sign(paso) * pasoMaximo;
}

17 · Síntesis

Ideas para recordar

  • La secante aproxima la derivada utilizando los dos últimos puntos.
  • Necesita dos valores iniciales y una evaluación nueva por iteración.
  • Su orden local típico es la proporción áurea, aproximadamente 1.618.
  • Es más rápida que los métodos lineales, pero generalmente más lenta que Newton cerca de una raíz simple.
  • No conserva automáticamente un intervalo con cambio de signo.
  • Un denominador pequeño puede generar pasos enormes o una secante inválida.
  • Debe comprobar cambio, residuo, finitud, ciclos y presupuesto.
  • Las estrategias híbridas combinan su eficiencia con la seguridad de bisección.

En el próximo tema compararemos todos los métodos para raíces, sus costos, garantías, velocidades y estrategias híbridas para elegir una solución robusta.