Skip to content

Least squares and curve fitting in Julia with speed and robustness

License

Notifications You must be signed in to change notification settings

SciML/CurveFit.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

170 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

CurveFit.jl

Join the chat at https://julialang.zulipchat.com #sciml-bridged Global Docs

codecov Build Status

ColPrac: Contributor's Guide on Collaborative Practices for Community Packages SciML Code Style

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.

Installation

To install CurveFit.jl, use the Julia package manager:

using Pkg
Pkg.add("CurveFit")

Features

CurveFit.jl provides the following fitting algorithms:

  • Linear fitting: LinearCurveFitAlgorithm - General linear fits with customizable transformations
  • Log fitting: LogCurveFitAlgorithm - Fits y = a*log(x) + b
  • Power fitting: PowerCurveFitAlgorithm - Fits y = b*x^a
  • Exponential fitting: ExpCurveFitAlgorithm - Fits y = 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 - Fits y = k + p1*exp(λ1*t) + p2*exp(λ2*t) + ...
  • King's law: KingCurveFitAlgorithm, ModifiedKingCurveFitAlgorithm - For hotwire anemometry
  • Nonlinear least squares: Via NonlinearCurveFitProblem with any user-defined function

Quick Start

Linear Fit

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=5

Polynomial Fit

using 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=3

Nonlinear Fit

using 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=5

Statistical Analysis

CurveFit.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 intervals

Documentation

For more details, see the documentation.

About

Least squares and curve fitting in Julia with speed and robustness

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Packages

 
 
 

Contributors

Languages