Andregradslikninger

<div class="alert alert-block alert-danger">

Info til lærer

Opplegget er tenkt å implementeres etter at elevene har lært om andregradsformelen og egenskaper til andregradsfunksjoner. Fokuset er på at elevene skal diskutere og få en dypere forståelse av egenskaper til andregradsfunksjoner i tillegg til å lage et program som gjør en del utregninger for dem. Erfaringsmessig synes elevene at dette er litt tungvindt i begynnelsen, men de vil etterhvert se at programmet er effektivt.

Utformingen tar utgangspunkt i at elevene kun kan litt grunnleggende programmering, og mye kode er gitt slik at fokuset kan være på matematikken. Dette kan læreren selvsagt endre etter nivået til klassen.

<div class="alert alert-block alert-warning">

Kompetansemål i 1T

Mål for opplæringen er at eleven skal kunne

  • utforske sammenhenger mellom andregradslikninger og andregradsulikheter, andregradsfunksjoner og kvadratsetningaene og bruke sammenhengene i problemløsing
  • formulere og løse problemer ved hjelp av algoritmisk tenking, ulike problemløsingsstrategier, digitale verktøy og programmering
</div>
<div class="alert alert-block alert-success">

Vi skal lage et program som gir all informasjon vi kommer til å trenge om en gitt andregradsfunksjon.

</div>

Steg 1 – Hente inn funksjonen

Vi starter med å hente inn informasjon fra brukeren om funksjonen. Hvor mye informasjon trenger vi?

La oss bruke følgende andregradsfunksjon som eksempel:

f(x)=x2x2 f(x) = x^2 - x - 2
<div class="alert alert-block alert-info">

Oppgave 1

Diskuter med sidemannen:

<br>

a) Hvor mye informasjon trenger vi å vite om andregradsfunksjonen ovenfor for å kunne lage en identisk funksjon?

<br>

b) Hva trenger vi å vite for å kunne tegne en graf over en andregradsfunksjon? Trenger vi mer, mindre eller samme mengde med informasjon?

</div>

En god ting med programmering er at vi kan endre på programmet seinere hvis vi ser at vi ikke har hentet inn nok informasjon.

Vi bruker abcabc-formelen til å finne nullpunktene til funksjonen. Ut fra dette virker det fornuftig å hente inn verdiene til aa, bb og cc. Vi bruker input()-kommandoen i kombinasjon med float()-kommandoen for å hente inn verdien til aa, bb og cc:

a = float(input("Skriv inn koeffisienten foran x^2-leddet: "))
b = float(input("Skriv inn koeffisienten foran x-leddet: "))
c = float(input("Skriv inn konstantleddet: "))

Her kommer enda en fordel med programmering. Vi kan selv bestemme hva programmet skal spørre om. Hvis du for eksempel synes det er lettere å spørre om verdiene til aa, bb og cc til det generelle uttrykket ax2+bx+c=0ax^2 + bx + c = 0 kan du endre den røde teksten. Dette gjør at du kan lage et program som spør etter informasjon på en måte som er tilpasset deg.

Steg 2 – Plotte funksjonen

For å kunne tegne grafen må det lages et sett med koordinater. Vi lager først en rekke med xx–verdier (kalt en "array") med kommandoen linspace(start, slutt, antall). Denne kommandoen ligger imidlertid ikke inne i "grunnpakken" til Python, men den finnes i Python-biblioteket numpy. For å hente fram kommandoene må vi importere dem, og det gjøres ved kommandolinja import numpy as np.

Dette gjør at alt fra biblioteket numpy kan kalles på ved å skrive np.<kommando>, for eksempel kan kommandoen linspace() brukes ved å skrive np.linspace(). Kommandoer for å importere biblioteker settes alltid øverst i programkoden.

import numpy as np
<div class="alert alert-block alert-success">

pylab-kommandoen linspace(start, slutt, antall) har tre input-parametere:

  • start, som er startverdien til tallrekken

  • slutt, som er sluttverdien til tallrekken

  • antall, som er antall tall i tallrekken

Vi lager tallrekken med xx-verdier ved å bytte ut start, slutt og antall med passende tall.

</div>
x = linspace(-10, 10, 1001)

Denne kodebiten deler opp intervallet for xx mellom 10–10 og 1010 i 10011001 biter, dvs 10,0, 9,98, 9,96,, 0,01, 0, 0,01,, 9,96, 9,98, 10,0-10{,}0, ~-9{,}98, ~-9{,}96, \cdots , ~-0{,}01, ~0, ~0{,}01, \cdots , ~9{,96}, ~9{,}98, ~10{,}0.

Vi regner så ut den tilhørende funksjonsverdien (ofte kalt y-verdien) ved å bruke funksjonsuttrykket (husk at opphøyd i python er **):

