# CurveFitting examples¶

Let’s define a small helper function:

```def print_me(msg, val):

print("{}: {}".format(msg, val))
```

Now let’s work with the CurveFitting class. First, create a CurveFitting object:

```cf1 = CurveFitting([73.0, 38.0, 35.0, 42.0, 78.0, 68.0, 74.0, 42.0, 52.0,

54.0, 39.0, 61.0, 42.0, 49.0, 50.0, 62.0, 44.0, 39.0,

43.0, 54.0, 44.0, 37.0],

[90.4, 125.3, 161.8, 143.4, 52.5, 50.8, 71.5, 152.8,

131.3, 98.5, 144.8, 78.1, 89.5, 63.9, 112.1, 82.0,

119.8, 161.2, 208.4, 111.6, 167.1, 162.1])
```

Let’s use `linear_fitting()`:

```a, b = cf1.linear_fitting()

print("   a = {}\tb = {}".format(round(a, 2), round(b, 2)))

#    a = -2.49      b = 244.18
```

Use the copy constructor:

```cf2 = CurveFitting(cf1)

a, b = cf2.linear_fitting()

print("   a = {}\tb = {}".format(round(a, 2), round(b, 2)))

#    a = -2.49      b = 244.18
```

Get the number of value pairs internally stored:

```print_me("Number of value pairs inside 'cf2'", len(cf2))

# Number of value pairs inside 'cf2': 22
```

Compute the correlation coefficient:

```r = cf1.correlation_coeff()

print_me("   r", round(r, 3))

#    r: -0.767
```

Define a new CurveFitting object:

```cf2 = CurveFitting([-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0],

[-9.372, -3.821, 0.291, 3.730, 5.822, 8.324, 9.083,

6.957, 7.006, 0.365, -1.722])
```

Now use `quadratic_fitting()`:

```a, b, c = cf2.quadratic_fitting()

# Original curve: y = -2.0*x*x + 3.5*x + 7.0 + noise

print("   a = {}\tb = {}\tc = {}".format(round(a, 2), round(b, 2), round(c, 2)))

#    a = -2.22      b = 3.76        c = 6.64
```

Yet another CurveFitting object:

```cf4 = CurveFitting([3, 20, 34, 50, 75, 88, 111, 129, 143, 160, 183, 200,

218, 230, 248, 269, 290, 303, 320, 344],

[0.0433, 0.2532, 0.3386, 0.3560, 0.4983, 0.7577, 1.4585,

1.8628, 1.8264, 1.2431, -0.2043, -1.2431, -1.8422,

-1.8726, -1.4889, -0.8372, -0.4377, -0.3640, -0.3508,

-0.2126])
```

Let’s define the three functions to be used for fitting:

```def sin1(x): return sin(radians(x))

```

Use `general_fitting()` here:

```a, b, c = cf4.general_fitting(sin1, sin2, sin3)

# General fitting with f0 = sin(x), f1 = sin(2*x), f2 = sin(3*x)

print("   a = {}\tb = {}\tc = {}".format(round(a, 2), round(b, 2), round(c, 2)))

#    a = 1.2        b = -0.77       c = 0.39
```

A final example:

```cf5 = CurveFitting([0, 1.2, 1.4, 1.7, 2.1, 2.2])

a, b, c = cf5.general_fitting(sqrt)

# General fitting with f0 = sqrt(x), f1 = 0.0 and f2 = 0.0

print("   a = {}\tb = {}\t\tc = {}".format(round(a, 3), round(b, 3), round(c, 3)))

#   a = 1.016       b = 0.0         c = 0.0
```