Yks' pyöräilijä

Eli opetus≫

Bolt ja Python I

| 0 comments

Datan sovitus

Aiemmin malli tehtiin olettamalla, että $v(0) = 0$, mutta nyt pitää vielä huomioida reaktioaika $t = 0.142 $s. Se onnistuu helpolla siirtämällä aika-akselia $t \to t – 0.142 s$. Sovitetaan vain mittauspisteisiin, ei lasernopeuteen/ paikkaan, kuten ap artikkelissa.

Ensin pieni kuvaajan piirto ja datan luku

import csv
import numpy as np #genfromtxt
import matplotlib.pyplot as plt

data = np.genfromtxt('100mBerlin.csv', skip_header=1)
xmitta=ajat[:,0]
tmitta=ajat[:,1]


plt.plot(xmitta, tmitta, 'o-', linewidth=3);
plt.xlabel('Paikka [m]', fontsize=20);
plt.ylabel('Aika [s]', fontsize=20);
"xlim(0,100);

plt.show();

Sovitus Pythonin lmfit-paketilla. Sitä varten piti asentaa scipy ja lmfit tuli helpolla

easy_install -U lmfit

Lmfit-paketti on melko yksinkertainen käyttää ja parametrit ja data kulkeutuvat kivasti. Määritetään virhe- eli minimoitava residuaalifunktio

from lmfit import minimize, Parameters
import numpy as np

def residual(params, t, data):
    A = params['A'].value
    B = params['B'].value
    k = params['k'].value
    t = t
    tr = 0.142

    model = A/k*np.log( (A+B*np.exp(-k*(t-tr)) )/(A+B)) + B/k*np.log( (A*np.exp(k*t) + B)/(A+B) )

    return (data-model)

params = Parameters()
params.add('A', value=100)
params.add('B', value=10)
params.add('k', value=1)

result = minimize(residual, params, args=(tmitta,xmitta))

report_fit(params)

Leave a Reply

Required fields are marked *.