# First release of adaptive-curvefitting

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

## Table of contents

## Why is this tool

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.

**.**

*When you explore something unknown, this will be a maybe*## Installation, update and uninstallation

### To install

Quick installation with pip:

```
pip install adaptive-curvefitting
```

### To update

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

### To uninstall

```
pip uninstall adaptive-curvefitting
```

## Usage

### Import the required module

In general,

```
import longscurvefitting
```

or import the specified function:

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

### Do the curvefitting

```
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”.

### Generate a expected model

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”.

### Re-use the fitted curve

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

## Shortages

- 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*

## How to cite

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

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

Easily, you can import it to Mendeley.