Lineært likningssett med to ukjente

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

Info til lærer

Opplegget kan egne seg både til ungdomskolen og videregående, med litt ulik bruk av opplegget.

1T: Her kan opplegget brukes både som innlæring av enkelte programmeringskommandoer og som et opplegg for å øke dybdelæringen til elever i forståelsen av likningssett. Sammenhengen mellom antall løsninger, grafen til likningssettet og, ikke minst, hvorfor det matematisk blir de løsningene det blir, er vektlagt mot slutten av opplegget.

10 trinn: Her blir det noe likt som i 1T, men siden for eksempel graftegning ikke er like vektlagt, kan man gi elevene mer skjelettkode. Fokuset blir da på hvordan man kan bruke programmering til å løse et likningssett og økt forståelsen for sammenhengene.

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

Kompetansemål i 1T

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

  • utforske strategier for å løse likninear, likningssystemer og ulikheter og argumentere for tenkemåtene sine
  • formulere og løse problemer ved hjelp av algoritmisk tenkning, ulike problemløsingsstrategier, digitale verktøy og programmering
</div>
<div class="alert alert-block alert-warning">

Kompetansemål fra 10. trinn

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

  • utforske og sammenlikne egenskaper ved ulike funksjoner ved å bruke digitale verktøy
  • lage, løse og forklare likningssett knytter til praktiske situasjoner
  • utforske matematiske egenskapar og sammenhenger ved å bruke programmering
</div>

Løsning av et standard likningssett for hånd

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

Oppgave 1

Løs følgende likningssett for hånd

2y=7x+115y=3x+13 \begin{matrix} 2y = 7x + 11 \\ 5y = 3x + 13 \\ \end{matrix}

Hvis alt gikk etter planen skal man få x=1x = -1 og y=2y = 2.

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

Info til lærer

Hvis man vil kan man diskutere valget av koeffisienter i likningssetet over. Alle er primtall som er valgt med vilje, hvorfor?

Løsningen under kan man gjennomføre på tavlen eller kanskje la en elev vise det. Dette er litt avhengig av klasse og nivå.

Vi skal nå løse likningssettet en gang til, men denne gangen skal vi ikke regne ut noen produkter eller summer underveis. Dette er grunnen til at vi valgte primtall som faktorer.

Løser først hver likning med hensyn på yy.

y=72x+112 y = \frac{7}{2}x + \frac{11}{2}
y=35x+135 y = \frac{3}{5}x + \frac{13}{5}

Setter utrykkene lik hverandre

72x+112=35x+135 \frac{7}{2}x + \frac{11}{2} = \frac{3}{5}x + \frac{13}{5}

Multipliserer alle ledd med fellesnevner (252\cdot 5). Husk at vi ikke skal regne ut produktene.

(75)x+115=(32)x+132 (7\cdot 5)x + 11\cdot 5 = (3\cdot 2)x + 13\cdot 2

Samler uttrykkene med xx på venstre side

(75)x(32)x=132115 (7\cdot 5)x - (3\cdot 2)x = 13\cdot 2 - 11\cdot 5

Trekker xx uten for en parentes

(7532)x=132115 (7\cdot 5 - 3\cdot 2)x = 13\cdot 2 - 11\cdot 5

Dividerer slik at vi får xx alene

x=1321157532 x = \frac{13\cdot 2 - 11\cdot 5}{7\cdot 5 - 3\cdot 2}

Når vi har funnet xx, kan vi løse for å finne yy.

y=7x+112 y = \frac{7x + 11}{2}

Hvordan hjelper dette oss når vi skal lage et program som løser alle lineære likningssett med to ukjente?

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

La oss se på et generelt lineært likningssett med to ukjente. Her kan faktorene være alle mulige kombinasjoner av tall, så vi erstatter hver faktor med en ukjent.

ay=bx+cdy=ex+f \begin{matrix} ay = bx + c \\ dy = ex + f \\ \end{matrix}
</div>

Vi skal nå løse dette likningssettet. Hvordan gjør vi det på enklest mulig måte? Vi kan selvsagt gjennomføre samme fremgangsmåte som i eksempelet over, men det er tungvint. La oss heller bruke utregningen vår og sammenligne de to likningssettene.

2y=7x+11ay=bx+c5y=3x+13dy=ex+f \begin{matrix} 2y = 7x + 11 &&&& ay = bx + c \\ 5y = 3x + 13 &&&& dy = ex + f \\ \end{matrix}
<div class="alert alert-block alert-info">

Oppgave 2

