1.3. Funksjoner#

Funksjoner blir f.t. undervist av Johannes Kleppe i MA102, og blir derfor ikke tatt seriøst her. Det eksisterer likevel noen eksperimenter.

1.3.1. Forutsetninger og læringsmål#

Forutsetter algebra, det vil si et variabelbegrep.

Funksjoner er et viktig grunnlag i matematikken og også i programmering.

Læringsmål#

1.3.2. Introduksjon#

En funksjon er noe som tar noe (f.eks. et tall) inn og leverer noe ut. Det introduseres vel best ved representasjoner og eksempler

I funksjoner snakker vi om variable som “et variabelt tall”, i motsetning til likninger (hvor variable betyr “et ukjent tall”) og andre bokstavuttrykk (hvor det står for “hvilket som helst tall”).

Definisjon#

Det kreves for en funksjon at hver verdi inn gir én verdi ut. Men flere verdier inn kan godt gi samme verdi ut.

Eksempler#

I skolen har det vært vanlig å ha eksempler som er matematisk enkle, som førstegradsfunksjoner og andregradsfunksjoner. Men dette blir ofte “lekeeksepler” som er enkle å gjøre algoritmer på men som er fjernt fra den praktiske verden.

../../_images/trends.png

Fig. 1.31 Søkeinteresse for “Corona”, “Ukraine” og “Gaza” som funksjoner av tid iflg. Google Trends#

Det kan være nyttig å vise mer virkelighetsnære eksempler. Ideer: Coronasmitte? SSB? Rentenivå?

Referanser#

1.3.3. Representasjoner#

Maskin inn/ut#

../../_images/machine-fn1.png

Fig. 1.32 Funksjonsmaskin fra transferready.co.uk#

En funksjon kan oppfattes som en maskin som tar noe (parameter) inn og gir noe (returverdi) ut.

Denne representasjonen får fram at en funksjon er både en “ting” og en “handling”.

Oppskrift#

../../_images/oppskrift.png

Fig. 1.33 Oppskrift på grove brød#

En liknende metafor er “oppskrift”. Oppskriften er særlig funksjonsdefinisjonen, som sier hva som skal gjøres.

Matematiske funksjoner er gitt ved hva de returnerer; funksjoner i programmering kan også “gjøre ting” TODO forklares bedre

Tradisjonelt formelspråk: Funksjonsutrykk#

I tradisjonelt formelspråk sier vi f.eks. at \(f(x) = 2x + 3\). Vi sier altså funksjonsnavnet, parentes med argument, et likhetstegn og så funksjonsdefinisjonen.

Legg merke til at funksjonen her heter f, ikke f(x); vi sier likevel iblant f(x) for å angi funksjonen, selv om det strengt tatt er feil.

Typografi#

Både navnet og parameteren kan oppfattes som variable og skal i kursiv (f.eks. \(alder(tid)\)). Unntak: Visse funksjoner skrives tradisjonelt uten kursiv (f.eks. \(\sin(x)\)) og iblant tilmed uten parentes (f.eks. \(\sin x\)).

Krøkkete notasjon?#

Man kan mene at dette er en krøkkete notasjon:

  • man kan ikke notere en funksjon uten å ha et navn på den.

  • man tilslører at f egentlig er en variabel som peker på en funksjon, på samme måte som n (typisk) peker på et tall og A på en påstand.

  • parentesen har en helt annen funksjon enn det parenteser vanligvis har. Hvorfor skal vi ha parentes her?

  • notasjoner for deriverte blir kunstige.

Python: def#

def Python function

def minFunksjon(x):
    return (x * 2) + 3

Sideeffekter#

Funksjonsbegrepet i Python (og andre programmeringsspråk) er riktignok et litt annet enn matematikken, siden Python-funksjoner også har “sideeffekter”; de kan “gjøre” flere ting enn å returnere noe. En Python-funksjon kan for eksempel skrive til skjerm.

Lambda-syntaks#

En mer naturlig syntaks er muligens lambda-syntaks (oppkalt etter den greske bokstaven λ). Her skrives en funksjon \(f = λx . 2x + 3\). Dette skal leses “f er lik funksjonen som har x som argument og har verdien 2x + 3. Syntaksen er altså

  • et λ-tegn

  • parameteren (eller parametrene)

  • et punktum

  • funksjonsdefinisjonen

