Kuna mistahes eksperimentaalne sõltuvus võetakse paratamatult üles lõpliku sammuga, võib tekkida vajadus mõõdetava suuruse väärtuse hindamiseks katsepunktide vahel. Probleem esineb näiteks juhul kui erinevate andurite näidud registreeritakse veidi erinevatel ajahetkedel või kui tuleb andmetöötluses kasutada olemasolevaid, tabuleeritud andmeid (artiklist, käsiraamatust, vms). Kui andmeseeriat kirjeldav teoreetiline sõltuvus on teada ja piisavalt lihtne, saab kasutada funktsiooni sobitamist vähimruutude meetodil. Vastasel korral, ühtlasi eeldades et katsepunktide määramatus on piisavalt väike, on õigustatud interpoleerimine, st konstrueeritakse võimalikult sile kõver, mis läbib täpselt kõiki katsepunkte, aga millel teoreetilist põhjendust ei ole.

Lihtsaim lahendus on ühendada järjestikused katsepunktid sirgega. Sellise nn lineaarse interpolatsiooni teostab numpy.interp. Kui andmepunktide koordinaadid on vektorites x ja y, siis numpy.interp(ξ, x, y) annab lineaarselt interpoleeritud väärtuse kohal ξ.

plot(x, y, 'ro', label='andmed', zorder=3)

ξ = np.linspace(0, 9, 100) # interpoleeritud kõver peenema sammuga
plot(ξ, np.interp(ξ, x, y), 'b-', label='interpoleeritud')

# graafikul rohelise värviga joonestatud elemendid
ξ = 5.5
η = np.interp(ξ, x, y)
plot(ξ, η, 'g.')
axvline(ξ, color='g', ls='--')
axhline(η, color='g', ls='--')
text(ξ, 0.13, 'ξ', ha='center', va='top', color='g')
text(-0.55, η, 'η', ha='right', va='center', color='g')

grid()
legend()
show()

Üldisem võte on ühendada järjestikused katsepunktid polünoomidega, nii et moodustuks võimalikult sile kõver, mida nimetatakse splainiks. Seda teostab scipy.interpolate.interp1d. Lisaparameetriga kind määratakse interpolatsioonimeetod, näiteks 'linear' (vaikimisi), 'quadratic', 'cubic'.

from scipy.interpolate import interp1d

f1 = interp1d(x, y) # vaikimisi lineaarne interpolatsioon
f2 = interp1d(x, y, kind='cubic')
ξ = np.linspace(0, 9, 100) # interpoleeritud kõver peenema sammuga
plot(x, y, 'ro', label='andmed', zorder=3)
plot(ξ, f1(ξ), 'b--', label='lineaarne')
plot(ξ, f2(ξ), 'b-', label='kuupsplain')
grid()
legend()
show()

On ilmne, et sedavõrd hõredalt paiknevate andmepunktide korral lineaarne interpolatsioon annab ebaloomuliku ja ebatäpse tulemuse.

Vaata lisaks

Sisukord