- Contents
- Examples
- Installation
- FAQ
- Support
- Develop

# 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. A `Parameter` 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
  - Prerequisites
  - Downloads
  - Installation
  - Development Version
  - Testing
  - Acknowledgements
  - Copyright, Licensing, and Re-distribution
- 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?
  - How should I cite LMFIT?
  - I get errors from NaN in my fit. What can I do?
  - Why are Parameter values sometimes stuck at initial values?
  - Why are uncertainties in Parameters sometimes not determined?
  - Can Parameters be used for Array Indices or Discrete Values?
- `Parameter` and `Parameters`
  - The `Parameter` class
  - The `Parameters` class
  - The `create_params()` function
  - Simple Example
- Performing Fits and Analyzing Outputs
  - The `minimize()` function
  - Writing a Fitting Function
  - Types of Data to Use for Fitting
  - 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
- Modeling Data and Curve Fitting
  - Motivation and simple example: Fit data to Gaussian profile
  - The `Model` class
  - The `ModelResult` class
  - Composite Models : adding (or multiplying) Models
- Built-in Fitting Models in the `models` module
  - Peak-like models
  - Linear and Polynomial Models
  - Periodic Models
  - Step-like models
  - Exponential and Power law models
  - Two dimensional Peak-like 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
  - Example 4: Using a Spline Model
- Calculation of confidence intervals
  - Method used for calculating confidence intervals
  - A basic example
  - Working without standard error estimates
  - Calculating and visualizing maps of \(\chi^2\)
  - An advanced example for evaluating confidence intervals
  - Confidence Interval Functions
- Bounds Implementation
- Using Mathematical Constraints
  - Overview
  - Supported Operators, Functions, and Constants
  - Using Inequality Constraints
  - Advanced usage of Expressions in lmfit
- Release Notes
  - Version 1.3.2 Release Notes (July 19, 2024)
  - Version 1.3.1 Release Notes (April 19, 2024)
  - Version 1.3.0 Release Notes (April 4, 2024)
  - Version 1.2.2 Release Notes (July 14, 2023)
  - Version 1.2.1 Release Notes (May 02, 2023)
  - Version 1.2.0 Release Notes (April 05, 2023)
  - Version 1.1.0 Release Notes (November 27, 2022)
  - Version 1.0.3 Release Notes (October 14, 2021)
  - Version 1.0.2 Release Notes (February 7, 2021)
  - Version 1.0.1 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