Quick Start

Example 1 — Polynomial roots (ZPLRC):

import numpy as np
from nonlinearequations import polynomial_roots_real

# p(x) = x^4 - 5x^3 + 5x^2 + 5x - 6 = (x+1)(x-1)(x-2)(x-3)
# coefficients in ascending degree order: [a0, a1, ..., a4]
coeffs = np.array([-6.0, 5.0, 5.0, -5.0, 1.0])
result = polynomial_roots_real(coeffs)
print(sorted(result.x.real))  # -> [-1.0, 1.0, 2.0, 3.0]
print(result.fval)             # -> ~0.0 (max |p(root)|)

Example 2 — Univariate zero-finding (ZUNI):

from nonlinearequations import zero_univariate

# Find zero of f(x) = x^3 - x - 2 on [1, 2]
result = zero_univariate(lambda x: x**3 - x - 2, a=1.0, b=2.0)
print(result.x[0])  # -> ~1.5214

# Find zero of cos(x) on [1, 2]
import math
result = zero_univariate(math.cos, a=1.0, b=2.0)
print(result.x[0])  # -> ~1.5708 (pi/2)

Example 3 — Nonlinear system solver (NEQNF):

import numpy as np
from nonlinearequations import solve_system_fd

# Solve: x1^2 + x2^2 = 1, x1 - x2 = 0
def f(x):
    return np.array([x[0]**2 + x[1]**2 - 1, x[0] - x[1]])

result = solve_system_fd(f, x_guess=np.array([0.8, 0.6]))
print(result.x)    # -> [~0.7071, ~0.7071]
print(result.fval) # -> ~0.0