Hopp til innhald
Fagartikkel

Funksjonar med digitale hjelpemiddel

Her får du repetert og/eller lært korleis du teiknar grafar og løyser oppgåver med digitale hjelpemiddel.

Grafar i GeoGebra

Vi held fram med å bruke dømet vårt med ein joggar som spring 16 000 m på 100 minutt. Vi har då at funksjonsuttrykket er

St=160t,    DS=0,100

Dersom vi vil teikne grafen til S(t) heilt utan avgrensingar, skriv vi berre funksjonsnamnet og ‑uttrykket rett inn i algebrafeltet: S(t)=160t. Sidan funksjonen vår har ei avgrensa definisjonsmengde, bør vi berre teikne grafen for dei aktuelle x-verdiane. Det gjer vi ved å bruke kommandoen "Funksjon(Funksjon, start, slutt)". I tilfellet vårt skriv vi S(t)=Funksjon(160t, 0, 100). Då får funksjonen vår det rette namnet, og han blir teikna for t-verdiar mellom 0 og 100.

For å få eit fint bilete av grafen din i GeoGebra er det nokre viktige ting du må vite:

  • Du må hugse å setje namn på aksane. Dersom grafen beskriv ein konkret situasjon, bør du ha både namnet på variabelen og kva variabelen representer. I tilfellet vårt blir det "t, minutt" og "S(t), meter". Du gjer dette ved å høgreklikke i grafikkfeltet og ved å velje "Grafikkfelt" og så "Namn på aksen:" på dei to aksane.

  • Du kan trekke inn funksjonsuttrykket frå algebrafeltet ved å bruke verktøyet "Flytt"  heilt til venstre på verktøyrada, sjå nedanfor. Ta tak i uttrykket med musepeikaren, og plasser det der du vil ha det.

  • Du kan justere kva som blir vist i biletet ditt, ved å bruke verktøyet "Flytt grafikkfeltet", sjå nedanfor. Pass på at begge aksane blir vist med tal. Ha minst mogleg luft rundt grafen.

  • Du kan ta bilete av grafikkfeltet ved å velje "Fil" og "Eksporter bilete". Her kan du velje å legge biletet i utklippstavla og lime det inn i dokumentet der du jobbar etterpå.

Ver merksam på at det nokon gonger kan vere lurt å byte ut variabelen med x. Dersom vi skal bruke grafikkfeltet til å finne skjeringspunkt, vil ikkje GeoGebra alltid kunne finne skjeringspunkt mellom objekt som har ulike variabelnamn.


Grafar i Python

For å vise korleis vi teiknar grafar i Python, bruker vi ein litt annleis funksjon som døme. Vi tek for oss denne funksjonen:

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

Grunnleggande grafteikning

For å teikne grafar i Python må vi importere eit ekstra bibliotek for grafteikning som heiter "matplotlib.pyplot". I dette biblioteket finn vi funksjonen "plot()", som teiknar grafen. "plot()" teiknar grafar litt på same måte som vi gjer for hand, ved å ta utgangspunkt i kjende punkt på grafen og så trekke ei linje mellom dei. Det vil seie at vi må gi Python ein verditabell å jobbe med.

Ein verditabell for funksjonen vår kan sjå slik ut:

Verditabell

x

-4

-3

-2

-1

0

1

2

f(x)

-2761-2322

Heldigvis slepp vi å rekne ut denne verditabellen sjølv, det gjer Python for oss. Vi må først lage ein array med dei x-verdiane vi vil bruke, og så rekne ut dei tilsvarande y-verdiane. I Python lagar vi lista over x-verdiar ved hjelp av funksjonen "linspace()", som vi hentar frå biblioteket "numpy".

No er vi klare for første forsøk på å teikne grafen i Python. Kopier koden under til editoren din (eller til den tomme trinketen i boksen nedst på sida) og køyr han.

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 dei to biblioteka vi treng. Det er vanleg å gi dei to biblioteka dei korte kallenamna "plt" og "np", slik at det skal bli lett å kalle på funksjonar derfrå.

