Hopp til innhold
Fagartikkel

Funksjoner med digitale hjelpemidler

Her får du repetert og/eller lært hvordan du tegner grafer og løser oppgaver med digitale hjelpemidler.

Grafer i GeoGebra

Vi fortsetter å bruke eksempelet vårt med en jogger som løper 16 000 m på 100 minutter. Vi har da at funksjonsuttrykket er

St=160t,    DS=0,100

Hvis vi vil tegne grafen til S(t) helt uten avgrensninger, skriver vi bare funksjonsnavnet og ‑uttrykket rett inn i algebrafeltet: S(t)=160t. Siden funksjonen vår har en avgrenset definisjonsmengde, bør vi bare tegne grafen for de aktuelle x-verdiene. Det gjør vi ved å bruke kommandoen "Funksjon(Funksjon, start, slutt)". I vårt tilfelle skriver vi S(t)=Funksjon(160t, 0, 100). Da får funksjonen vår det riktige navnet, og den blir tegnet for t-verdier mellom 0 og 100.

For å få et fint bilde av grafen din i GeoGebra er det noen viktige ting du må vite:

  • Du må huske å sette navn på aksene. Dersom grafen beskriver en konkret situasjon, bør du ha både navnet på variabelen og hva variabelen representer. I vårt tilfelle blir det "t, minutter" og "S(t), meter". Du gjør dette ved å høyreklikke i grafikkfeltet og ved å velge "Grafikkfelt" og så "Navn på aksen:" på de to aksene.

  • Du kan trekke inn funksjonsuttrykket fra algebrafeltet ved å bruke verktøyet "Flytt"  helt til venstre på verktøyraden, se nedenfor. Ta tak i uttrykket med musepekeren, og plasser det der du vil ha det.

  • Du kan justere hva som vises i bildet ditt, ved å bruke verktøyet "Flytt grafikkfeltet", se nedenfor. Pass på at begge aksene vises med tall. Ha minst mulig luft rundt grafen.

  • Du kan ta bilde av grafikkfeltet ved å velge "Fil" og "Eksporter bilde". Her kan du velge å legge bildet i utklippstavla og lime det inn i dokumentet der du jobber etterpå.

Vær oppmerksom på at det noen ganger kan være lurt å bytte ut variabelen med x. Hvis vi skal bruke grafikkfeltet til å finne skjæringspunkter, vil ikke GeoGebra alltid kunne finne skjæringspunkter mellom objekter som har ulike variabelnavn.


Grafer i Python

For å vise hvordan vi tegner grafer i Python, bruker vi en litt annerledes funksjon som eksempel. Vi tar for oss følgende funksjon:

f(x)=x3+4x2-2,      x-4,2

Grunnleggende graftegning

For å tegne grafer i Python må vi importere et ekstra bibliotek for graftegning som heter "matplotlib.pyplot". I dette biblioteket finner vi funksjonen "plot()", som tegner grafen. "plot()" tegner grafer litt på samme måte som vi gjør for hånd, ved å ta utgangspunkt i kjente punkter på grafen og så trekke ei linje mellom dem. Det vil si at vi må gi Python en verditabell å jobbe med.

En verditabell for funksjonen vår kan se slik ut:

Verditabell

x

-4

-3

-2

-1

0

1

2

f(x)

-2761-2322

Heldigvis slipper vi å regne ut denne verditabellen selv, det gjør Python for oss. Vi må først lage en array med de x-verdiene vi vil bruke, og så regne ut de tilsvarende y-verdiene. I Python lager vi lista over x-verdier ved hjelp av funksjonen "linspace()", som vi henter fra biblioteket "numpy".

Nå er vi klare for første forsøk på å tegne grafen i Python. Kopier koden under til din editor (eller til den tomme trinketen i boksen nederst på siden) og kjør den.

python
1import matplotlib.pyplot as plt
2import numpy as np
3
4def f(x):
5    return x**3 + 4*x**2 - 2
6
7X = np.linspace(-4,2,7)
8Y = f(X)
9
10plt.plot(X,Y)
11plt.show()
Forklaring til koden

I linje 1 og 2 importerer vi de to bibliotekene vi trenger. Det er vanlig å gi de to bibliotekene de korte kallenavnene "plt" og "np", slik at det skal bli lett å kalle på funksjoner derfra.

I linje 4 og 5 definerer vi funksjonen. Legg merke til at vi må ha gangetegn mellom 4 og x, og at vi skriver "opphøyd i" med **. Legg også merke til at vi skriver "np." foran "linspace". Dette er for å fortelle Python at funksjonen hentes fra biblioteket "numpy".

I linje 7 lager vi en array (tabell) X med x-verdier. Argumentene til funksjonen, -4, 2 og 7, forteller Python henholdsvis første verdi, siste verdi og antall verdier i X.

I linje 8 regner Python ut funksjonsverdiene til alle de 7 verdiene i X.

I linje 10 plotter vi funksjonen. Her skriver vi plt. foran kommandoen "plot()" så Python vet at det er matplotlib.pyplot som har denne funksjonen.