y=ax2+bx+c y = ax^2 + bx + c
x = linspace(-10, 10, 1001)
y = a*x**2 + b*x + c

For å plotte grafen brukes kommandoen plot(x, y). Denne ligger i matplotlib.pyplot-biblioteket, som vi nå må importere med kommandoen:

import matplotlib.pyplot as plt

Vi bruker da plt.plot(x, y) for å tegne en graf.

1 
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
import matplotlib.pyplot as plt

a = float(input("Skriv inn koeffisienten foran x^2-leddet: "))
b = float(input("Skriv inn koeffisienten foran x-leddet: "))
c = float(input("Skriv inn konstantleddet: "))

x = np.linspace(-10, 10, 5)
y = a*x**2 + b*x + c

plt.plot(x, y)
plt.show()

Noen vil kanskje reagere på at det brukes y her og ikke f(x)f(x). Det er fordi det er enklere å skrive y i Python. Vi kunne godt kalt denne variabelen for noe annet, men ofte brukes y når vi skal plotte. Hvis vi har flere plot, er det fornuftig å ha andre navn (for eksempel y1, y2, osv.).

<div class="alert alert-block alert-info">

Oppgave 2

a) Velg verdier for aa, bb og cc slik at du får funksjonen f(x)=x2x2f(x) = x^2 - x - 2

<br>

b) Kjør programmet et par ganger, der du endrer på aa, bb og cc hver gang. Er det noen ganger du ikke ser funksjonen i graf-feltet?

<br>

c) Prøv å endre på tallene i np.linspace()-kommandoen og se hva som skjer. Er det noen verdier som er mer fornuftige å bruke enn andre i np.linspace()-kommandoen? Avhenger det av funksjonen? Diskuter med sidemannen.

</div>

Steg 3 – Pynte på grafen

Grafen tegnet over er ikke ideell. Hverken xx-akse, yy-akse, rutenett eller navn på aksene er markert. Nedenfor er en liste med kommandoer som kan brukes. Alle disse må ha prefikset plt.<kommando>. Det finnes mange flere, men dette er de mest sentrale for oss. Hvis dere ønsker flere muligheter, er et Google-søk med "python + plot + (det man leter etter)" en god mulighet.

Farge setter man rett etter plt.plot()-kommandoen.

<div class="alert alert-block alert-success">
<p align="left"> Kommando<p align="left"> Beskrivelse
<p align="left"> "b", "r", "g", "m", "c", "y", "w", "k"<p align="left"> Angir farge (henholdsvis blå, rød, grønn, magenta, cyan, gul, hvit og sort)
<p align="left"> title()<p align="left"> Setter inn tittelen på grafen øverst i vinduet
<p align="left"> xlabel()<p align="left"> Setter inn navn på xx-aksen
<p align="left"> ylabel()<p align="left"> Setter inn navn på yy-aksen
<p align="left"> xlim()<p align="left"> Setter intervallet for xx-aksen
<p align="left"> ylim()<p align="left"> Setter intervallet for yy-aksen
<p align="left"> grid()<p align="left"> Tegner rutenett
<p align="left"> axhline()<p align="left"> Lager horisontal linje
<p align="left"> avhline()<p align="left"> Lager vertikal linje
<p align="left"> show()<p align="left"> Viser grafen
</div>

Vi endrer på plottet ved å legge disse kodebitene til etter at grafen er plottet. Et forslag er vist nedenfor:

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import matplotlib.pyplot as plt

a = float(input("Skriv inn koeffisienten foran x^2-leddet: ")) 
b = float(input("Skriv inn koeffisienten foran x-leddet: ")) 
c = float(input("Skriv inn konstantleddet: ")) 

x = np.linspace(-10, 10, 1001) 
y = a*x**2 + b*x + c

plt.plot(x, y, "m")                 # Plotter x og y med magenta farge
plt.title("Andregradsfunksjon")     # Setter tittel på grafen
plt.xlabel("x")                     # Setter navn på x-aksen
plt.ylabel("f(x)")                  # Setter navn på y-aksen
plt.xlim(-5, 5)                     # Setter intervall for x-aksen
plt.ylim(-5, 20)                    # Setter intervall for y-aksen
plt.axhline(y=0, color="k")         # Tegner sort linje for y = 0
plt.axvline(x=0, color="k")         # Tegner sort linje for x = 0
plt.grid()                          # Tegner rutenett
plt.show()                          # Viser grafen
<div class="alert alert-block alert-info">

Oppgave 3

a) Velg verdier for aa, bb og cc slik at du får funksjonen f(x)=x2x2f(x) = x^2 - x - 2

<br>

b) Lek litt med å endre på farge, tall osv. på de forskjellige kommandoene slik at du ser hva de gjør.