Man kan argumentere for at lambdasyntaks er enklere for elever som ikke er vant til den vanlige. Lambdasyntaks er også mer matematisk robust og enklere å utvide.

Denne er dessverre ikke vanlig i skolen.

Nøkkelordet lambda finnes i Python og andre funksjonelle programmeringsspråk.

Fra 2022 har også Excel kommandoen =LAMBDA. Dette er et svært kraftig redskap. Det er fortsatt lite kjent.

Et liknende symbol er ↦ (maplet).

Python: lambda#

Python (og andre funksjonelle programmeringsspråk) kan representere funksjoner ved ordet lambda, men det er dessverre ikke så vanlig i skolen.

Tabell#

En funksjon kan representeres ved en tabell. Hver linje blir et mulig argument. Om definisjonsmengden er uendelig stor (som den vanligvis er, f.eks. om den er lik ℝ) har tabellen uendelig mange linjer. Det er en kolonne for argumentet og en for returverdien.

Det er krav om at hvert argument bare gir én returverdi. Altså kan hver verdi bare forekomme i én linje i venstre kolonne; men samme verdi kan gjerne forekomme flere ganger i høyre kolonne.

Teknologi: Regneark#

I regneark kan mange tabeller regnes som funksjoner; riktignok kan de ikke være uendelig lange.

For eksempel kan funksjonen som tar \(x\) som argument og har verdien \(x^2 + 3\) representeres ved at venstre kolonne har mange argument-verdier (altså inn-verdier) (kanskje cellen A3 formelen =A2 + 0.1), og høyre kolonne tilsvarende funksjonsverdier (kanskje B3 har formelen A3^2 + 3).

Noen vil også mene at en regneark-formel modellerer det samme som en funksjon.

Formelspråk: Mengde par#

En funksjon kan også representeres i formelspråk som en mengde av par, f.eks. {(0,3), (1,4), (2,7), (3,10), … (\(x\), \(x^2 + 3\))}.

Kurver i koordinatsystem#

Dette forutsetter kjennskap til koordinatsystem.

Kurver er så viktig representasjon på funksjoner i skolekulturen at kurve-representasjonen nesten blir forvekslet med selve funksjonsbegrepet.

Merk at ordet graf brukes i andre betydninger, f.eks. et nett av noder og kanter. Et Google-søk på graf gir et inntrykk. Vi vil derfor foretrekke ordet kurve.

Vi kan plotte definisjonsmengden på vannrett akse og verdimengden i loddrett. For hver mulige argument (hvert punkt i definisjonsmengden) (3 i eksempelet under) regner vi ut funksjonsverdien (5 i eksempelet under) og tegner en prikk på punktet (argumentverdi, returverdi) (i eksempelet under er punket (3,5) merket med rød flekk). Gjør vi dette for mange punkter får vi en graf:

../../_images/f451d401483e7470e2d2a668b0493a27469c3a8ea3fa7b6f6e10905bf725803b.png

Den horisonale (vannrettte) aksen, med parameteren, blir tradisjonelt kalt “x-aksen”. Den vertikale blir tradisjonelt kalt “y-aksen”. Merk at i grafen over er x lik 3 ikke bare i punktet (3, 0), men i alle punktene i den loddrette linja fra denne linja; alle punktene som er på mønsteret (3, ?).

Det er altså et krav om at enhver argument gir én bestemt returverdi. En graf for en funksjon kan altså ikke ha to punkter “over hverandre”. Derimot er det lov at to argument gir samme returverdi: En graf kan ha to punkt “ved siden av” hverandre.

Teknologi#

Det finnes mange verktøy for å tegne kurver. Vi vil nevne Wolfram Alpha.

Python har mange bibliotek for å tegne kurver. En del av kurvene i dette dokumenter er tegnet med matplotlib.

GeoGebra er egnet til å tegne kurver, også interaktive. Man kan for eksempel skrive funksjonen f(x) = x^2 - 3.

Man kan også bruke GeoGebra til å illustrere at en kurve består av mange punkt. Dra i a-slideren under:

