import numpy as np
from splinefit import CubicSpline
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
spline = CubicSpline.interpolating(x, y)
integral_0_pi = spline.integral(0, np.pi) integral_full = spline.integral(0, 2 * np.pi) print(f"integral [0, pi]: {integral_0_pi:.10f} (exact: 2.0)")
print(f"integral [0, 2pi]: {integral_full:.10f} (exact: 0.0)")
zeros = spline.roots()
print(f"\nZeros found: {len(zeros)}")
for z in zeros:
print(f" x = {z:.8f} (sin(x) = {np.sin(z):.2e})")
pi_zero = zeros[np.argmin(np.abs(zeros - np.pi))]
print(f"\nClosest zero to pi: {pi_zero:.10f} (error: {abs(pi_zero - np.pi):.2e})")