Diskuter med gruppen: Hvordan kan vi bruke dette til å finne løsningen på det generelle likningssettet?

</div>

Vi ser nå at variabelen a=2a = 2, b=7b=7, osv. Dette kan vi sette tilbake i løsningen vi fant tidligere.

x=1321157532=facdbdea x = \frac{13\cdot 2 - 11\cdot 5}{7\cdot 5 - 3\cdot 2} = \frac{f\cdot a - c\cdot d}{b\cdot d - e\cdot a}
y=7x+112=bx+ca y = \frac{7x + 11}{2} = \frac{bx + c}{a}

Vi har nå laget en generell løsning på et lineært likningssett med to ukjente, og dette kan vi programmere.

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

Oppgave 3

Diskuter med gruppen hvilke deler programmet må inneholde.

</div>

Utregning

Vi bruker nå variablene (a(a, bb, cc, dd, ee, og f)f) til å regne ut løsningene til likningssettet.

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

Oppgave 5

Bruk kodevinduet under til å utvide programmet over til å regne ut løsningene på likningssettet. Husk at formlene dere skal bruke står mellom oppgave 2 og oppgave 3.

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

Info til lærer

Merk at linje 5 og 6 i koden under trenger en forklaring. Det er mulig i Python å gi verdi til flere variabler på én linje som vist, men sannsynligvis har ikke elevene sett dette før. Vanligvis gjøres ikke dette siden det er litt programmeringsteknisk, men siden vi har så mange variabler ble dette vurdert enklere. Selv på vgs vil man sjelden ha så mange variabler i et program, så dette blir på mange måter litt unikt til akkurat dette opplegget.

1 
2
3
4
5
6
7
8
9
# Programkoden så langt

print("Dette programmet løser et lineært likningssett med to ukjente.")

a, b, c = 2, 7, 11            # Koeffisientene til likning på formen ay = bx + c
d, e, f = 5, 3, 13            # Koeffisientene til likning på formen dy = ex + f

# Løs oppgave 5 her

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

Oppgave 6

Test programmet ditt og se om det gir samme svar som utregningen i oppgave 1.

</div>
[2]: 
1 
2
3
4
5
6
7
8
9
10
11
# Programkoden så langt med løsning på oppgave 5 nederst

print("Dette programmet løser et lineært likningssett med to ukjente.")

a, b, c = 2, 7, 11            # Koeffisientene til likning på formen ay = bx + c
d, e, f = 5, 3, 13            # Koeffisientene til likning på formen dy = ex + f

x = (f*a - c*d)/(b*d - e*a)
y = (b*x + c)/a

print("Løsningene er x =", x, "og y =", y)
Dette programmet løser et lineært likningssett med to ukjente.
Viktig at likningssettet er ordnet med y-leddet på venstre side og x- og konstantleddet på høyre side.
Det vil si på formen:
ay = bx + c
dy = ex + f
Løsningene er x = -1.0 og y = 2.0
<div class="alert alert-block alert-info">

Oppgave 7

Prøv ut programmet for flere ulike lineære likningssett og diskuter med gruppen om programmet fungerer for alle likningssett.

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

Oppgave 8

Prøv med likningssettet

y=2x+34y=8x+5 \begin{matrix} y = 2x + 3 \\ 4y = 8x + 5 \\ \end{matrix}
<br> Hvorfor går dette galt?

Løs likningssettet for hånd og diskuter med gruppen hvorfor programmet ikke klarer å regne ut svaret.

</div>

Plotting av likningssettet

For å lettere se hva som skjer når vi ikke får en løsning, skal vi nå lage et plot av likningssettet. For å klare å tegne grafen til likningssettet trenger vi en del ekstra kommandoer som vi må laste inn. Vi laster inn dette i starten av programmet, og lager plottet før vi løser likningssettet.

[2]: 
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from numpy import linspace   # Vi trenger en kommando som lager en liste med x-verdier, biblioteket numpy har dette.
from matplotlib.pyplot import plot, grid, xlabel, ylabel

print("Dette programmet løser et lineært likningssett med to ukjente.")

a, b, c = 2, 7, 11            # Koeffisientene til likning på formen ay = bx + c
d, e, f = 5, 3, 13            # Koeffisientene til likning på formen dy = ex + f

x = linspace(-10, 10, 21)     # Lager en liste med x-verdier i intervallet fra -10 til 10
y1 = (b*x + c) / a            # Regner ut de tilhørende funksjonsverdiene (y-verdiene)
y2 = (e*x + f) / d