Doble tall-linjer#

Doble tall-linjer er en mye mer uvanlig representasjon, men se (Klaveness et al, 2019) 82 s322.

Her ligger verdimengden og definisjonsmengden ikke i kryss, men parallelt. Det som i kurve-representasjon er et punkt er i doble tall-linje-representasjonen en linje mellom et punkt i verdimengden og tilsvarende i definisjonsmengden:

../../_images/f003b7ff201c959a9632ae0026ce38f118b1a64eb68440e35aec61aee4e98b79.png

vi ser flere ting. Hva betyr følgende, og hva tilsvarer det i en graf?

  • Definisjonsmengden har én strek fra hvert punkt.

  • Verdimengden har ingen streker til verdier <4.

  • Hvert punkt >−4 på verdimengden har strek fra to punkt på definisjonsmengden.

  • Er vi >0 på definisjonsmengden ser det ut til at strekene “sprer seg”. Er vi <0 ser det ut til at strekene “samler seg”. Hint: Derivert

Dette er en nyttig representasjon

  • fordi den uttrykker bedre visse egenskaper, f.eks. at funksjoner kan kobles i serie

  • fordi den hjelper oss til å forstå at det er vanskelig å lese en representasjon første gang. For elever er “vanlig” koordinatsystem like vanskelig som dobbel tall-linje.

Scratch#

I Scratch kan man lage sine egne klosser. Disse kan ta argumenter, men dessverre ikke returnere verdier. reporters?

1.3.4. Algoritmer#

Finne verdi#

Dette er på en måte den grunnleggende algoritmen med funksjoner: Gå fra et punkt i definisjonsmengden til en i verdimengden.

Regne ut verdi ved funksjonsdefinisjon#

Om vi har et funksjonsuttrykk for funksjonen: Vi setter inn et argument (f.eks. 3) inn for parameteren (f.eks. x) i funksjonsuttrykket. Er funksjonsuttrykket for eksempel \(x^2 - 3\) får vi da \(3^2 - 3\).. Dette kalles også å applisere funksjonen, selv om dette ordet ikke er så vanlig i norsk skole.

Lese av graf#

En annen måte å finne en verdi på er å lese av en graf. Man finner linja hvor x er for eksempel 3, og finner stedet hvor grafen treffer denne linja.

Finne egenskaper#

Å finne egenskaper blir behandlet under egne sider, og her følger bare en liste over noen:

Finne nullpunkt#

Et 0-punkt er verdien/punktet hvor funksjonsverdien er lik 0, altså at \(x\) slik at \(f(x) = 0\). I et koordinatsystem vil nullpunktene ligge på den vannrette aksen. TODO bilde

Det er to hovedalgoritmer, som blir behandlet under egen side og under hver funksjonstype. Hovedalgoritmene er

  • Løse equation \(f(x) = 0\), ved å sette inn funksjonsuttrykket for \(f(x)\). Vi skal for eksempel løse likningen \(0.3x^3 - x^2 - 3 = 0\).

  • Lese av en kurve eller annen representasjon.

Bestemme definisjonsmengde og funksjonstype#

Definisjonsmengden til en funksjon er altså mengden verdier vi kan putte inn i parametrene. For funksjonen “dobbel” (definert ved \(dobbel = λx . 2x\), altså \(dobbel(x) = 2x\) ) er den

Eksempler TODO

  • Avrunde

Bestemme verdimengde#

Bestemme type#

ℝ → ℝ

Derivere#

Finne en annen funksjon.

Integrere#

Finne en annen funksjon, evt. areal under grafen.

Oversette fra representasjon til annen#

Oversette

Janviers tabell#

Claude Janvier påsto det fantes fire representasjonsformer for representasjon av funksjon:

  • Situasjon

  • Tabell

  • Kurve

  • Funksjonsuttrykk.

Man kan sette opp en 4×4-matrise https://www.nkhansen.com/tag/janviers-tabell/. Janvier mente det fantes et visst antall overganger, at noen var enklere og noen vanskeligere.

Ellef mener det finnes mange flere representasjoner enn disse fire (som det framgår av denne siden). Ellef mener også at dette ikke er spesielt for funksjoner men er vanlig for de fleste konsept.#### Oversette fra formel til graf