I linje 4 og 5 definerer vi funksjonen. Legg merke til at vi må ha gongeteikn mellom 4 og x, og at vi skriv "opphøgd i" med **. Legg òg merke til at vi skriv "np." framfor "linspace". Dette er for å fortelje Python at funksjonen skal hentast frå biblioteket "numpy".

I linje 7 lagar vi ein array (tabell) X med x-verdiar. Argumenta til funksjonen, -4, 2 og 7, fortel Python høvesvis første verdi, siste verdi og tal på verdiar i X.

I linje 8 reknar Python ut funksjonsverdiane til alle dei 7 verdiane i X.

I linje 10 plottar vi funksjonen. Her skriv vi plt. framfor kommandoen "plot()" så Python veit at det er matplotlib.pyplot som har denne funksjonen.

Kommandoen i linje 11 trengst ikkje i alle editorar, men det kan vere greitt å venne seg til å ha han med. Når vi til dømes bruker trinket, vil ikkje grafen skrivast ut dersom vi utelet kodelinja.

🤔 Tenk over: Vi legg merke til at grafen vi får skrive ut, ikkje er så veldig glatt og pen i utskrifta vår. Kva kan vi gjere for at han skal bli finare?

Forklaring

Vi har berre sju punkt på grafen, og det er litt lite for å lage ein graf som ikkje er rett. Vi kan byte ut talet 7 i linje 11 med til dømes 100, så får vi ein finare graf.

Teikning av punkt

Dersom vi ønsker å teikne nokre punkt inn på grafen, har vi i matplotlib.pyplot ein funksjon som heiter "scatter()". Prøv å legge til kodelinja plt.scatter(X,Y) i programmet vårt. Kva skjer då?

Dersom vi ikkje ønsker å teikne inn alle punkta vi har brukt for å teikne grafen, men berre nokre bestemde punkt, må vil legge til nokre linjer for å finne desse punkta. Dersom vi til dømes vil teikne inn punkta -2,f-2 og 0,f0, kan vi prøve desse kodelinjene:

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 lagar vi ein array med dei x-verdiane vi ønsker å bruke. Legg merke til at vi har brukt kommandoen np.array(liste). Dette er fordi at Python kan rekne med tal i ein array på fleire måtar enn tal i ei liste. Kommandoen "array()" gjer ei liste om til ein array.

I linje 2 finn vi dei tilhøyrande y-verdiane.

I linje 4 plottar vi dei to punkta.

Namn på aksar og funksjonen

Akkurat som når vi teiknar grafar med GeoGebra, må vi ha namn på aksane våre og sjølve funksjonen. For å få namnet på sjølve funksjonen, set vi inn koden label="namnet på funksjonen" i sjølve plot-kommandoen. For at denne skal visast, må vi òg ha på kommandoen "legend()".

Dersom du vil ha eit rutenett i plottet ditt, bruker du kommandoen "grid()".

Å få på plass aksar med namn er litt meir komplisert. Her tilrår vi at du tek vare på kodelinjene under og bruker dei kvar gong du skal teikne ein funksjon.

python
1plt.plot(X,Y,label = "f(x)")
2plt.legend()
3
4#lagar 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#set namn på aksane på eigna stader
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 legg vi inn namnet på funksjonen.

I linje 2 sørger vi for at namnet vi har lagt inn, blir vist i utskrifta.

Linje 5 og 6 fjernar den øvste linja og linja heilt til høgre. Linje 7 og 8 flyttar linjene nedanfrå og til venstre slik at dei kryssar kvarandre i origo.

I linje 11 og 12 set vi namn på aksane. Byt ut x og f(x) her med fornuftige namn om grafen din skal beskrive noko konkret. Kommandoen rotation = 0 i linje 12 gjer at teksten står rett veg. Klarer du å finne ut kva dollarteikna $ rundt aksetitlane gjer med formateringa av dei?

I linje 13 og 14 blir namna sett på rett plass på aksane. Her kan du eksperimentere med tal mellom 0 og 1 for å sjå kvar namna blir ståande.

I linje 16 har vi sett på rutenett.

Fullstendig kode

No kan vi samle alt vi har gjort, og skrive eit program som plottar funksjonen vår på ein tilfredsstillande 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

Nedanfor kan du teste koden. NB: Editoren vil ikkje vere tilgjengeleg under skriftleg eksamen.