9.3

9.3 Funksjoner i Python

Definere og kalle egne funksjoner, lage verditabeller, håndtere verdier som ikke er definert og regne ut vekstfart.

55 min
13 oppgaver
Egne funksjonerVerditabellerNulldivisjonVekstfartStørste og minste verdi
Din fremgang i kapitlet
0 / 13 oppgaver
Kapitlets plass i kurset

Funksjoner i matematikk og i Python

En matematisk funksjon gir én verdi f(x)f(x) for hver xx. 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 x=4x = 4 og gir f(4)=5f(4) = 5.

Funksjonen kjøres ikke før den blir kalt. En funksjon kan ha flere parametere, for eksempel def vekstfart(a, b):.

✏️Eksempel 1: Verditabell

Lag en verditabell for f(x)=x2−2x−3f(x) = x^2 - 2x - 3 for heltall fra −2-2 til 44, 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 5

f(−1)=0f(-1) = 0 og f(3)=0f(3) = 0

Kontroll: x2−2x−3=(x+1)(x−3)x^2 - 2x - 3 = (x + 1)(x - 3)

Svar: Nullpunktene er x=−1x = -1 og x=3x = 3.

📝Oppgave 1

Hva skriver programmet ut?

def g(x):
    return 3 * x - 5

print(g(4), g(0), g(-2))

📝Oppgave 2

Hva skriver programmet ut?

def h(x):
    return x ** 2

y = h(3) + 1
print(y)

📝Oppgave 3

Hva skriver programmet ut?

def f(x):
    return 2 * x + 1

def g(x):
    return f(x) ** 2

print(g(3))

📝Oppgave 4

Lag en funksjon areal_sirkel(r) som returnerer arealet av en sirkel med radius rr. Bruk funksjonen til å finne arealet når r=5r = 5, avrundet til to desimaler.

📝Oppgave 5

Lag et program som skriver ut en verditabell for f(x)=x3−4xf(x) = x^3 - 4x for heltall fra −3-3 til 33. 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 xx-verdien.

✏️Eksempel 2: Feilmelding i verditabellen

Programmet nedenfor skal lage en verditabell for f(x)=2x+1x+1f(x) = \dfrac{2x + 1}{x + 1}.

def f(x):
    return (2 * x + 1) / (x + 1)

x = 3
while x >= -3:
    print(x, f(x))
    x = x - 1

a) 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 zero

Etter x=0x = 0 blir x=−1x = -1, og da er nevneren x+1=0x + 1 = 0.

Svar: f(−1)f(-1) 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 - 1

3 1.75
2 1.6666666666666667
1 1.5
0 1.0
-1 ikke definert
-2 3.0
-3 2.5

Svar: Vi legger inn betingelsen if x != -1: foran utregningen.

📝Oppgave 6

Programmet skal lage en verditabell for f(x)=x+4x−3f(x) = \dfrac{x + 4}{x - 3}.

def f(x):
    return (x + 4) / (x - 3)

for x in range(0, 7):
    print(x, f(x))

a

Programmet skriver ut tre linjer og stopper så med en feilmelding. Forklar hvorfor.

b

Endre programmet slik at det skriver ut verdiene for alle de andre xx-verdiene.

c

Hvilken vertikal asymptote har grafen til ff?

Vekstfart med en funksjon

Gjennomsnittlig vekstfart fra x=ax = a til x=bx = b er

f(b)−f(a)b−a\frac{f(b) - f(a)}{b - a}

Den momentane vekstfarten i x=ax = a kan vi tilnærme ved å velge bb svært nær aa, for eksempel b=a+0,0001b = a + 0{,}0001.

✏️Eksempel 3: Gjennomsnittlig og momentan vekstfart

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))

f(x)=0,5x2+xf(x) = 0{,}5x^2 + x

f(4)=0,5⋅16+4=12f(4) = 0{,}5 \cdot 16 + 4 = 12, f(0)=0f(0) = 0

12−04−0=3\dfrac{12 - 0}{4 - 0} = 3

3.0
3.000049999999696

Kontroll av den andre verdien: f′(x)=x+1f'(x) = x + 1, så f′(2)=3f'(2) = 3.

Svar: Den gjennomsnittlige vekstfarten fra x=0x = 0 til x=4x = 4 er 3. Den andre verdien er svært nær 3 og er en tilnærming til den momentane vekstfarten f′(2)=3f'(2) = 3.

📝Oppgave 7

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)

📝Oppgave 8

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))

a

Hva regner funksjonen stigning ut?

b

Sammenlikn utskriften med f′(2)f'(2).

Søke etter største og minste verdi

For å finne den minste verdien av ff blant mange xx-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.

✏️Eksempel 4: Minste verdi

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 f(−2)=20f(-2) = 20 og går gjennom heltallene fra −1-1 til 88. minst og x_min oppdateres hver gang f(x)f(x) er mindre enn den minste verdien så langt.

3 -5

Kontroll: f(x)=(x−3)2−5f(x) = (x - 3)^2 - 5 har bunnpunkt i (3,−5)(3, -5).

Svar: Blant heltallene fra −2-2 til 88 har ff sin minste verdi −5-5 for x=3x = 3.

📝Oppgave 9

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)

a

Hva finner Siri ut når hun kjører programmet? Hvilken verdi skrives ut?

b

Endre programmet slik at det også skriver ut xx-verdien der den minste verdien er.

✏️Eksempel 5: Fakultet
n!n! (nn fakultet) er produktet 1⋅2⋅3⋯n1 \cdot 2 \cdot 3 \cdots n. Lag en funksjon som regner ut n!n!, og bruk den til å finne 5!5! og 10!10!.

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
3628800

Svar: 5!=1205! = 120 og 10!=3 628 80010! = 3\,628\,800

Oppgaver i eksamensform

📝Oppgave 10

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?

📝Oppgave 11

Programmet nedenfor undersøker f(x)=−x2+5x+2f(x) = -x^2 + 5x + 2.

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)

a

Hvilke xx-verdier blir undersøkt?

b

Hva skriver programmet ut, og hva forteller verdiene?

c

Vis ved regning at programmet har funnet toppunktet til grafen.

📝Oppgave 12
n!=1⋅2⋅3⋯nn! = 1 \cdot 2 \cdot 3 \cdots n
a

Lag et program som regner ut n!n!. Bruk det til å finne 8!8! og 30!30!.

b
30!30! slutter på 7 nuller. Gjør rede for hvilke faktorer som gir disse nullene.
Løs oppgaven
📝Oppgave 13

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.

a

Hva vil Lars bruke programmet til, og hvorfor får han en feilmelding?

b

Foreslå en endring som gjør at programmet skriver ut alle verdiene som finnes.

c

Bestem asymptotene til grafen til gg.

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 bb svært nær aa blir det en tilnærming til f′(a)f'(a).
- 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.