</div>

Steg 4 – Nullpunkter

Vi er ofte på jakt etter løsningene på en gitt andregradslikning, og dette er det samme som å finne nullpunktene til funksjonen

f(x)=x2x2=0 f(x) = x^2 - x - 2 = 0
<div class="alert alert-block alert-info">

Oppgave 4

Lag en kodebit som regner ut nullpunktene til funksjonen vi skriver inn. Bruk kodevinduet under. Hvert sted det står Noe må stå her skal byttes ut. Prøv selv før dere ser på en mulig framgangsmåte lenger ned.

</div>
<div class="alert alert-block alert-success">

Hint:

Rottegn i Python skrives med numpy-kommandoen np.sqrt(). Husk at det ofte er to løsninger.

</div>
1 
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
import matplotlib.pyplot as plt

a = float(input("Skriv inn koeffisienten foran x^2-leddet: ")) 
b = float(input("Skriv inn koeffisienten foran x-leddet: ")) 
c = float(input("Skriv inn konstantleddet: ")) 

# Her skriver du koden til oppgave 4

x1 = # Noe må stå her
x2 = # Noe må stå her

print("Nullpunktene er ved x =", x1, "og x =", x2)
<div class="alert alert-block alert-info">

Oppgave 5

Test programmet du lagde i oppgave 4 ved å kjøre det for funksjonene nedenfor og sjekk at løsningene er korrekte

a) x2+3x+2=0x^2 + 3x + 2 = 0

<br>

b) 2x23x2=02x^2 -3x - 2 = 0

<br>

c) 4x249=04x^2 - 49 = 0

<br>

d) x2+2x1=0x^2 + 2x - 1 = 0

</div>
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Koden vi har så langt med løsningsforslag til oppgave 4 nederst.

import numpy as np
import matplotlib.pyplot as plt

a = float(input("Skriv inn koeffisienten foran x^2-leddet: ")) 
b = float(input("Skriv inn koeffisienten foran x-leddet: ")) 
c = float(input("Skriv inn konstantleddet: ")) 

x = np.linspace(-10, 10, 1001) 
y = a*x**2 + b*x + c

plt.plot(x, y, "m")                 # Plotter x og y med magenta farge
plt.title("Andregradsfunksjon")     # Setter tittel på grafen
plt.xlabel("x")                     # Setter navn på x-aksen
plt.ylabel("f(x)")                  # Setter navn på y-aksen
plt.xlim(-5, 5)                     # Setter intervall for x-aksen
plt.ylim(-5, 20)                    # Setter intervall for y-aksen
plt.axhline(y=0, color="k")         # Tegner sort linje for y = 0
plt.axvline(x=0, color="k")         # Tegner sort linje for x = 0
plt.grid()                          # Tegner rutenett
plt.show()                          # Viser grafen

x1 = ( -b - np.sqrt( b**2 - 4*a*c )) / (2*a)
x2 = ( -b + np.sqrt( b**2 - 4*a*c )) / (2*a)

print("Nullpunktene er ved x =", x1, "og x =", x2)
<div class="alert alert-block alert-info">

Oppgave 6

a) Velg verdier for aa, bb og cc slik at finner nullpunktene til funksjonen f(x)=x2x2f(x) = x^2 - x - 2.

<br>

b) Hva skjer når du prøver å løse likningen x2+3x+4=0x^2 + 3x + 4 = 0? Diskuter med sidemannen hva som har skjedd.

Hint:

Se på grafen som blir tegnet.
</div>
<div class="alert alert-block alert-info">

Oppgave 7

Diskuter i gruppen hvordan vi kan gjøre at programmet gir beskjed til brukeren hvis det ikke er noen nullpunkter. Dere skal ikke kode her, for koden lager vi i neste steg.

</div>

Steg 5 – Unntak og if-setninger

I oppgave 5 var det en likning som ikke hadde noen reelle løsninger. Vi har tidligere lært å sjekke uttrykket under rottegnet i abcabc-formelen (som kalles "diskriminanten") for å sjekke om uttrykket har ingen, én, eller to løsninger.

<div class="alert alert-block alert-info">

Oppgave 8

Diskuter følgende oppgaver med sidemannen:

<br>

a) Hva må være sant for at andregradsfunksjonen skal ha to nullpunkter?

<br>

b) Hva må være sant for at andregradsfunksjonen skal ha nøyaktig ett nullpunkt?

<br>

c) Hva må være sant for at andregradsfunksjonen ikke skal ha noen nullpunkter?

</div>

For å sjekke antallet løsninger lager vi et sett med if-setninger. Vi starter med å sjekke om andregradsfunksjonen har to nullpunkter.

<div class="alert alert-block alert-info">