plot(x, y1)                   # Tegner grafen for likning 1
plot(x, y2)                   # Tegner grafen for likning 2
grid()                        # Tegner rutenett
xlabel("x")                   # Setter navn på x-aksen
ylabel("y")                   # Setter navn på y-aksen

x = (f*a - c*d)/(b*d - e*a)   # Regner ut x-verdien til skjæringspunktet
y = (b*x + c)/a               # Regner ut y-verdien til skjæringspunktet
print("Løsningene er x =", x, "og y =", y)
Dette programmet løser et lineært likningssett med to ukjente.
Viktig at likningssettet er ordnet med y-leddet på venstre side og x- og konstantleddet på høyre side.
Det vil si på formen:
ay = bx + c
dy = ex + f
Løsningene er x = -1.0 og y = 2.0
<div class="alert alert-block alert-info">

Oppgave 9

Kjør programkoden over med mange forskjellige likningssett (endre i linje 11 og 12).

Diskuter med gruppen: Hva er felles for alle likningssettene som ikke gir en løsning?

</div>

Antall løsninger til likningssett

I oppgave 9 lette vi etter forskjellen på likningssett som hadde og ikke hadde en løsning. Vi skal her gå litt nærmere inn på hva forskjellen er og hvordan vi kan matematisk forklare dem.

Vi starter med å se på et par eksempler på likningssett, løsningen (hvis den finnes), og grafen.

<img style="float: right;" src="Lineære_likningssett_graf01.png">

Likningssett 1:

y=2x+1 y = 2x + 1
y=x+4 y = -x + 4

Likningssett 1 har én løsning. For at det skal ha én løsning må de to likningene ha ulikt stigningstall.

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

Oppgave 10

Diskuter med gruppen: Hvordan kan vi vite at et likningssett har nøyaktig én løsning når stigningstallene til likningene er ulike?

</div>
<img style="float: right;" src="Lineære_likningssett_graf02.png">

Likningssett 2:

y=x+1 y = -x + 1
y=x+4 y = -x + 4

Likningssett 2 har ingen løsninger. For at det ikke skal være en løsning må de to likningene ha identisk stigningstall.

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

Oppgave 11

Så langt er en mulig hypotese at vi har én løsning når stigningstallet er ulike, og ingen løsninger når stigningstallet er likt.

Diskuter med gruppen:

  • Har vi flere mulige tilfeller?
  • Hvordan vi kan gjenkjenne disse tilfellene kun ved å se på likningssettet?
</div>
<img style="float: right;" src="Lineære_likningssett_graf03.png">

Likningssett 3:

y=x+2 y = -x + 2
2y=2x+4 2y = -2x + 4

Likningssett 3 har uendelig mange løsninger. For at det skal være uendelig mange løsninger må forholdet mellom tilsvarende koeffisienter i hver likning være bevart. Merk at på grafen til høyre er det to linjer, men den siden de er like har den ene overskrevet den andre.

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

Info til lærer

Likningssett 3 kan kobles til formlikhet med trekanter, der tilsvarende sider i to formlike trekanter alltid har samme forhold.

Endre programmet

Vi skal nå endre programmet slik at det tar hensyn til alle settene av lineære likninger vi har diskutert over. Vi starter med å se på uttrykket:

x=facdbdea x = \frac{f\cdot a - c\cdot d}{b\cdot d - e\cdot a}
<div class="alert alert-block alert-info">

Oppgave 12

a) Se på likningssettene over og sett inn verdier i telleren. I hvilke tilfeller blir nevneren lik 0, altså  bdea=0 \ b\cdot d - e\cdot a = 0 ?

<br>

b) I de tilfellene der nevneren ble lik null, når blir da også telleren lik 0, altså  facd=0 \ f\cdot a - c\cdot d = 0 ?

<br>

c) Skriv av og fyll ut tabellen under:

Er nevner lik null?Er teller lik null?Antall løsninger
..1
..Ingen
..Uendelig mange
</div>
<div class="alert alert-block alert-danger">

Info til lærer

Løsning:

Er nevner lik null?Er teller lik null?Antall løsninger
NeiNei1
JaNeiIngen
JaJaUendelig mange

Vi skal nå bruke tabellen vi lagde i oppgaven over til å lage ferdig programmet. For å gjøre dette må vi bruke en if-setning. Starten på en slik if-setning er gitt under.

1 
2
3
4
5
6
7
8
if ??? != 0:
    x = (f*a - c*d)/(b*d - e*a)
    y = (b*x + c)/a
    print("Løsningene er x =", x, "og y =", y)
