Fra tidligere har du lært å gjøre regresjon i GeoGebra og kanskje også i Excel. Regresjon er å finne en funksjon som passer dine datapunkter så godt som mulig.
Når du har laget en regresjonsmodell, kan du bruke den til å interpolere (regne ut nye y-verdier innenfor de x-verdiene du har data for) og ekstrapolere (regne ut nye y-verdier utenfor).
Vi skal bruke disse datapunktene i eksemplene:
import pylab
data_x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data_y = [3, 5, 8, 13, 17, 18, 21, 23, 23, 25, 24]
pylab.plot(data_x, data_y, '.')
Det ser ut som datapunktene ligger på en rett linje. Som du husker, så kan vi skrive rette linjer slik:
$f(x) = a\cdot x + b$
Vi skal nå få Python til å regne ut koeffisientene $a$ og $b$. Har vi disse, kan vi tegne linja som passer datapunktene best.
# fortsetter fra forrige kodecelle
def polynom1(x, a, b):
# formel for et førstegradspolynom (en rett linje)
return a*x + b
a1, b1 = pylab.polyfit(data_x, data_y, deg=1)
# deg=1 forteller funksjonen at vi er ute etter et uttrykk med "degree" 1,
# altså et førstegradspolynom (som er en rett linje)
print(f"f(x) = {a1:.2f}x + {b1:.2f}")
# Nå skal vi tegne plotte funksjonen
x = pylab.linspace(0, 10, 1000)
y1 = polynom1(x, a1, b1)
pylab.plot(data_x, data_y, '.')
pylab.plot(x, y1)
Kanskje det passer bedre med en andregradsfunksjon? Som du husker, ser en andregradsfunksjon slik ut:
$f(x) = a\cdot x^2 + b\cdot x + c$
Det eneste vi gjør annerledes, er å hente ut én ekstra koeffisient fra pylab.polyfit
ved å bruke deg=2
:
# fortsetter fra forrige kodecelle
def polynom2(x, a, b, c):
# formel for et andregradspolynom
return a*x**2 + b*x + c
a2, b2, c2 = pylab.polyfit(data_x, data_y, deg=2)
print(f"f(x) = {a2:.2f}x**2 + {b2:.2f}x + {c2:.2f}")
x = pylab.linspace(0, 10, 1000)
y2 = polynom2(x, a2, b2, c2)
pylab.plot(data_x, data_y, '.', label='Datapunkter')
pylab.plot(x, y1, label='Lineær')
pylab.plot(x, y2, label='Andregrad')
pylab.legend()
Du kan lage polynomer av så høy orden du bare vil. Da kan du enten hente ut koeffisientene på samme måte som i eksemplene, eller behandle dem som en liste for å slippe å lage så mange variabler.