Quick Start

Example 1 — Adaptive quadrature (Gaussian integral):

import numpy as np
from integrationdifferentiation import integrate_adaptive_infinite

# ∫_0^∞ exp(-x²) dx = √π / 2 ≈ 0.88623
result = integrate_adaptive_infinite(
    lambda x: np.exp(-x**2), a=0.0, b=np.inf
)
print(result.value)  # -> 0.8862269254527580
print(result.error)  # -> < 1e-8

Example 2 — 2D iterated integral:

from integrationdifferentiation import integrate_2d

# ∫_0^1 ∫_0^1 x*y dy dx = 0.25
result = integrate_2d(
    lambda y, x: x * y,
    ax=0.0, bx=1.0,
    g=lambda x: 0.0,
    h=lambda x: 1.0,
)
print(result.value)  # -> 0.25

Example 3 — Gauss-Legendre quadrature rule:

import numpy as np
from integrationdifferentiation import gauss_quadrature_rule

# 5-point Gauss-Legendre rule on [-1, 1]
rule = gauss_quadrature_rule(5, weight_type='legendre')
print(rule.points)   # [-0.906..., -0.538..., 0.0, 0.538..., 0.906...]
print(rule.weights)  # [0.236..., 0.478..., 0.568..., 0.478..., 0.236...]

# Use it to integrate exp(-x) on [-1, 1]
import math
estimate = float(np.dot(rule.weights, [math.exp(-x) for x in rule.points]))
print(estimate)  # -> 2.35040...  (exact: e - 1/e)

Example 4 — Numerical differentiation:

import math
from integrationdifferentiation import differentiate

# d/dx sin(x) at x = π/4 = cos(π/4) = √2/2 ≈ 0.70711
result = differentiate(math.sin, math.pi / 4, order=1)
print(result)  # -> 0.7071067811865475

# d²/dx² sin(x) at x = π/4 = -sin(π/4) ≈ -0.70711
result2 = differentiate(math.sin, math.pi / 4, order=2)
print(result2)  # -> -0.7071067811865...