elif ??? != ???:
    print("???")
else:
    ???
<div class="alert alert-block alert-info">

Oppgave 13

Hva skal stå istedenfor ??? i kodebiten over? Diskuter med sidemannen din og prøv å sette inn kode.

<br>

Hint: Bruk flytskjemaene under for hjelp til oppgave 13

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

Info til lærer

Denne oppgaven kan skaleres ganske enkelt ved å bestemme hvor mange steder i skjelettkoden over det skal stå ???. Slik den står nå er den vanskelig, i hvert fall hvis ikke oppgave 12 er ferdig. Har også lagt ved to flyskjemaer her som hjelp til oppgaven, skjemaet til venstre er generelt mens skjemaet til høyre er for oppgaven gitt i koden.

<img style="float: left;" src="Flytskjema01.png" width="450"> <img style="float: middle;" src="Flytskjema02.png" width="450">
[3]: 
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
# Koden så langt med forslag til løsning på oppgave 14 nederst

from numpy import linspace   # Vi trenger en kommando som lager en liste med x-verdier, biblioteket numpy har dette.
from matplotlib.pyplot import plot, grid, xlabel, ylabel

print("Dette programmet løser et lineært likningssett med to ukjente.")

a, b, c = 2, 7, 11            # Koeffisientene til likning på formen ay = bx + c
d, e, f = 5, 3, 13            # Koeffisientene til likning på formen dy = ex + f
    
x = linspace(-10, 10, 21)     # Lager en liste med x-verdier i intervallet fra -10 til 10
y1 = (b*x + c) / a            # Regner ut de tilhørende funksjonsverdiene (y-verdiene)
y2 = (e*x + f) / d

plot(x, y1)                   # Tegner grafen for likning 1
plot(x, y2)                   # Tegner grafen for likning 2
grid()                        # Tegner rutenett
xlabel("x")                   # Setter navn på x-aksen
ylabel("y")                   # Setter navn på y-aksen

if b*d - e*a != 0:                                              # Sjekker nevner ikke lik 0 ...
    x = (f*a - c*d)/(b*d - e*a)                                 # ... for da kan vi finne skjæringspunktet
    y = (b*x + c)/a
    print("Løsningene er x =", x, "og y =", y)
elif f*a - c*d != 0:                                            # ... ellers sjekker teller ikke lik 0 ... 
    print("Det er ingen mulige løsninger for x og y, siden dette er to")
    print("parallelle linjer som er parallellforskjøvet.")
else:                                                           # ... ellers er begge lik null
    print("Det er uendelig mange muligheter for verdiene til x og y")
    print("fordi linjene er parallelle og ligger oppå hverandre.")
Dette programmet løser et lineært likningssett med to ukjente.
Løsningene er x = -1.0 og y = 2.0
<div class="alert alert-block alert-info">

Oppgave 15

Vil dette programmet løse alle likningssett med to ukjente? Er det noen begrensninger? Diskuter med gruppen.

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

Info til lærer

Her vil de fleste si nei, men kan man utfordre elevene. Vi har for eksempel likningssett med x2x^2, og selv om det ikke er pensum på ungdomstrinnet så gjør det ingen ting å vise at det kommer.

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

Info til lærer

Utfordringene under er vanskelige. Begge to krever en god del forståelse av programmering og matematikk. Vær forsiktig med å gi elevene disse oppgavene. Begge oppgavene kan diskuteres uten å implementere programmering.

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

Utfordring 1

Lag et program som tar inn tre likninger med to ukjente og plotter de i samme koordinatsystem. For å ikke gjøre det altfor komplisert antar vi at likningene alltid er ordnet med yy alene på høyreside.

Når har disse en felles løsning, og når har de ikke en løsning? Vi kan prøve å la programmet finne en eventuell løsning, men dette er mer komplisert.

To eksempler er:

y=x+5y=4x7y=13x \begin{matrix} y = x + 5 \\ y = 4x - 7 \\ y = 13 - x \\ \end{matrix}

og

y=7y=x+4y=10x \begin{matrix} y = 7 \\ y = x + 4 \\ y = 10 - x \\ \end{matrix}
</div>
[10]: 
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
35
36
37
38
# Forslag til løsning på utfordring 1

from numpy import linspace   # Vi trenger en kommando som lager en liste med x-verdier, biblioteket numpy har dette.
from matplotlib.pyplot import plot, grid, xlabel, ylabel

print("Dette programmet løser tre likningssett med to ukjente.")

