Adaptive curvefitting is a tool to find potentially optimal models for your research data. It’s based on scipy, numpy, and matplotlib.

The very difference of adaptive-curvefitting with numpy.polyfit, scipy.optimize.curve_fit or scipy.optimize.least_squares is ** the hypothesis you don’t know which model to fit**. If you already have the expected model, the methods in scipy and numpy are fantastic tools and better than this one.

Quick installation with pip:

```
pip install adaptive-curvefitting
```

Or from github:

```
pip install git+https://github.com/longavailable/adaptive-curvefitting
```

```
pip install --upgrade adaptive-curvefitting
```

```
pip uninstall adaptive-curvefitting
```

In general,

```
import longscurvefitting
```

or import the specified function:

```
from longscurvefitting import oneClickCurveFitting
from longscurvefitting import generateFunction
from longscurvefitting import generateModels
```

```
oneClickCurveFitting(xdata, ydata)
```

There are some optional arguments of `oneClickCurveFitting`

.

- functions: specified or all (default) basic models(name of models) to fit.
- Type: list of string
- Default: basicModels_nameList

- piecewise: if consider custom a piecewise function. It is mandatory not to ‘piecewise’ when the data size is less than 20.
- Type: bool
- Default: False

- operator: operatation between basic models.
- Type: string
- Default: ‘+’

- maxCombination: max number of combination of basic models.
- Type: integer
- Default: 2

- plot_opt: the number of plot for optimal models.
- Type: integer
- Default: 10

- xscale: one of {“linear”, “log”, “symlog”, “logit”, …}
- Type: string
- Default: None

- yscale: one of {“linear”, “log”, “symlog”, “logit”, …}
- Type: string
- Default: None

- filename_startwith: a custom string mark as part of output filename
- Type: string
- Default: ‘curvefit’

- silent: minimal output to monitor
- Type: boolean
- Default: False

- feedback: if True, return the optimal model(function object), parameters
- Type: boolean
- Default: False

- kwargs: keyword arguments passed to
`curve_fit_m`

. Note that`bounds`

and`p0`

will take no effect when multi-models.- Type: dict

See the complete example “/tests/curvefitting.py”.

Create a model composited by gaussian and erf function:

```
funcs = ['gaussian','erf']
myfunc = generateFunction(funcs, functionName='myfunc', operator='+')['model']
```

See the complete example “/tests/custom_a_model.py”.

See the complete example “/tests/reuse_the_fitted_model.py”.

- Based on scipy.optimize.least_squares, it cannot enhance the estimate of specified model. Evenmore, it has more limit than scipy.optimize.least_squares.
For example, arguments of
`bounds`

,`x0`

or`p0`

were not supported due to the.*basic hypothesis*

If this tool is useful to your research, star and cite it as below:

```
Xiaolong Liu, & Meixiu Yu. (2020, June 14). longavailable/adaptive-curvefitting. Zenodo.
http://doi.org/10.5281/zenodo.3893596
```

Easily, you can import it to Mendeley.

- First release.

- Add
`queryModel()`

to simplify the reuse of a fitted model. - Replace
`from scipy._lib._util import getargspec_no_self as _getargspec`

with`from ._helpers import funcArgsNr`