Oppgave 9

Fyll ut resten av if-setningene i kodevinduet under. Hvert sted det står Noe må stå her skal byttes ut. Diskuter med sidemannen hva som bør settes inn. Prøv selv før dere ser et forslag lenger ned.

</div>
1 
2
3
4
5
6
7
8
9
10
a = float(input("Skriv inn koeffisienten foran x^2-leddet: ")) 
b = float(input("Skriv inn koeffisienten foran x-leddet: ")) 
c = float(input("Skriv inn konstantleddet: ")) 

if b**2 - 4*a*c > 0:
    print("Funksjonen har to nullpunkter") 
elif # Noe må stå her :
    print("Noe må stå her") 
else:
    print("Noe må stå her")
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Koden vi har så langt med løsningsforslag til oppgave 7 nederst.

import numpy as np
import matplotlib.pyplot as plt

a = float(input("Skriv inn koeffisienten foran x^2-leddet: ")) 
b = float(input("Skriv inn koeffisienten foran x-leddet: ")) 
c = float(input("Skriv inn konstantleddet: ")) 

x = np.linspace(-10, 10, 1001) 
y = a*x**2 + b*x + c

plt.plot(x, y, "m")                 # Plotter x og y med magenta farge
plt.title("Andregradsfunksjon")     # Setter tittel på grafen
plt.xlabel("x")                     # Setter navn på x-aksen
plt.ylabel("f(x)")                  # Setter navn på y-aksen
plt.xlim(-5, 5)                     # Setter intervall for x-aksen
plt.ylim(-5, 20)                    # Setter intervall for y-aksen
plt.axhline(y=0, color="k")         # Tegner sort linje for y = 0
plt.axvline(x=0, color="k")         # Tegner sort linje for x = 0
plt.grid()                          # Tegner rutenett
plt.show()                          # Viser grafen

# Her er et løsningsforslag til oppgave 7

if b**2 - 4*a*c > 0:  
    x1 = ( -b - sqrt( b**2 - 4*a*c )) / (2*a)    
    x2 = ( -b + sqrt( b**2 - 4*a*c )) / (2*a)  
    print("Funksjonen har nullpunkter ved x =", x1, "og x =", x2)
elif b**2 - 4*a*c == 0:  
    x1 = -b / (2*a)  
    print("Funksjonen har ett nullpunkt som er ved x =", x1)
else:
    print("Funksjonen har ingen nullpunkter")

Det er greit å sette informasjonen om hvor mange nullpunkter det er, sammen med informasjonen om hvor nullpunktene er. For å unngå feilmeldinger regner programmet ut nullpunktene bare hvis de eksisterer, dvs at vi har puttet utregningen kun inne i if-setningen.

<div class="alert alert-block alert-info">

Oppgave 10

Diskuter med sidemannen hvorfor midterste ledd bare har utregningen: x1 = -b / (2*a)

</div>
<div class="alert alert-block alert-info">

Oppgave 11

Kjør programmet for følgende funksjoner.

<br>

a) f(x)=x2+3x+2f(x) = x^2 + 3x + 2

<br>

b) f(x)=x2+3x+4f(x) = x^2 + 3x + 4

<br>

c) Prøv deg frem med egne verdier for aa, bb og cc. Går det alltid bra?

</div>

Steg 6 – Andre egenskaper

Det er mange egenskaper ved en andregradsfunksjon. Hittil er bare nullpunktene vist. Nå skal programmet utvides til å gi brukeren informasjon om andre egenskaper ved andregradsfunksjonen.

<div class="alert alert-block alert-danger">

Info til lærer

Denne oppgaven er ganske åpen, og i oppgave a) gir vi med vilje ikke så mange eksempler da vi ønsker at elevene selv skal utforske hva de kan gjøre. Flere eksemper er:

  • ekstremalpunkt på flere måter
  • det deriverte uttrykket
  • hvilken vei grafen buer
  • etc.

Denne oppgaven kan også med fordel gjennomgår i felleskap i en klasseromsdiskusjon. Det vil gjøre at alle ser hvilke egenskaper man kan finne i en andregradsfunksjon. Erfarngsmessig er det flere enn elevene tror.

<div class="alert alert-block alert-info">

Oppgave 12

a) Hvilke andre egenskaper ved en andregradsfunksjon kan vi finne/gi brukeren? Diskuter med sidemannen om hvilke egenskaper dere ønsker å finne.

Eksempler er:

  • krysning med yy-akse
  • det faktoriserte uttrykket
  • etc.
<br>

b) Diskuter raskt hvordan dere ville funnet disse egenskapene ved regning, og deretter hvordan dere kan lage en kodebit som gjør at programmet regner det ut.

Utvid programmet til å inkludere disse egenskapene.

</div>