Kommandoen i linje 11 behøves ikke i alle editorer, men det kan være greit å venne seg til å ha den med. Når vi for eksempel bruker trinket, vil ikke grafen skrives ut dersom vi utelater kodelinja.

🤔 Tenk over: Vi legger merke til at grafen vi får skrevet ut, ikke er så veldig glatt og pen i utskriften vår. Hva kan vi gjøre for at den skal bli penere?

Forklaring

Vi har bare sju punkter på grafen, og det er litt lite for å lage en graf som ikke er rett. Vi kan bytte ut tallet 7 i linje 11 med for eksempel 100, så får vi en penere graf.

Tegning av punkter

Hvis vi ønsker å tegne noen punkter inn på grafen, har vi i matplotlib.pyplot en funksjon som heter "scatter()". Prøv å legge til kodelinja plt.scatter(X,Y) i programmet vårt. Hva skjer da?

Hvis vi ikke ønsker å tegne inn alle punktene vi har brukt for å tegne grafen, men bare noen bestemte punkter, må vil legge til noen linjer for å finne disse punktene. Hvis vi for eksempel vil tegne inn punktene -2,f-2 og 0,f0, kan vi prøve følgende kodelinjer:

python
1X_1 = np.array([-2,0])
2Y_1 = f(X_1)
3
4plt.scatter(X_1,Y_1)
Forklaring til koden

I linje 1 lager vi en array med de x-verdiene vi ønsker å bruke. Legg merke til at vi har brukt kommandoen np.array(liste). Dette er fordi at Python kan regne med tall i en array på flere måter enn tall i ei liste. Kommandoen "array()" gjør ei liste om til en array.

I linje 2 finner vi de tilhørende y-verdiene.

I linje 4 plotter vi de to punktene.

Navn på akser og funksjonen

Akkurat som når vi tegner grafer med GeoGebra, må vi ha navn på aksene våre og selve funksjonen. For å få navnet på selve funksjonen, setter vi inn koden label="navnet på funksjonen" i selve plot-kommandoen. For at denne skal vises, må vi også ha på kommandoen "legend()".

Hvis du vil ha et rutenett i plottet ditt, bruker du kommandoen "grid()".

Å få på plass akser med navn er litt mer komplisert. Her anbefaler vi at du tar vare på kodelinjene under og bruker dem hver gang du skal tegne en funksjon.

python
1plt.plot(X,Y,label = "f(x)")
2plt.legend()
3
4#lager x- og y-akse
5plt.gca().spines['right'].set_visible(False)
6plt.gca().spines['top'].set_visible(False)
7plt.gca().spines['bottom'].set_position("zero")
8plt.gca().spines['left'].set_position("zero")
9
10#setter navn på aksene på egnede steder
11plt.xlabel("$x$") # Tittel på x-aksen
12plt.ylabel("$f(x)$", rotation=0)
13plt.gca().yaxis.set_label_coords(0.3,1)
14plt.gca().xaxis.set_label_coords(1,0.23)
15
16plt.grid()
Forklaring til koden

I linje 1 legger vi inn navnet på funksjonen.

I linje 2 sørger vi for at navnet vi har lagt inn, vises i utskriften.

Linje 5 og 6 fjerner den øverste linja og linja helt til høyre. Linje 7 og 8 flytter linjene nedenfra og til venstre slik at de krysser hverandre i origo.

I linje 11 og 12 setter vi navn på aksene. Bytt ut x og f(x) her med fornuftige navn om grafen din skal beskrive noe konkret. Kommandoen rotation = 0 i linje 12 gjør at teksten står riktig vei. Klarer du å finne ut hva dollartegnene $ rundt aksetitlene gjør med formateringen av dem?

I linje 13 og 14 settes navnene på riktig sted på aksene. Her kan du eksperimentere med tall mellom 0 og 1 for å se hvor navnene blir stående.

I linje 16 har vi satt på rutenett.

Fullstendig kode

Nå kan vi samle alt vi har gjort, og skrive et program som plotter funksjonen vår på en tilfredsstillende måte:

python
1import matplotlib.pyplot as plt
2import numpy as np
3
4def f(x):
5    return x**3+4*x**2-2
6
7X = np.linspace(-4,2,100)
8Y = f(X)
9
10X_1 = np.array([-2,0])
11Y_1 = f(X_1)
12
13
14plt.plot(X,Y,label = "$f(x)$")
15plt.scatter(X_1,Y_1)
16
17plt.legend()
18
19plt.gca().spines['right'].set_visible(False)
20plt.gca().spines['top'].set_visible(False)
21plt.gca().spines['bottom'].set_position("zero")
22plt.gca().spines['left'].set_position("zero")
23
24plt.xlabel("$x$") # Tittel på x-aksen
25plt.ylabel("$f(x)$", rotation=0)
26plt.gca().yaxis.set_label_coords(0.7,1)
27plt.gca().xaxis.set_label_coords(1,0.1)
28
29plt.grid()
30
31plt.show()

Trinket

Nedenfor kan du teste koden. NB: Editoren vil ikke være tilgjengelig under skriftlig eksamen.