I denne oppgaven skal du bruke Python til å utforske likningsløsning med abc-formelen. Vi skal gjøre dette trinnvis. Vi skal lage et program der en bruker kan skrive inn likningen og få ut løsningene.
a) Python kommer ikke til å forstå tegnet . Hvordan kan vi dele abc-formelen i to deler som Python kan tolke?
Løsning
Når vi deler opp formelen i to deler, kan den skrives som
b) Hvordan kan brukeren av programmet skrive inn andregradslikningen som skal løses?
Løsning
Vi må gå ut ifra at brukeren har en andregradslikning på formen , som ovenfor. Da trenger vi bare konstantene a, b og c fra brukeren.
c) Skriv algoritmen til et program som løser andregradslikninger for oss. Programmet skal ta imot den informasjonen som trengs om likningen, fra brukeren av programmet. Løsningene kan presenteres med utskriften "x1 = ... , x2 = ...". Husk å få med forklarende tekster i starten av programmet slik at brukeren av programmet vet hva som skal gjøres.
Løsningsforslag
Importer kvadratrotfunksjonen.
Skriv til skjermen "Dette programmet løser andregradslikningen ax^2 + bx + c = 0.".
Ta imot tallet "a" fra brukeren, konverter det til et ekte tall, og sett det lik variabelen a.
Ta imot tallet "b" fra brukeren, konverter det til et ekte tall, og sett det lik variabelen b.
Ta imot tallet "c" fra brukeren, konverter det til et ekte tall, og sett det lik variabelen c.
Regn ut med formelen ovenfor, og sett resultatet lik variabelen x1.
Regn ut med formelen ovenfor, og sett resultatet lik variabelen x2.
Skriv til skjermen "Løsningene er x1 = {x1} og x2 = {x2}.".
I siste linje betyr "{x1}" innholdet av variabelen x1.
d) Skriv programmet og test det med likningen. Gir programmet riktige løsninger?
LøsningPython
1from math import sqrt
23print("Dette programmet løser andregradslikningen ax^2+bx+c=0.")4a =float(input("Skriv inn konstanten a: "))5b =float(input("Skriv inn konstanten b: "))6c =float(input("Skriv inn konstanten c: "))78x1 =(-b+sqrt(b**2-4*a*c))/(2*a)9x2 =(-b-sqrt(b**2-4*a*c))/(2*a)1011print(f"Løsningene er x1 = {x1} og x2 = {x2}.")
Programmet gir utskriften "Løsningene er x1 = 1.0 og x2 = -5.0).". Dette er riktige løsninger.
e) Prøv programmet på likningen . Hvorfor passer ikke utskriften av løsningen så godt til denne likningen?
Løsning
Her gir programmet utskriften "Løsningene er x1 = 3.0 og x2 = 3.0.". Dette er et fullstendig kvadrat, så dermed blir begge løsningene like. Programmet vil alltid regne ut to løsninger, uavhengig av om løsningene er like eller ikke.
f) Prøv programmet på likningen . Hva skjer nå, og hvorfor skjer dette?
Løsning
Her får vi en feilmelding, "math domain error". Det betyr at det ikke går an å regne ut. Sjekk diskriminanten (uttrykket under rottegnet)!
g) Endre på algoritmen i c) slik at programmet gir en utskrift tilpasset alle de ulike tilfellene av andregradslikninger vi kan komme borti.
Løsning
Her må vi legge inn en if-else-setning, som finner to løsninger dersom diskriminanten er større enn 0, og én løsning dersom diskriminanten er lik 0. If-else-setningen vil også skrive ut at likningen ikke har reelle løsninger dersom diskriminanten er negativ. Vi legger det inn mellom innhenting av konstantene og utregningen.
h) Skriv programmet fra g) og test det på ulike likninger.
LøsningPython
1from math import sqrt
23print("Dette programmet løser andregradslikningen ax^2+bx+c=0.")4a =float(input("Skriv inn konstanten a: "))5b =float(input("Skriv inn konstanten b: "))6c =float(input("Skriv inn konstanten c: "))78diskr = b**2-4*a*c
910if diskr >0:11 x1 =(-b+sqrt(b**2-4*a*c))/(2*a)12 x2 =(-b-sqrt(b**2-4*a*c))/(2*a)13print(f"Løsningene er x1 = {x1} og x2 = {x2}.")1415elif diskr ==0:16 x1 =(-b+sqrt(b**2-4*a*c))/(2*a)17print(f"Likningen har én løsning, x = {x1}.")1819else:20print("Likningen har ingen reelle løsninger.")
Ronald har prøvd seg på likningsløsning med abc-formelen, men han strever med å få dette til. Han føler at han er nesten i mål, men har en følelse av at han alltid gjør minst én feil. Kan du hjelpe ham med å finne feilene i løsningene hans?
a)
Løsning
Ronald har satt inn feil for b i det første leddet over brøkstreken. Løsningen hans skulle ha vært slik:
b)
Løsning
Her har Ronald bommet når han har ordnet likninen. Det er ikke rekkefølgen på leddene som avgjør hvilke tall som er a, b og c. Han burde heller ha tenkt på hvilke tall som er koeffisient til andregradsleddet og koeffisient til førstegradsleddet, og hvilket tall som er konstantleddet. Han burde ha ordnet likningen slik i stedet:
Da kunne han ha funnet løsningene:
c)
Likningen har ingen reelle løsninger.
Løsning
Her har Ronald oversett at konstantleddet er negativt. Han har satt , mens det egentlig skal være . Da ville løsningen ha blitt slik:
a) Grunnflata til et hus er et rektangel med bredde x meter og lengde meter. Arealet er 96 . Sett opp en andregradslikning og regn ut hvor langt og hvor bredt huset er.
Løsning
Vi setter opp en likning:
Her kan vi bare bruke den positive løsningen.
Huset er 12 m langt og 8 m bredt.
b) Grunnflata til et hus er et rektangel med bredde meter og lengde meter. Arealet er 126 . Sett opp en andregradslikning og regn ut hvor langt og hvor bredt huset er.
Løsning
Vi setter opp en likning:
Her kan vi bare bruke den positive løsningen.
Huset er 14 m langt og 9 m bredt.
c) Grunnflata til en garasje er et rektangel med bredde meter og lengde meter. Diagonalen i grunnflata er 10 meter. Sett opp en andregradslikning og regn ut hvor lang og hvor bred garasjen er.
Løsning
Her må vi bruke pytagorassetningen for å sette opp likningen.
Her er det lurt å dividere alle ledd med 2 for å få lettere tall å sette inn iabc-formelen.
Vi får da
Her kan vi bare bruke den positive løsningen.
Garasjen er 8 m lang og 6 m bred.
d) Ei tomt er et rektangel med bredde meter og lengde meter. Diagonalen er 50 meter. Finn arealet av tomta.
Løsning
Vi må først finne lengden av sidene.
Vi bruker pytagorassetningen og setter opp en likning.
Her er det lurt å dividere alle ledd med 2 for å få lettere tall å sette inn iabc-formelen.