CurveFit.jl is a high-performance curve fitting library for Julia that provides linear, polynomial, special function, and nonlinear least squares fitting algorithms. It is part of the SciML ecosystem and implements the common solve interface from CommonSolve.jl.
To install CurveFit.jl, use the Julia package manager:
using Pkg
Pkg.add("CurveFit")CurveFit.jl provides the following fitting algorithms:
- Linear fitting:
LinearCurveFitAlgorithm- General linear fits with customizable transformations - Log fitting:
LogCurveFitAlgorithm- Fitsy = a*log(x) + b - Power fitting:
PowerCurveFitAlgorithm- Fitsy = b*x^a - Exponential fitting:
ExpCurveFitAlgorithm- Fitsy = b*exp(a*x) - Polynomial fitting:
PolynomialFitAlgorithm- Fits polynomials of arbitrary degree - Rational polynomial fitting:
RationalPolynomialFitAlgorithm- Fits rational functions p(x)/q(x) - Sum of exponentials:
ExpSumFitAlgorithm- Fitsy = k + p1*exp(λ1*t) + p2*exp(λ2*t) + ... - King's law:
KingCurveFitAlgorithm,ModifiedKingCurveFitAlgorithm- For hotwire anemometry - Nonlinear least squares: Via
NonlinearCurveFitProblemwith any user-defined function
using CurveFit
x = 1.0:10.0
y = @. 1.0 + 2.0 * x # y = 1 + 2x
prob = CurveFitProblem(x, y)
sol = solve(prob, LinearCurveFitAlgorithm())
sol.u # (2.0, 1.0) - coefficients (slope, intercept)
sol(5.0) # Evaluate fitted curve at x=5using CurveFit
x = 1.0:10.0
y = @. 1.0 + 2.0*x + 0.5*x^2
prob = CurveFitProblem(x, y)
sol = solve(prob, PolynomialFitAlgorithm(degree=2))
sol.u # [1.0, 2.0, 0.5] - polynomial coefficients
sol(3.0) # Evaluate at x=3using CurveFit
x = 1.0:10.0
fn(a, x) = @. a[1] + a[2] * x^a[3] # Nonlinear model
y = fn([3.0, 2.0, 0.7], x) # Generate data
prob = NonlinearCurveFitProblem(fn, [0.5, 0.5, 0.5], x, y) # Initial guess
sol = solve(prob)
sol.u # Fitted parameters ≈ [3.0, 2.0, 0.7]
sol(5.0) # Evaluate at x=5CurveFit.jl provides statistical functions compatible with StatsAPI.jl:
using CurveFit
# ... after fitting ...
coef(sol) # Fitted coefficients
residuals(sol) # Residuals
fitted(sol) # Fitted values
rss(sol) # Residual sum of squares
stderror(sol) # Standard errors
confint(sol) # Confidence intervalsFor more details, see the documentation.