Oversette fra … til …#

Modellere: Oversette fra eksempel til …#

Modellere

1.3.5. Aspekter#

Funksjon som oppskrift#

Når man lærer om funksjoner er det vanlig å tenke på funksjon som en oppskrift. Noen av representasjonene legger også opp til det.

Funksjon som en mengde par#

Senere vil noen studenter tenke på funksjon som en (uendelig) mengde par (Bourbaki). Dette er en definisjon som er matematisk mer robust, og en forståelse som er vanlig blant matematikere.

“Å gjøre” → “å være”#

Det kan altså skje en overgang fra å se på funksjon som noe man gjør til noe som er. En slik overgang kan skje på mange steder i matematikken (Sfard, 1991). Den er didaktisk svært interessant TODO

1.3.6. Talltyper#

Vi har tidligere snakket om talltyper som ℕ (Naturlige tall) og ℝ (Relle tall).

En funksjon (f.eks. \(f = λx . x^2 + x\)) kan for eksempel ha et argument av typen ℝ og returnere et resultat av typen ℝ. Da kan vi snakke om at \(f\) er av typen ℝ → ℝ.

En funksjon avrund vil bare returnere heltall; Den vil altså ha typen ℝ → ℤ.

En funksjon adder, definert ved \(adder = λ addend1, addend2 . addend1 + addend2\) tar altså to argument og legger dem sammen. Den vil ha typen ℝ × ℝ → ℝ.

1.3.7. Læring#

Gjøres ofte med eksempler; jeg argumenterer for at “virkelige”, kompliserte eksempler er bedre enn “enkle” eksempler som første- og andregrad.

Tips til læring TODO #

NDLA koordinatsystem og NDLA tallmengder. (Klaveness et al, 2019) 29 s216 Å skissere grafer og 30s218.

Fred og frank er to treningsfanatikere som løper fra A til B. Fred løper halvparten av veien og går resten. Frank løper halvparten av tiden og går resten. De går og løper like fort som hverandre. Hvem kommer først? (Mason et al, 2010) “Fred and Frank, p.155”

1.3.8. TODO#

Applikasjon (substitusjon)#

Det som kommer inn kalles ofte parameter. Det er \(x\) i eksempelet. Parameteren er en variabel som kan brukes i funksjonsdefinisjonen. Når en funksjon appliseres (brukes) får parametrene verdier f.eks. om vi sier \(f(3)\) får \(x\) verdien \(3\) i dette tilfellet og funksjonen kan regnes ut i følge definisjonen så vi får \(3^2 + 2\) som blir \(11\). Vi kan si at \(f(3) → 11\). Vi sier da at 2 blir argument til funksjonen. Mange blander begrepene parameter og argument. Mengden av alle lovlige argument-verdier er definisjonsmengden.

Funksjonsuttrykk og bokstavuttrykk#

Er det forskjell på funksjonen \(2x + 3\) og bokstavuttrykket \(2x + 3\)?

De to er svært like; de fleste elever trenger ikke bekymre seg om forskjellen. Det følgende er mest relevant for nerder og lærere:

Vi kan likevel si det er en forskjell på funksjonen og bokstavuttrykket: I den første er det underforstått at \(x\) er en parameter. x er altså noe som “bor i” funksjonen. Det er dette vi uttrykker ved å si “\(f(x)\)” eller “\(λ x .\)”. Funksjonen \(f(x) = 2x + 3\) er nøyaktig den samme funksjonen som \(f(y) = 2y + 3\), og de er helt uavhengig av hva \(x\) og \(y\) er utenfor funksjonen. Bokstavuttrykket \(2x + 3\) er derimot avhengig av verdien av \(x\). I Python har man det samme: Linja def f(x): lager en egen x inni funksjonen.

Et annet eksempel er funksjonen \(f(x) = 2x + 3y\). Denne funksjonen er avhengig av hva verdien av \(y\) ellers er, men uavhengig av \(x\). Vi har for eksempel at \(f(3)\) er \(2·3 + 3y\). Funksjonen er en helt annen enn \(g(y) = 2x + 3y\); Vi har at \(g(3)\) er \(2x + 3*3\).