Lineært likningssett med to ukjente
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.
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
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
Løsning av et standard likningssett for hånd
Oppgave 1
Løs følgende likningssett for hånd
Hvis alt gikk etter planen skal man få og .
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å .
Setter utrykkene lik hverandre
Multipliserer alle ledd med fellesnevner (). Husk at vi ikke skal regne ut produktene.
Samler uttrykkene med på venstre side
Trekker uten for en parentes
Dividerer slik at vi får alene
Når vi har funnet , kan vi løse for å finne .
Hvordan hjelper dette oss når vi skal lage et program som løser alle lineære likningssett med to ukjente?
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.
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.
Oppgave 2
Diskuter med gruppen: Hvordan kan vi bruke dette til å finne løsningen på det generelle likningssettet?
</div>Vi ser nå at variabelen , , osv. Dette kan vi sette tilbake i løsningen vi fant tidligere.
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 , , , , , og til å regne ut løsningene til likningssettet.
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>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.
# 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
Oppgave 6
Test programmet ditt og se om det gir samme svar som utregningen i oppgave 1.
</div>[2]:
# 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
Oppgave 7
Prøv ut programmet for flere ulike lineære likningssett og diskuter med gruppen om programmet fungerer for alle likningssett.
</div>Oppgave 8
Prøv med likningssettet
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]:
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
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:
Likningssett 1 har én løsning. For at det skal ha én løsning må de to likningene ha ulikt stigningstall.
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>Likningssett 2:
Likningssett 2 har ingen løsninger. For at det ikke skal være en løsning må de to likningene ha identisk stigningstall.
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?
Likningssett 3:
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.
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:
Oppgave 12
a) Se på likningssettene over og sett inn verdier i telleren. I hvilke tilfeller blir nevneren lik 0, altså ?
<br>b) I de tilfellene der nevneren ble lik null, når blir da også telleren lik 0, altså ?
<br>c) Skriv av og fyll ut tabellen under:
Er nevner lik null? | Er teller lik null? | Antall løsninger |
---|---|---|
. | . | 1 |
. | . | Ingen |
. | . | Uendelig mange |
Info til lærer
Løsning:
Er nevner lik null? | Er teller lik null? | Antall løsninger |
---|---|---|
Nei | Nei | 1 |
Ja | Nei | Ingen |
Ja | Ja | Uendelig 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.
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:
???
Oppgave 13
Hva skal stå istedenfor ???
i kodebiten over? Diskuter med sidemannen din og prøv å sette inn kode.
Hint: Bruk flytskjemaene under for hjelp til oppgave 13
</div>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.
[3]:
# 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
Oppgave 15
Vil dette programmet løse alle likningssett med to ukjente? Er det noen begrensninger? Diskuter med gruppen.
</div>Info til lærer
Her vil de fleste si nei, men kan man utfordre elevene. Vi har for eksempel likningssett med , og selv om det ikke er pensum på ungdomstrinnet så gjør det ingen ting å vise at det kommer.
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.
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 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:
og
[10]:
# 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
Utfordring 2
Utvid programmet til å løse likningssett med andregradsuttrykk på formen
for eksempel
Info til lærer
Merk: Oppgaven antar at elevene har lært å løse andregradslikninger.
</div>[2]:
# 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')