Non-Linear Least-Squares Minimization and Curve-Fitting for Python¶
Lmfit provides a high-level interface to non-linear optimization and curve fitting problems for Python. It builds on and extends many of the optimization methods of scipy.optimize. Initially inspired by (and named for) extending the Levenberg-Marquardt method from scipy.optimize.leastsq, lmfit now provides a number of useful enhancements to optimization and data fitting problems, including:
Using
Parameter
objects instead of plain floats as variables. AParameter
has a value that can be varied during the fit or kept at a fixed value. It can have upper and/or lower bounds. A Parameter can even have a value that is constrained by an algebraic expression of other Parameter values. As a Python object, a Parameter can also have attributes such as a standard error, after a fit that can estimate uncertainties.Ease of changing fitting algorithms. Once a fitting model is set up, one can change the fitting algorithm used to find the optimal solution without changing the objective function.
Improved estimation of confidence intervals. While scipy.optimize.leastsq will automatically calculate uncertainties and correlations from the covariance matrix, the accuracy of these estimates is sometimes questionable. To help address this, lmfit has functions to explicitly explore parameter space and determine confidence levels even for the most difficult cases. Additionally, lmfit will use the
numdifftools
package (if installed) to estimate parameter uncertainties and correlations for algorithms that do not natively support this in SciPy.Improved curve-fitting with the
Model
class. This extends the capabilities of scipy.optimize.curve_fit, allowing you to turn a function that models your data into a Python class that helps you parametrize and fit data with that model.Many built-in models for common lineshapes are included and ready to use.
The lmfit package is Free software, using an Open Source license. The software and this document are works in progress. If you are interested in participating in this effort please use the lmfit GitHub repository.
- Getting started with Non-Linear Least-Squares Fitting
- Downloading and Installation
- Getting Help
- Frequently Asked Questions
- What’s the best way to ask for help or submit a bug report?
- Why did my script break when upgrading from lmfit 0.8.3 to 0.9.0?
- I get import errors from IPython
- How can I fit multi-dimensional data?
- How can I fit multiple data sets?
- How can I fit complex data?
- Can I constrain values to have integer values?
- How should I cite LMFIT?
- I get errors from NaN in my fit. What can I do?
Parameter
andParameters
- Performing Fits and Analyzing Outputs
- The
minimize()
function - Writing a Fitting Function
- Choosing Different Fitting Methods
MinimizerResult
– the optimization result- Getting and Printing Fit Reports
- Using a Iteration Callback Function
- Using the
Minimizer
class Minimizer.emcee()
- calculating the posterior probability distribution of parameters
- The
- Modeling Data and Curve Fitting
- Built-in Fitting Models in the
models
module- Peak-like models
- Linear and Polynomial Models
- Step-like models
- Exponential and Power law models
- User-defined Models
- Example 1: Fit Peak data to Gaussian, Lorentzian, and Voigt profiles
- Example 2: Fit data to a Composite Model with pre-defined models
- Example 3: Fitting Multiple Peaks – and using Prefixes
- Calculation of confidence intervals
- Bounds Implementation
- Using Mathematical Constraints
- Release Notes
- Version 1.0.0 Release Notes
- Version 0.9.15 Release Notes
- Version 0.9.14 Release Notes
- Version 0.9.13 Release Notes
- Version 0.9.12 Release Notes
- Version 0.9.10 Release Notes
- Version 0.9.9 Release Notes
- Version 0.9.6 Release Notes
- Version 0.9.5 Release Notes
- Version 0.9.4 Release Notes
- Version 0.9.3 Release Notes
- Version 0.9.0 Release Notes
- Examples gallery
- Examples from the documentation