9.3 Funksjonar i Python
Definere og kalle eigne funksjonar, lage verditabellar, handtere verdiar som ikkje er definerte og rekne ut vekstfart.
Funksjonar i matematikk og i Python
Ein matematisk funksjon gir éin verdi for kvar . I Python lagar vi det same med def:
def f(x):
return x ** 2 - 2 * x - 3- def f(x): definerer ein funksjon med namn f og parameter x.
- return sender verdien tilbake til staden der funksjonen vart kalla.
- f(4) kallar funksjonen med og gir .
Funksjonen blir ikkje køyrd før han blir kalla. Ein funksjon kan ha fleire parametrar, til dømes def vekstfart(a, b):.
Lag ein verditabell for for heiltal frå til , og bruk tabellen til å finne nullpunkta.
def f(x):
return x ** 2 - 2 * x - 3
for x in range(-2, 5):
print(x, f(x))-2 5
-1 0
0 -3
1 -4
2 -3
3 0
4 5og
Kontroll:
Svar: Nullpunkta er og .
print viser ein verdi på skjermen. return gir verdien tilbake slik at programmet kan rekne vidare med han, til dømes y = f(3) + 1. Ein funksjon som berre skriv ut, kan ikkje brukast i nye utrekningar.Kva skriv programmet ut?
def g(x):
return 3 * x - 5
print(g(4), g(0), g(-2))Kva skriv programmet ut?
def h(x):
return x ** 2
y = h(3) + 1
print(y)Kva skriv programmet ut?
def f(x):
return 2 * x + 1
def g(x):
return f(x) ** 2
print(g(3))Lag ein funksjon areal_sirkel(r) som returnerer arealet av ein sirkel med radius . Bruk funksjonen til å finne arealet når , avrunda til to desimalar.
Lag eit program som skriv ut ein verditabell for for heiltal frå til . Kva for nullpunkt kan du lese av?
Verdiar som ikkje er definerte
Ein rasjonal funksjon er ikkje definert der nemnaren er null. Når eit program prøver å rekne ut ein slik verdi, stoppar det med feilmeldinga ZeroDivisionError. Vi unngår feilen med eit vilkår som hoppar over denne -verdien.
Programmet nedanfor skal lage ein verditabell for .
def f(x):
return (2 * x + 1) / (x + 1)
x = 3
while x >= -3:
print(x, f(x))
x = x - 1a) Kvifor stoppar programmet med ei feilmelding?
b) Endre programmet slik at det ikkje stoppar.
a)
3 1.75
2 1.6666666666666667
1 1.5
0 1.0
ZeroDivisionError: division by zeroEtter blir , og då er nemnaren .
Svar: er ikkje definert fordi vi då deler på null.
b)
def f(x):
return (2 * x + 1) / (x + 1)
x = 3
while x >= -3:
if x != -1:
print(x, f(x))
else:
print(x, "ikkje definert")
x = x - 13 1.75
2 1.6666666666666667
1 1.5
0 1.0
-1 ikkje definert
-2 3.0
-3 2.5Svar: Vi legg inn vilkåret if x != -1: framfor utrekninga.
Programmet skal lage ein verditabell for .
def f(x):
return (x + 4) / (x - 3)
for x in range(0, 7):
print(x, f(x))Programmet skriv ut tre linjer og stoppar så med ei feilmelding. Forklar kvifor.
Endre programmet slik at det skriv ut verdiane for alle dei andre -verdiane.
Kva for ein vertikal asymptote har grafen til ?
Vekstfart med ein funksjon
Gjennomsnittleg vekstfart frå til er
Den momentane vekstfarten i kan vi tilnærme ved å velje svært nær , til dømes .
Kva skriv programmet ut, og kva fortel verdiane?
def f(x):
return 0.5 * x ** 2 + x
def vekstfart(a, b):
return (f(b) - f(a)) / (b - a)
print(vekstfart(0, 4))
print(vekstfart(2, 2.0001)),
3.0
3.000049999999696Kontroll av den andre verdien: , så .
Svar: Den gjennomsnittlege vekstfarten frå til er 3. Den andre verdien er svært nær 3 og er ei tilnærming til den momentane vekstfarten .
Ada har laga programmet nedanfor. Kva for ein verdi blir skriven ut, og kva fortel verdien?
def f(x):
return 2 * x ** 2 - x
a = 1
b = 4
v = (f(b) - f(a)) / (b - a)
print(v)Programmet nedanfor er gitt.
def f(x):
return x ** 3
def stigning(a):
h = 0.001
return (f(a + h) - f(a)) / h
print(stigning(2))Kva reknar funksjonen stigning ut?
Samanlikn utskrifta med .
Søkje etter største og minste verdi
For å finne den minste verdien av blant mange -verdiar lèt vi ein variabel halde den minste verdien vi har sett så langt. I kvar runde samanliknar vi med neste funksjonsverdi og byter dersom han er mindre.
Kva finn programmet ut?
def f(x):
return x ** 2 - 6 * x + 4
minst = f(-2)
x_min = -2
for x in range(-1, 9):
if f(x) < minst:
minst = f(x)
x_min = x
print(x_min, minst)Programmet startar med og går gjennom heiltala frå til . minst og x_min blir oppdaterte kvar gong er mindre enn den minste verdien så langt.
3 -5Kontroll: har botnpunkt i .
Svar: Blant heiltala frå til har den minste verdien sin for .
Siri har laga programmet nedanfor.
def f(x):
return x ** 2 - 4 * x - 5
x = -3
minst = f(x)
while x < 6:
x = x + 1
if f(x) < minst:
minst = f(x)
print(minst)Kva finn Siri ut når ho køyrer programmet? Kva for ein verdi blir skriven ut?
Endre programmet slik at det også skriv ut -verdien der den minste verdien er.
Eit produkt blir bygd opp som ein sum, men startverdien er 1.
def fakultet(n):
produkt = 1
for k in range(1, n + 1):
produkt = produkt * k
return produkt
print(fakultet(5))
print(fakultet(10))120
3628800Svar: og
Oppgåver i eksamensform
Programmet nedanfor er gitt.
def S(n):
s = 0
for k in range(1, n + 1):
s = s + k
return s
n = 1
while S(n) <= 1000:
n = n + 1
print(n, S(n))Kva skriv programmet ut, og kva har programmet funne?
Programmet nedanfor undersøkjer .
def f(x):
return -x ** 2 + 5 * x + 2
storst = f(0)
x_maks = 0
for i in range(0, 51):
x = i / 10
if f(x) > storst:
storst = f(x)
x_maks = x
print(x_maks, storst)Kva for -verdiar blir undersøkte?
Kva skriv programmet ut, og kva fortel verdiane?
Vis ved rekning at programmet har funne toppunktet til grafen.
Lag eit program som reknar ut . Bruk det til å finne og .
Lars har laga programmet nedanfor.
def g(x):
return 4 / (x ** 2 - 4)
for x in range(-3, 4):
print(x, g(x))Programmet skriv ut éi linje og stoppar så med ei feilmelding.
Kva vil Lars bruke programmet til, og kvifor får han ei feilmelding?
Foreslå ei endring som gjer at programmet skriv ut alle verdiane som finst.
Bestem asymptotane til grafen til .
Oppsummering
- def f(x): med return lagar ein funksjon; f(3) kallar han.
- Ei løkke som kallar funksjonen, gir ein verditabell.
- Der ein funksjon ikkje er definert, stoppar programmet med ZeroDivisionError; eit vilkår (if x != …) hoppar over verdien.
- (f(b) - f(a)) / (b - a) er gjennomsnittleg vekstfart; med svært nær blir det ei tilnærming til .
- Største eller minste verdi finn vi ved å samanlikne med den beste verdien så langt.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.