a, b = 0, 7             # Koeffisientene til likning på formen y = ax + b
c, d = 1, 4             # Koeffisientene til likning på formen y = cx + d
e, f = -1, 10           # Koeffisientene til likning på formen y = ex + f

x = linspace(-10, 10, 21)     # Lager en liste med x-verdier i intervallet fra -10 til 10
y1 = (a*x + b)               # Regner ut de tilhørende funksjonsverdiene (y-verdiene)
y2 = (c*x + d)
y3 = (e*x + f)

plot(x, y1)                   # Tegner grafen for likning 1
plot(x, y2)                   # Tegner grafen for likning 2
plot(x, y3)                   # Tegner grafen for likning 3
grid()                        # Tegner rutenett
xlabel("x")                   # Setter navn på x-aksen
ylabel("y")                   # Setter navn på y-aksen

# Merk at koden her antar at ingen av likningene har formen x = en konstant.

if a != c:                             # Sjekker at stigningstallet er ulikt ...
    x = (d-b)/(a-c)                    # ... regner ut skjæringspunktet mellom y1 og y2
    y = a*x + b
    if y == e*x + f:                   # Sjekker om punktet også ligger på y3
        print("Løsningen er x =", x, "og y =", y)
    else:
        print("Det er ingen mulige løsninger for x og y")
elif a != e:                           # ... hvis stigningstaller er likt, sjekker vi mot y3 ...
    x = (f-b)/(a-e)                    # ... regner ut skjæringspunktet mellom y1 og y3
    y = a*x + b
    print("Løsningen er x =", x, "og y =", y)
else:
    print("Det er ingen mulige løsninger for x og y")
Dette programmet løser tre likningssett med to ukjente.
Løsningen er x = 3.0 og y = 7.0
<div class="alert alert-block alert-success">

Utfordring 2

Utvid programmet til å løse likningssett med andregradsuttrykk på formen

y=ax2+bx+cy=dx2+ex+f \begin{matrix} y = ax^2 + bx + c \\ y = dx^2 + ex + f \\ \end{matrix}

for eksempel

y=x2+1y=4x2 \begin{matrix} y = x^2 + 1 \\ y = 4x - 2 \\ \end{matrix}
</div>
<div class="alert alert-block alert-danger">

Info til lærer

Merk: Oppgaven antar at elevene har lært å løse andregradslikninger.

</div>
[2]: 
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
# Forslag til løsning på utfordring 2

from numpy import linspace, sqrt   # Vi trenger en kommando som lager en liste med x-verdier, biblioteket numpy har dette.
from matplotlib.pyplot import plot, grid, xlabel, ylabel

print("Dette programmet løser et andregradslikningssett med to ukjente.")

a1, b1, c1 = -1, 3, 2            # Koeffisientene til likning på formen y = a1*x^2 + b1*x + c1
a2, b2, c2 = 1, 3, -3            # Koeffisientene til likning på formen y = a2*x^2 + b2*x + c2
    
x = linspace(-10, 10, 21)        # Lager en liste med x-verdier i intervallet fra -10 til 10
y1 = a1*x**2 + b1*x + c1         # Regner ut de tilhørende funksjonsverdiene (y-verdiene)
y2 = a2*x**2 + b2*x + c2

a = a1 - a2
b = b1 - b2
c = c1 - c2

if b**2 - 4*a*c > 0:             # Denne koden er kopiert fra andregradslikninger-filen og endret noe
    x1 = (-b - sqrt( b**2 - 4*a*c )) / (2*a)    
    x2 = (-b + sqrt( b**2 - 4*a*c )) / (2*a)  
    print("Funksjonene krysser ved (", round(x1, 2), ",", round(a1*x1**2 + b1*x1 + c1, 2), ")") 
    print("og (", round(x2, 2), ",", round(a2*x2**2 + b2*x2 + c2,2), ")")
elif b**2 - 4*a*c == 0:  
    x1 = -b / (2*a)  
    print("Funksjonene krysser ved (", round(x1, 2), ",", round(a1*x1**2 + b1*x1 + c1, 2), ")")
else:
    print("Funksjonene krysser aldri")

plot(x, y1)                   # Tegner grafen for likning 1
plot(x, y2)                   # Tegner grafen for likning 2
grid()                        # Tegner rutenett
xlabel("x")                   # Setter navn på x-aksen
ylabel("y")                   # Setter navn på y-aksen
Dette programmet løser et andregradslikningssett med to ukjente.
Funksjonene krysser ved ( 1.58 , 4.24 )
og ( -1.58 , -5.24 )
[2]: 
Text(0, 0.5, 'y')