9.3 Funksjoner i Python
Definere og kalle egne funksjoner, lage verditabeller, håndtere verdier som ikke er definert og regne ut vekstfart.
Funksjoner i matematikk og i Python
En matematisk funksjon gir én verdi for hver . I Python lager vi det samme med def:
def f(x):
return x ** 2 - 2 * x - 3- def f(x): definerer en funksjon med navn f og parameter x.
- return sender verdien tilbake til stedet der funksjonen ble kalt.
- f(4) kaller funksjonen med og gir .
Funksjonen kjøres ikke før den blir kalt. En funksjon kan ha flere parametere, for eksempel def vekstfart(a, b):.
Lag en verditabell for for heltall fra til , og bruk tabellen til å finne nullpunktene.
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: Nullpunktene er og .
print viser en verdi på skjermen. return gir verdien tilbake slik at programmet kan regne videre med den, for eksempel y = f(3) + 1. En funksjon som bare skriver ut, kan ikke brukes i nye utregninger.Hva skriver programmet ut?
def g(x):
return 3 * x - 5
print(g(4), g(0), g(-2))Hva skriver programmet ut?
def h(x):
return x ** 2
y = h(3) + 1
print(y)Hva skriver programmet ut?
def f(x):
return 2 * x + 1
def g(x):
return f(x) ** 2
print(g(3))Lag en funksjon areal_sirkel(r) som returnerer arealet av en sirkel med radius . Bruk funksjonen til å finne arealet når , avrundet til to desimaler.
Lag et program som skriver ut en verditabell for for heltall fra til . Hvilke nullpunkter kan du lese av?
Verdier som ikke er definert
En rasjonal funksjon er ikke definert der nevneren er null. Når et program prøver å regne ut en slik verdi, stopper det med feilmeldingen ZeroDivisionError. Vi unngår feilen med en betingelse som hopper over denne -verdien.
Programmet nedenfor skal lage en verditabell for .
def f(x):
return (2 * x + 1) / (x + 1)
x = 3
while x >= -3:
print(x, f(x))
x = x - 1a) Hvorfor stopper programmet med en feilmelding?
b) Endre programmet slik at det ikke stopper.
a)
3 1.75
2 1.6666666666666667
1 1.5
0 1.0
ZeroDivisionError: division by zeroEtter blir , og da er nevneren .
Svar: er ikke definert fordi vi da 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, "ikke definert")
x = x - 13 1.75
2 1.6666666666666667
1 1.5
0 1.0
-1 ikke definert
-2 3.0
-3 2.5Svar: Vi legger inn betingelsen if x != -1: foran utregningen.
Programmet skal lage en verditabell for .
def f(x):
return (x + 4) / (x - 3)
for x in range(0, 7):
print(x, f(x))Programmet skriver ut tre linjer og stopper så med en feilmelding. Forklar hvorfor.
Endre programmet slik at det skriver ut verdiene for alle de andre -verdiene.
Hvilken vertikal asymptote har grafen til ?
Vekstfart med en funksjon
Gjennomsnittlig vekstfart fra til er
Den momentane vekstfarten i kan vi tilnærme ved å velge svært nær , for eksempel .
Hva skriver programmet ut, og hva forteller verdiene?
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 gjennomsnittlige vekstfarten fra til er 3. Den andre verdien er svært nær 3 og er en tilnærming til den momentane vekstfarten .
Ada har laget programmet nedenfor. Hvilken verdi skrives ut, og hva forteller verdien?
def f(x):
return 2 * x ** 2 - x
a = 1
b = 4
v = (f(b) - f(a)) / (b - a)
print(v)Programmet nedenfor er gitt.
def f(x):
return x ** 3
def stigning(a):
h = 0.001
return (f(a + h) - f(a)) / h
print(stigning(2))Hva regner funksjonen stigning ut?
Sammenlikn utskriften med .
Søke etter største og minste verdi
For å finne den minste verdien av blant mange -verdier lar vi en variabel holde den minste verdien vi har sett så langt. I hver runde sammenlikner vi med neste funksjonsverdi og bytter hvis den er mindre.
Hva finner 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 starter med og går gjennom heltallene fra til . minst og x_min oppdateres hver gang er mindre enn den minste verdien så langt.
3 -5Kontroll: har bunnpunkt i .
Svar: Blant heltallene fra til har sin minste verdi for .
Siri har laget programmet nedenfor.
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)Hva finner Siri ut når hun kjører programmet? Hvilken verdi skrives ut?
Endre programmet slik at det også skriver ut -verdien der den minste verdien er.
Et produkt bygges opp som en 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
Oppgaver i eksamensform
Programmet nedenfor 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))Hva skriver programmet ut, og hva har programmet funnet?
Programmet nedenfor undersøker .
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)Hvilke -verdier blir undersøkt?
Hva skriver programmet ut, og hva forteller verdiene?
Vis ved regning at programmet har funnet toppunktet til grafen.
Lag et program som regner ut . Bruk det til å finne og .
Lars har laget programmet nedenfor.
def g(x):
return 4 / (x ** 2 - 4)
for x in range(-3, 4):
print(x, g(x))Programmet skriver ut én linje og stopper så med en feilmelding.
Hva vil Lars bruke programmet til, og hvorfor får han en feilmelding?
Foreslå en endring som gjør at programmet skriver ut alle verdiene som finnes.
Bestem asymptotene til grafen til .
Oppsummering
- def f(x): med return lager en funksjon; f(3) kaller den.
- En løkke som kaller funksjonen, gir en verditabell.
- Der en funksjon ikke er definert, stopper programmet med ZeroDivisionError; en betingelse (if x != …) hopper over verdien.
- (f(b) - f(a)) / (b - a) er gjennomsnittlig vekstfart; med svært nær blir det en tilnærming til .
- Største eller minste verdi finner vi ved å sammenlikne 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.