Encontrar raíces en Python
root_scalar para una ecuación, root para un sistema, least_squares para un ajuste.
import numpy as np
from scipy import optimize
uno = optimize.root_scalar(lambda x: x ** 3 - 2 * x - 5,
bracket=[2, 3], method="brentq")
print(round(uno.root, 6), uno.iterations, uno.converged)
newton = optimize.root_scalar(lambda x: np.cos(x) - x, x0=0.5,
fprime=lambda x: -np.sin(x) - 1,
method="newton")
print(round(newton.root, 6))
def sistema(v):
x, y = v
return [x + y - 3, x * y - 2]
ambos = optimize.root(sistema, x0=[0.0, 5.0])
print(ambos.x.round(4), ambos.success)
Cómo funciona
bracketnecesita un cambio de signo entre los dos extremos.fprimedeja que el método de Newton converja más rápido.least_squaresminimiza un vector de residuos.
Palabras clave y builtins usados aquí
asdeflambdaprintreturnround
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 480
- Tokens
- 171
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 93 segundos.
Paso 4 de 4 en Optimización; paso 13 de 23 en Computación científica con SciPy.