Vaatleme näitena ühtlase kiirendusega liikumise üldvalemit:

$$x(t)=x_0+v_0t+\frac{1}{2}at^2.$$

See sisaldab sõltumatut muutujat (aega $t$) esimeses ja teises astmes. Seda laadi üldist funktsiooni nimetatakse polünoomiks: $$x(t)=p_0t^n+p_1t^{n-1}+\ldots+p_{n-1}t+p_n,$$ kus $p_0\ldots p_n$ on konstandid (polünoomi kordajad). Sellise funktsiooni sobitab läbi etteantud andmepunktide numpy.polyfit, mis tagastab vektorina polünoomi kordajad:

p = np.polyfit(aeg, koordinaat, 2)
algkiirus = p[1]
kiirendus = 2 * p[0]

Siin funktsiooni polyfit viimane parameeter on nõutud polünoomi järk $n$, mis antud juhul on 2.

Kui selline mudel kehtib katseandmete jaoks vaid piiratud ajavahemikus (näiteks alates $t=0,\!5$ kuni $t=2,\!2$), siis tuleb esmalt vastavad andmepunktid algmassiividest välja filtreerida:

õiged = np.logical_and(aeg > 0.5, aeg < 2.2)  # tõeväärtuste massiiv
p = np.polyfit(aeg[õiged], koordinaat[õiged], 2)

Soovitatav on ka graafiliselt demonstreerida teoreetilise kõvera klappimist katsepunktidega. Teades polünoomi kordajaid, saab polünoomi väärtuse teada funktsiooniga numpy.polyval:

t = np.linspace(0.5, 2.2, 100)
x = np.polyval(p, t)
plot(aeg, koordinaat, 'r-', label='katse')
plot(t, x, 'b-', label='mudel')
grid()
legend()
show()

Kui anda funktsioonile polyfit valikuline parameeter cov=True, tagastatakse ka leitud kordajate kovariatsioonimaatriks, mille diagonaalelementide kaudu saab kordajate standardmääramatused:

(a, b, c), cov = np.polyfit(aeg, koordinaat, 2, cov=True)
ua, ub, uc = np.sqrt(np.diag(cov))

Vaata lisaks

Sisukord