R2 eksamenHøst 2025LK20

Matematikk R2 eksamen – høst 2025

ifingo
Norsk (Bokmål)

ifingo · Matematikk R2

Matematikk R2 - eksamen høst 2025 (LK20)

Løsningsforslag til eksamenssettet fra Utdanningsdirektoratet.

Del 1 - uten hjelpemidler

Del 1 / Oppgave 1Delvis integrasjon

Oppgave 1

Oppgave: Bestem integralet \(\displaystyle\int 4x\cos x\,dx\).
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi skal integrere et produkt av et polynom og en trigonometrisk funksjon. Delvis integrasjon reduserer polynomgraden.

  1. Velg delene
    Sett \(u=4x\) og \(dv=\cos x\,dx\).
  2. Finn du og v
    \[du=4\,dx,\qquad v=\sin x\]
  3. Bruk formelen
    \[\int u\,dv=uv-\int v\,du\]
  4. Sett inn
    \[\int4x\cos x\,dx=4x\sin x-\int4\sin x\,dx\]
  5. Integrer restleddet
    Fordi \(\int\sin x\,dx=-\cos x\), får vi \[4x\sin x+4\cos x+C.\]
  6. Kontroller ved derivasjon
    \(\frac d{dx}(4x\sin x+4\cos x)=4\sin x+4x\cos x-4\sin x=4x\cos x\).

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Integral(4x cos(x),x)
Resultat: \(4x\sin x+4\cos x\)
Tolkning: CAS gir en stamfunksjon. Konstanten C må legges til i det generelle svaret.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, sin, cos, integrate, diff, simplify
x = symbols('x', real=True)
integrand = 4*x*cos(x)
F = integrate(integrand, x)
expected = 4*x*sin(x) + 4*cos(x)
print("Integrand =", integrand)
print("Stamfunksjon fra SymPy =", F)
print("Forventet form =", expected)
print("Derivert tilbake =", simplify(diff(expected, x)))
print("Kontrollforskjell =", simplify(diff(expected, x) - integrand))
assert simplify(diff(expected, x) - integrand) == 0
Kjørt utskriftIntegrand = 4*x*cos(x)
Stamfunksjon fra SymPy = 4*x*sin(x) + 4*cos(x)
Forventet form = 4*x*sin(x) + 4*cos(x)
Derivert tilbake = 4*x*cos(x)
Kontrollforskjell = 0

Fasit: \(4x\sin x+4\cos x+C\).

Vanlig feil: Å glemme minusfortegnet i delvis integrasjon eller at integralet av sinus er minus cosinus.
Sensorpunkt: Sensor ser etter korrekt valg av u og dv, synlig bruk av formelen og integrasjonskonstant.
Del 1 / Oppgave 2Omdreiningsvolum

Oppgave 2

Oppgave: Funksjonen er \(f(x)=\sqrt{x+4}\), \(D_f=[0,10]\). Innsiden av en kopp dannes ved å dreie grafen 360 grader om x-aksen. Hvor mye kakao er det plass til?
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi skal beregne volumet av et omdreiningslegeme. Radiusen i et tverrsnitt er f(x), så skivearealet er pi ganger radiusen i andre.

  1. Skriv volumformelen
    \[V=\pi\int_0^{10}(f(x))^2\,dx\]
  2. Kvadrer radiusfunksjonen
    \[(\sqrt{x+4})^2=x+4\]
  3. Sett opp integralet
    \[V=\pi\int_0^{10}(x+4)\,dx\]
  4. Finn en antiderivert
    \[\int(x+4)dx=\frac{x^2}{2}+4x\]
  5. Sett inn grensene
    \[V=\pi\left(\frac{10^2}{2}+4\cdot10\right)=90\pi\]
  6. Tolk enheten
    Volumet er \(90\pi\text{ cm}^3\approx282{,}7\text{ cm}^3\). Siden \(1\text{ cm}^3=1\text{ mL}\), rommer koppen omtrent 283 mL.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Integral(pi (sqrt(x+4))^2,x,0,10)
Resultat: \(90\pi\approx282{,}743\)
Tolkning: GeoGebra bruker skivemetoden og returnerer volumet direkte.
Visualisering for Oppgave 2
Koppens radius er kvadratroten av x+4, og skivemetoden gir volumet 90π cm³.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, sqrt, pi, integrate, simplify, N
x = symbols('x', real=True)
f = sqrt(x + 4)
cross_section = pi*f**2
volume = integrate(cross_section, (x, 0, 10))
print("Radiusfunksjon f(x) =", f)
print("Tverrsnittsareal =", simplify(cross_section))
print("Eksakt volum =", volume, "cm^3")
print("Desimalvolum =", N(volume, 14), "cm^3")
print("Volum i milliliter =", N(volume, 14), "mL")
assert simplify(volume - 90*pi) == 0
Kjørt utskriftRadiusfunksjon f(x) = sqrt(x + 4)
Tverrsnittsareal = pi*(x + 4)
Eksakt volum = 90*pi cm^3
Desimalvolum = 282.74333882308 cm^3
Volum i milliliter = 282.74333882308 mL

Fasit: \(V=90\pi\text{ cm}^3\approx282{,}7\text{ mL}\).

Vanlig feil: Å integrere f(x) i stedet for pi ganger f(x) i andre, eller å glemme volum-enheten.
Sensorpunkt: Sensor ser etter riktig omdreiningsformel, korrekte grenser og en meningsfull enhetstolkning.
Del 1 / Oppgave 3aFortegnet areal

Oppgave 3a

Oppgave: For \(f(x)=x^3+x^2-2x\): Hvilket av de fire oppgitte integraluttrykkene gir arealet av det markerte området?
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi må se hvor grafen ligger over og under x-aksen. Et geometrisk areal skal alltid være positivt.

  1. Faktoriser funksjonen
    \[f(x)=x(x+2)(x-1)\]
  2. Finn nullpunktene
    Nullpunktene er \(x=-2\), \(x=0\) og \(x=1\).
  3. Bestem fortegn på første intervall
    På \((-2,0)\) ligger grafen over x-aksen, så integralet der er positivt.
  4. Bestem fortegn på andre intervall
    På \((0,1)\) ligger grafen under x-aksen, så integralet der er negativt.
  5. Gjør det negative bidraget positivt
    Derfor må integralet fra 0 til 1 trekkes fra.
  6. Velg uttrykket
    Riktig uttrykk er \[\int_{-2}^{0}f(x)\,dx-\int_0^1f(x)\,dx,\] altså alternativ 4.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Factor(x^3+x^2-2x)
Resultat: \(x(x+2)(x-1)\)
2Integral(f,x,-2,0)-Integral(f,x,0,1)
Resultat: positivt geometrisk areal
Tolkning: CAS viser nullpunktene og at det andre integralet har negativ verdi.
Visualisering for Oppgave 3a
Areal under x-aksen må trekkes fra det fortegnede integralet; nullintegrallikningen har to negative løsninger.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, factor, integrate, simplify
x = symbols('x', real=True)
f = x**3 + x**2 - 2*x
left = integrate(f, (x, -2, 0))
right_signed = integrate(f, (x, 0, 1))
area_expression = left - right_signed
print("f(x) =", f)
print("Faktorisert =", factor(f))
print("Integral fra -2 til 0 =", left)
print("Fortegnet integral fra 0 til 1 =", right_signed)
print("Geometrisk arealuttrykk = venstre - høyre fortegnet")
print("Verdien av uttrykket =", simplify(area_expression))
assert left > 0 and right_signed < 0
Kjørt utskriftf(x) = x**3 + x**2 - 2*x
Faktorisert = x*(x - 1)*(x + 2)
Integral fra -2 til 0 = 8/3
Fortegnet integral fra 0 til 1 = -5/12
Geometrisk arealuttrykk = venstre - høyre fortegnet
Verdien av uttrykket = 37/12

Fasit: Alternativ 4: \(\displaystyle\int_{-2}^{0}f(x)dx-\int_0^1f(x)dx\).

Vanlig feil: Å legge sammen de to fortegnede integralene. Det ville redusere arealet fordi det andre integralet er negativt.
Sensorpunkt: Sensor ser etter fortegnsanalyser eller en tydelig henvisning til grafens plassering over og under x-aksen.
Del 1 / Oppgave 3bAreal mellom graf og akse

Oppgave 3b

Oppgave: Regn ut arealet av det markerte området for \(f(x)=x^3+x^2-2x\).
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi bruker uttrykket fra del a og regner ut begge delarealene eksakt.

  1. Finn en antiderivert
    \[F(x)=\frac{x^4}{4}+\frac{x^3}{3}-x^2\]
  2. Regn ut venstre integral
    \[\int_{-2}^{0}f(x)dx=F(0)-F(-2)=\frac83\]
  3. Regn ut høyre fortegnede integral
    \[\int_0^1f(x)dx=F(1)-F(0)=-\frac5{12}\]
  4. Gjør høyre del positiv
    Arealet på \([0,1]\) er derfor \(5/12\).
  5. Legg sammen delarealene
    \[A=\frac83+\frac5{12}=\frac{32}{12}+\frac5{12}=\frac{37}{12}\]
  6. Oppgi desimalverdi som kontroll
    \(37/12\approx3{,}083\), som passer med størrelsen på det markerte området.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Integral(f,x,-2,0)
Resultat: \(8/3\)
2Integral(f,x,0,1)
Resultat: \(-5/12\)
Tolkning: CAS beregner de fortegnede integralene; vi tar absoluttverdien av delen under x-aksen.
Visualisering for Oppgave 3b
Areal under x-aksen må trekkes fra det fortegnede integralet; nullintegrallikningen har to negative løsninger.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, integrate, Rational, simplify, N
x = symbols('x', real=True)
f = x**3 + x**2 - 2*x
left = integrate(f, (x, -2, 0))
right_signed = integrate(f, (x, 0, 1))
area = left + abs(right_signed)
expected = Rational(37, 12)
print("Venstre delareal =", left)
print("Høyre fortegnede integral =", right_signed)
print("Høyre geometriske delareal =", abs(right_signed))
print("Totalt areal =", area)
print("Desimalverdi =", N(area, 12))
print("Kontroll =", simplify(area - expected))
assert simplify(area - expected) == 0
Kjørt utskriftVenstre delareal = 8/3
Høyre fortegnede integral = -5/12
Høyre geometriske delareal = 5/12
Totalt areal = 37/12
Desimalverdi = 3.08333333333
Kontroll = 0

Fasit: \(\displaystyle A=\frac{37}{12}\approx3{,}083\).

Vanlig feil: Å bruke det negative integralet fra 0 til 1 direkte som et areal.
Sensorpunkt: Sensor ser etter begge delintegralene og korrekt håndtering av delen under x-aksen.
Del 1 / Oppgave 3cIntegral med variabel nedre grense

Oppgave 3c

Oppgave: Finn og forklar de to løsningene \(a<0\) til \(\displaystyle\int_a^1 f(x)dx=0\), når \(f(x)=x^3+x^2-2x\).
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Likningen betyr at positivt og negativt fortegnet areal fra a til 1 skal oppheve hverandre. Vi kan både forklare grafisk og løse algebraisk.

  1. Bruk en antiderivert
    La \(F(x)=x^4/4+x^3/3-x^2\). Da er integralet \(F(1)-F(a)\).
  2. Sett integralet lik null
    \[F(1)-F(a)=0\quad\Longleftrightarrow\quad F(a)=F(1)=-\frac5{12}\]
  3. Samle til en polynomlikning
    Etter multiplikasjon med 12 får vi \[3a^4+4a^3-12a^2+5=0.\]
  4. Faktoriser
    \[3a^4+4a^3-12a^2+5=(a-1)^2(3a^2+10a+5)\]
  5. Finn de negative røttene
    \[a=\frac{-5\pm\sqrt{10}}3\]
  6. Tolk grafisk
    Røttene er omtrent \(-0{,}613\) og \(-2{,}721\). Den andre kan anslås til omtrent \(-2{,}7\) fra figuren. Når nedre grense flyttes langt til venstre, kommer et negativt areal som igjen kan balansere resten.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Factor(12*(Integral(f,x,a,1)))
Resultat: \(-(a-1)^2(3a^2+10a+5)\)
2Solve(Integral(f,x,a,1)=0,a)
Resultat: \(a=(-5\pm\sqrt{10})/3\), samt \(a=1\)
Tolkning: Betingelsen a<0 fjerner dobbeltroten a=1 og beholder de to negative løsningene.
Visualisering for Oppgave 3c
Areal under x-aksen må trekkes fra det fortegnede integralet; nullintegrallikningen har to negative løsninger.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, integrate, factor, solve, N, sqrt, simplify
x, a = symbols('x a', real=True)
f = x**3 + x**2 - 2*x
integral = integrate(f, (x, a, 1))
factored = factor(12*integral)
solutions = solve(integral, a)
negative = [s for s in solutions if s.is_real and s < 0]
expected = [(-5-sqrt(10))/3, (-5+sqrt(10))/3]
print("Integral som funksjon av a =", integral)
print("12 ganger integralet, faktorisert =", factored)
print("Alle algebraiske løsninger =", solutions)
print("Negative løsninger =", negative)
for root in negative:
    print("a =", root, "≈", N(root, 12))
    print("Residual =", simplify(integral.subs(a, root)))
assert set(negative) == set(expected)
Kjørt utskriftIntegral som funksjon av a = -a**4/4 - a**3/3 + a**2 - 5/12
12 ganger integralet, faktorisert = -(a - 1)**2*(3*a**2 + 10*a + 5)
Alle algebraiske løsninger = [1, -5/3 - sqrt(10)/3, -5/3 + sqrt(10)/3]
Negative løsninger = [-5/3 - sqrt(10)/3, -5/3 + sqrt(10)/3]
a = -5/3 - sqrt(10)/3 ≈ -2.72075922006
Residual = 0
a = -5/3 + sqrt(10)/3 ≈ -0.612574113277
Residual = 0

Fasit: \(\displaystyle a=\frac{-5-\sqrt{10}}3\approx-2{,}721\) eller \(\displaystyle a=\frac{-5+\sqrt{10}}3\approx-0{,}613\).

Vanlig feil: Å tro at kalkulatorverdien -0,6 er den eneste løsningen, eller å glemme betingelsen a<0.
Sensorpunkt: Sensor ser etter en grafisk forklaring på to balanseringer og et rimelig anslag, gjerne støttet av eksakt løsning.
Del 1 / Oppgave 4aTrigonometrisk likning

Oppgave 4a

Oppgave: Løs \(\sin x-\sqrt3\cos x=0\) for \(x\in[0,2\pi)\).
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi skal løse en lineær kombinasjon av sinus og cosinus. Siden cosinus ikke er null i løsningene, kan vi dele og bruke tangens.

  1. Flytt cosinusleddet
    \[\sin x=\sqrt3\cos x\]
  2. Del på cosinus
    \[\tan x=\sqrt3\]
  3. Finn referansevinkelen
    \(\tan(\pi/3)=\sqrt3\), så referansevinkelen er \(\pi/3\).
  4. Bruk tangensperioden
    Generell løsning er \[x=\frac\pi3+k\pi,\qquad k\in\mathbb Z.\]
  5. Velg løsninger i intervallet
    For \(k=0\) og \(k=1\) får vi \(x=\pi/3\) og \(x=4\pi/3\).
  6. Kontroller
    Begge vinklene har \(\sin x/\cos x=\sqrt3\), og ingen andre k-verdier ligger i intervallet.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Solutions(sin(x)-sqrt(3) cos(x)=0,x,0<=x<2pi)
Resultat: \(\{\pi/3,4\pi/3\}\)
Tolkning: CAS finner de to løsningene i én hel periode.
Visualisering for Oppgave 4a
Antall løsninger av sin x=a avhenger av om a ligger utenfor, på eller innenfor intervallet [-1,1].

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, sin, cos, sqrt, pi, solveset, Interval, simplify
x = symbols('x', real=True)
expr = sin(x) - sqrt(3)*cos(x)
domain = Interval.Ropen(0, 2*pi)
solutions = solveset(expr, x, domain=domain)
print("Likningsuttrykk =", expr)
print("Løsningsintervall =", domain)
print("Løsningsmengde =", solutions)
for root in sorted(solutions, key=lambda r: float(r)):
    print("x =", root, "gir residual", simplify(expr.subs(x, root)))
assert solutions == {pi/3, 4*pi/3}
Kjørt utskriftLikningsuttrykk = sin(x) - sqrt(3)*cos(x)
Løsningsintervall = Interval.Ropen(0, 2*pi)
Løsningsmengde = {pi/3, 4*pi/3}
x = pi/3 gir residual 0
x = 4*pi/3 gir residual 0

Fasit: \(x=\pi/3\) eller \(x=4\pi/3\).

Vanlig feil: Å bruke bare hovedverdien til arctan og dermed glemme løsningen én pi senere.
Sensorpunkt: Sensor ser etter generell tangensløsning eller en annen metode som gir begge løsningene.
Del 1 / Oppgave 4bParameter og antall løsninger

Oppgave 4b

Oppgave: For hvilke verdier av \(a\) har \((\sin x-\tfrac12)(\sin x-a)=0\), \(x\in[0,2\pi)\), henholdsvis to, tre og fire løsninger?
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Produktet er null når minst én faktor er null. Vi må telle unionen av løsningene til \(\sin x=1/2\) og \(\sin x=a\), og passe på overlapp.

  1. Løs den faste faktoren
    \(\sin x=1/2\) gir alltid de to løsningene \(x=\pi/6\) og \(x=5\pi/6\).
  2. Tell løsninger til sin x=a
    For \(|a|>1\) finnes ingen; for \(a=\pm1\) finnes én; for \(-1
  3. Finn overlappstilfellet
    Når \(a=1/2\), er de to løsningsmengdene identiske. Da får vi fortsatt bare to løsninger.
  4. To løsninger
    Dette skjer når \(|a|>1\), eller når \(a=1/2\).
  5. Tre løsninger
    Dette skjer når \(a=-1\) eller \(a=1\), fordi den andre faktoren da bidrar med nøyaktig én ny løsning.
  6. Fire løsninger
    Dette skjer for \(-1

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Solutions((sin(x)-1/2)(sin(x)-a)=0,x,0<=x<2pi)
Resultat: avhenger av parameteren \(a\)
2Intersect(Range(sin,0,2pi),{a})
Resultat: ingen, ett eller to skjæringspunkter
Tolkning: Grafisk tilsvarer oppgaven å telle skjæringer mellom sinusgrafen og de horisontale linjene y=1/2 og y=a.
Visualisering for Oppgave 4b
Antall løsninger av sin x=a avhenger av om a ligger utenfor, på eller innenfor intervallet [-1,1].

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
import numpy as np
from math import pi, asin

def sin_solution_count(a):
    if abs(a) > 1:
        return 0
    if abs(a) == 1:
        return 1
    return 2

def total_count(a):
    fixed = {round(pi/6, 12), round(5*pi/6, 12)}
    if abs(a) > 1:
        extra = set()
    elif a == 1:
        extra = {round(pi/2, 12)}
    elif a == -1:
        extra = {round(3*pi/2, 12)}
    else:
        alpha = asin(a)
        roots = [alpha % (2*pi), (pi-alpha) % (2*pi)]
        extra = {round(r, 12) for r in roots}
    return len(fixed | extra)

samples = [-2, -1, -0.5, 0, 0.5, 0.8, 1, 2]
for a in samples:
    print("a = %4.1f, løsninger fra sin(x)=a: %d, totalt: %d" %
          (a, sin_solution_count(a), total_count(a)))
assert total_count(2) == 2
assert total_count(0.5) == 2
assert total_count(1) == 3
assert total_count(0) == 4
Kjørt utskrifta = -2.0, løsninger fra sin(x)=a: 0, totalt: 2
a = -1.0, løsninger fra sin(x)=a: 1, totalt: 3
a = -0.5, løsninger fra sin(x)=a: 2, totalt: 4
a =  0.0, løsninger fra sin(x)=a: 2, totalt: 4
a =  0.5, løsninger fra sin(x)=a: 2, totalt: 2
a =  0.8, løsninger fra sin(x)=a: 2, totalt: 4
a =  1.0, løsninger fra sin(x)=a: 1, totalt: 3
a =  2.0, løsninger fra sin(x)=a: 0, totalt: 2

Fasit: To: \(|a|>1\) eller \(a=1/2\). Tre: \(a=\pm1\). Fire: \(-1

Vanlig feil: Å bare legge sammen 2 og antall løsninger til sin x=a uten å ta hensyn til overlapp ved a=1/2.
Sensorpunkt: Sensor ser etter korrekt klassifisering av randverdiene -1 og 1, samt særtilfellet a=1/2.

Del 1 / Oppgave 5 – påstand 1Tolkning av fartsgraf

Oppgave 5 – påstand 1

Oppgave: Påstand: «Vi kan tolke arealet under en fartsgraf som akselerasjon.» Avgør om påstanden er sann eller usann.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi skal bruke enhetsanalyse og sammenhengen mellom fart, strekning og akselerasjon.

  1. Se på aksene
    En fartsgraf har fart på y-aksen og tid på x-aksen.
  2. Tolk arealet
    Arealet har enhet \((\text{m/s})\cdot\text{s}=\text{m}\).
  3. Knytt til integral
    \[\int v(t)\,dt\] gir posisjonsendring, eller tilbakelagt strekning når farten er ikke-negativ.
  4. Finn akselerasjon på riktig måte
    Akselerasjonen er den deriverte av farten: \[a(t)=v\prime(t).\]
  5. Sammenlign enheter
    Akselerasjon har enhet \(\text{m/s}^2\), ikke meter.
  6. Konkluder
    Påstanden er usann. Arealet under fartsgrafen representerer strekning, ikke akselerasjon.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Integral(v(t),t,t1,t2)
Resultat: posisjonsendring
2Derivative(v(t),t)
Resultat: akselerasjon
Tolkning: CAS-kommandoene viser forskjellen mellom integrasjon og derivasjon av fartsfunksjonen.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, Function, integrate, diff
t, t1, t2 = symbols('t t1 t2', real=True)
v = Function('v')
displacement = integrate(v(t), (t, t1, t2))
acceleration = diff(v(t), t)
print("Areal under fartsgraf =", displacement)
print("Akselerasjon =", acceleration)
print("Enhet for areal: (m/s)*s = m")
print("Enhet for akselerasjon: m/s^2")
print("Påstanden er derfor usann.")
Kjørt utskriftAreal under fartsgraf = Integral(v(t), (t, t1, t2))
Akselerasjon = Derivative(v(t), t)
Enhet for areal: (m/s)*s = m
Enhet for akselerasjon: m/s^2
Påstanden er derfor usann.

Fasit: Påstanden er usann. Arealet gir strekning/posisjonsendring; stigningstallet gir akselerasjon.

Vanlig feil: Å blande sammen areal under grafen med stigningstallet til grafen.
Sensorpunkt: Sensor ser etter både riktig fysisk tolkning og gjerne enhetsargument.
Del 1 / Oppgave 5 – påstand 2Grader og radianer

Oppgave 5 – påstand 2

Oppgave: Påstand: «En vinkel på \(36^\circ\) er det samme som en vinkel på \(\pi/5\) radianer.» Avgør om påstanden er sann eller usann.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi skal omregne grader til radianer ved å bruke at 180 grader tilsvarer pi radianer.

  1. Skriv omregningsfaktoren
    \[1^\circ=\frac\pi{180}\text{ rad}\]
  2. Multipliser med 36
    \[36^\circ=36\cdot\frac\pi{180}\text{ rad}\]
  3. Forkort brøken
    \[\frac{36}{180}=\frac15\]
  4. Skriv resultatet
    \[36^\circ=\frac\pi5\text{ rad}\]
  5. Kontroller som del av en hel sirkel
    36 grader er en tidel av 360 grader, og \(\pi/5\) er en tidel av \(2\pi\).
  6. Konkluder
    Påstanden er sann.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
136 deg
Resultat: \(\pi/5\) rad
Tolkning: GeoGebra kan konvertere vinkelen direkte når gradtegnet brukes.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import pi, Rational, simplify, N
degrees = 36
radians = Rational(degrees, 180)*pi
expected = pi/5
print("Vinkel i grader =", degrees)
print("Vinkel i radianer =", radians)
print("Desimalverdi i radianer =", N(radians, 12))
print("Kontroll mot pi/5 =", simplify(radians - expected))
print("Påstanden er sann.")
assert simplify(radians - expected) == 0
Kjørt utskriftVinkel i grader = 36
Vinkel i radianer = pi/5
Desimalverdi i radianer = 0.628318530718
Kontroll mot pi/5 = 0
Påstanden er sann.

Fasit: Påstanden er sann: \(36^\circ=\pi/5\) radianer.

Vanlig feil: Å bruke 360 grader i nevneren i stedet for 180 grader ved omregning til radianer.
Sensorpunkt: Sensor ser etter korrekt omregningsfaktor og en tydelig konklusjon.
Del 1 / Oppgave 6aAritmetisk rekke

Oppgave 6a

Oppgave: Bestem summen av den aritmetiske rekken \(-3+0+3+\cdots+69\).
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi må finne antall ledd og deretter bruke sumformelen for en aritmetisk rekke.

  1. Identifiser data
    Første ledd er \(a_1=-3\), siste ledd er \(a_n=69\), og differansen er \(d=3\).
  2. Finn antall ledd
    \[69=-3+(n-1)\cdot3\]
  3. Løs for n
    \[72=3(n-1)\Rightarrow n-1=24\Rightarrow n=25\]
  4. Bruk sumformelen
    \[S_n=\frac n2(a_1+a_n)\]
  5. Sett inn
    \[S_{25}=\frac{25}{2}(-3+69)=\frac{25}{2}\cdot66\]
  6. Regn ut
    \[S_{25}=25\cdot33=825\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Sum(Sequence(-3+3(k-1),k,1,25))
Resultat: \(825\)
Tolkning: CAS lager de 25 leddene og summerer dem.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, summation, simplify
k = symbols('k', integer=True, positive=True)
term = -3 + 3*(k-1)
number_of_terms = (69-(-3))//3 + 1
series_sum = summation(term, (k, 1, number_of_terms))
formula_sum = number_of_terms*(-3+69)/2
print("Generelt ledd =", term)
print("Antall ledd =", number_of_terms)
print("Første ledd =", term.subs(k, 1))
print("Siste ledd =", term.subs(k, number_of_terms))
print("Sum fra SymPy =", series_sum)
print("Sumformel =", formula_sum)
print("Kontroll =", simplify(series_sum-formula_sum))
assert series_sum == 825
Kjørt utskriftGenerelt ledd = 3*k - 6
Antall ledd = 25
Første ledd = -3
Siste ledd = 69
Sum fra SymPy = 825
Sumformel = 825.0
Kontroll = 0

Fasit: \(825\).

Vanlig feil: Å telle 24 mellomrom som 24 ledd; rekken har 25 ledd.
Sensorpunkt: Sensor ser etter korrekt leddantall og riktig bruk av sumformelen.
Del 1 / Oppgave 6bKonvergensområde

Oppgave 6b

Oppgave: Bestem konvergensområdet til \(5+5(\tfrac12-x)+5(\tfrac12-x)^2+\cdots\).
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Rekken er geometrisk med første ledd 5 og kvotient q=1/2-x. En uendelig geometrisk rekke konvergerer nøyaktig når absoluttverdien av kvotienten er mindre enn 1.

  1. Identifiser kvotienten
    \[q=\frac12-x\]
  2. Skriv konvergenskravet
    \[|q|<1\]
  3. Sett inn q
    \[\left|\frac12-x\right|<1\]
  4. Skriv som dobbeltulikhet
    \[-1<\frac12-x<1\]
  5. Løs ulikheten
    Dette gir \[-\frac12
  6. Kontroller endepunktene
    Ved \(x=-1/2\) er q=1, og ved \(x=3/2\) er q=-1. Begge gir divergens, så intervallet er åpent.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Solve(abs(1/2-x)<1,x)
Resultat: \(-1/2
Tolkning: CAS løser absoluttverdiulikheten direkte.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, Abs, solve_univariate_inequality
x = symbols('x', real=True)
q = 1/2 - x
condition = Abs(q) < 1
solution = solve_univariate_inequality(condition, x)
print("Kvotient q =", q)
print("Konvergenskrav =", condition)
print("Løsningsmengde =", solution)
print("Ved x=-1/2 er q =", q.subs(x, -1/2))
print("Ved x=3/2 er q =", q.subs(x, 3/2))
assert bool(condition.subs(x, 0))
assert not bool(condition.subs(x, -1/2))
assert not bool(condition.subs(x, 3/2))
Kjørt utskriftKvotient q = 0.5 - x
Konvergenskrav = Abs(x - 0.5) < 1
Løsningsmengde = (-0.5 < x) & (x < 1.5)
Ved x=-1/2 er q = 1.00000000000000
Ved x=3/2 er q = -1.00000000000000

Fasit: \(\displaystyle-\frac12

Vanlig feil: Å bruke q<1 i stedet for |q|<1, eller å inkludere endepunktene.
Sensorpunkt: Sensor ser etter absoluttverdikravet og korrekt åpent intervall.

Del 1 / Oppgave 6cUendelig geometrisk sum

Oppgave 6c

Oppgave: En ball faller fra 2 m og spretter hver gang opp til 75 % av forrige fallhøyde. Hvor langt beveger ballen seg totalt?
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Første fall skjer bare én gang. Hver senere spretthøyde gjennomløpes både opp og ned.

  1. Første fall
    Ballen beveger seg først 2 meter ned.
  2. Første spretthøyde
    \[2\cdot0{,}75=1{,}5\text{ m}\]
  3. Skriv summen av spretthøydene
    \[1{,}5+1{,}5\cdot0{,}75+1{,}5\cdot0{,}75^2+\cdots\]
  4. Finn den uendelige summen
    \[S=\frac{1{,}5}{1-0{,}75}=6\]
  5. Ta med både opp- og nedbevegelse
    Sprettebevegelsen bidrar med \(2S=12\) meter.
  6. Legg til første fall
    \[L=2+12=14\text{ m}\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
12+2*Sum(2*(3/4)^n,n,1,infinity)
Resultat: \(14\)
Tolkning: CAS summerer alle opp- og nedturene etter det første fallet.
Visualisering for Oppgave 6c
Spretthøydene er geometriske, og total reiselengde konvergerer mot 14 meter.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, summation, oo, Rational, simplify
n = symbols('n', integer=True, positive=True)
ratio = Rational(3, 4)
initial_height = Rational(2)
rebound_height = initial_height*ratio
sum_rebound_heights = summation(initial_height*ratio**n, (n, 1, oo))
total_distance = initial_height + 2*sum_rebound_heights
print("Første fall =", initial_height, "m")
print("Første spretthøyde =", rebound_height, "m")
print("Sum av alle spretthøyder =", sum_rebound_heights, "m")
print("Opp og ned etter første treff =", 2*sum_rebound_heights, "m")
print("Total bevegelse =", total_distance, "m")
print("Kontroll =", simplify(total_distance-14))
assert total_distance == 14
Kjørt utskriftFørste fall = 2 m
Første spretthøyde = 3/2 m
Sum av alle spretthøyder = 6 m
Opp og ned etter første treff = 12 m
Total bevegelse = 14 m
Kontroll = 0

Fasit: \(14\text{ m}\).

Vanlig feil: Å doble også det første fallet, eller å telle bare oppbevegelsene etter sprettene.
Sensorpunkt: Sensor ser etter korrekt skille mellom første fall og de senere opp-og-ned-bevegelsene.
Del 1 / Oppgave 7aKuleflate

Oppgave 7a

Oppgave: Kuleflaten \(S\) er gitt ved \(x^2+y^2+z^2-4x+2z=4\). Bestem sentrum og radius.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi skal fullføre kvadratene i x- og z-leddene og skrive likningen på standardformen for en kule.

  1. Samle x-leddene
    \[x^2-4x=(x-2)^2-4\]
  2. Samle z-leddene
    \[z^2+2z=(z+1)^2-1\]
  3. Sett inn i likningen
    \[(x-2)^2-4+y^2+(z+1)^2-1=4\]
  4. Flytt konstantene
    \[(x-2)^2+y^2+(z+1)^2=9\]
  5. Les av sentrum
    Standardformen er \((x-a)^2+(y-b)^2+(z-c)^2=r^2\), så sentrum er \((2,0,-1)\).
  6. Les av radius
    \(r^2=9\), altså \(r=3\).

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1CompleteSquare(x^2+y^2+z^2-4x+2z=4)
Resultat: \((x-2)^2+y^2+(z+1)^2=9\)
Tolkning: CAS omskriver til standardform, slik at sentrum og radius kan leses av.
Visualisering for Oppgave 7a
Tangentplanet står normalt på radiusen til berøringspunktet, mens planet beta går gjennom kuleflaten.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, expand, simplify
x, y, z = symbols('x y z', real=True)
original = x**2 + y**2 + z**2 - 4*x + 2*z - 4
standard = (x-2)**2 + y**2 + (z+1)**2 - 9
print("Original likning skrevet som venstreside =", original)
print("Standardform skrevet som venstreside =", standard)
print("Utvidet standardform =", expand(standard))
print("Forskjell =", simplify(original-standard))
print("Sentrum = (2, 0, -1)")
print("Radius = 3")
assert simplify(original-standard) == 0
Kjørt utskriftOriginal likning skrevet som venstreside = x**2 - 4*x + y**2 + z**2 + 2*z - 4
Standardform skrevet som venstreside = y**2 + (x - 2)**2 + (z + 1)**2 - 9
Utvidet standardform = x**2 - 4*x + y**2 + z**2 + 2*z - 4
Forskjell = 0
Sentrum = (2, 0, -1)
Radius = 3

Fasit: Sentrum \((2,0,-1)\) og radius \(3\).

Vanlig feil: Å lese fortegnet i z-koordinaten feil: leddet er (z+1)^2, så sentrum har z=-1.
Sensorpunkt: Sensor ser etter fullføring av kvadrat og korrekt standardform.
Del 1 / Oppgave 7bTangentplan til kule

Oppgave 7b

Oppgave: Kulen \(K\) har sentrum \((1,-1,3)\) og radius 2. Planet \(\alpha\) tangerer kulen i \(P(3,-1,3)\). Bestem en likning for \(\alpha\).
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Radiusen fra sentrum til tangeringspunktet står normalt på tangentplanet. Denne radiusvektoren kan derfor brukes som normalvektor.

  1. Finn radiusvektoren
    \[\overrightarrow{CP}=(3-1,-1-(-1),3-3)=(2,0,0)\]
  2. Velg en normalvektor
    Vi kan bruke \(\vec n=(1,0,0)\), som er parallell med radiusvektoren.
  3. Bruk punkt-normal-form
    \[\vec n\cdot((x,y,z)-P)=0\]
  4. Sett inn
    \[(1,0,0)\cdot(x-3,y+1,z-3)=0\]
  5. Forenkle
    \[x-3=0\]
  6. Kontroller avstanden til sentrum
    Avstanden fra \((1,-1,3)\) til planet \(x=3\) er 2, lik kulens radius, så planet er tangent.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Plane((3,-1,3),(1,0,0))
Resultat: \(x=3\)
2Distance((1,-1,3),x=3)
Resultat: \(2\)
Tolkning: GeoGebra bruker tangeringspunktet og normalvektoren og bekrefter tangering ved avstand lik radius.
Visualisering for Oppgave 7b
Tangentplanet står normalt på radiusen til berøringspunktet, mens planet beta går gjennom kuleflaten.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import Matrix, symbols, simplify
x, y, z = symbols('x y z', real=True)
C = Matrix([1, -1, 3])
P = Matrix([3, -1, 3])
radius_vector = P-C
normal = Matrix([1,0,0])
point = Matrix([x,y,z])
plane_expression = simplify(normal.dot(point-P))
distance = abs(1-3)
print("Sentrum C =", tuple(C))
print("Tangeringspunkt P =", tuple(P))
print("Radiusvektor CP =", tuple(radius_vector))
print("Valgt normalvektor =", tuple(normal))
print("Planuttrykk =", plane_expression, "= 0")
print("Avstand fra sentrum til planet =", distance)
assert radius_vector.cross(normal) == Matrix([0,0,0])
assert distance == 2
Kjørt utskriftSentrum C = (1, -1, 3)
Tangeringspunkt P = (3, -1, 3)
Radiusvektor CP = (2, 0, 0)
Valgt normalvektor = (1, 0, 0)
Planuttrykk = x - 3 = 0
Avstand fra sentrum til planet = 2

Fasit: \(\alpha: x=3\).

Vanlig feil: Å bruke punktet P som normalvektor i stedet for radiusvektoren fra sentrum til P.
Sensorpunkt: Sensor ser etter at radiusen i tangeringspunktet brukes som normalvektor.
Del 1 / Oppgave 7cAvstand fra punkt til plan

Oppgave 7c

Oppgave: Avgjør om planet \(\beta:3x+y-2z+1=0\) skjærer gjennom kulen \(K\) med sentrum \((1,-1,3)\) og radius 2.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Et plan skjærer en kule når avstanden fra kulens sentrum til planet er mindre enn radiusen.

  1. Skriv avstandsformelen
    For planet \(Ax+By+Cz+D=0\) er \[d=\frac{|Ax_0+By_0+Cz_0+D|}{\sqrt{A^2+B^2+C^2}}.\]
  2. Sett inn sentrum
    \[d=\frac{|3\cdot1+1\cdot(-1)-2\cdot3+1|}{\sqrt{3^2+1^2+(-2)^2}}\]
  3. Regn ut telleren
    \[|3-1-6+1|=|-3|=3\]
  4. Regn ut nevneren
    \[\sqrt{9+1+4}=\sqrt{14}\]
  5. Sammenlign med radius
    \[d=\frac3{\sqrt{14}}\approx0{,}802<2\]
  6. Konkluder
    Planet går gjennom kulens indre og skjærer derfor kuleflaten i en sirkel.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Distance((1,-1,3),3x+y-2z+1=0)
Resultat: \(3/\sqrt{14}\approx0{,}802\)
Tolkning: Siden avstanden er mindre enn radiusen 2, blir skjæringen en sirkel.
Visualisering for Oppgave 7c
Tangentplanet står normalt på radiusen til berøringspunktet, mens planet beta går gjennom kuleflaten.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import sqrt, simplify, N
center = (1, -1, 3)
A, B, C, D = 3, 1, -2, 1
numerator = abs(A*center[0] + B*center[1] + C*center[2] + D)
denominator = sqrt(A**2+B**2+C**2)
distance = simplify(numerator/denominator)
radius = 2
print("Teller i avstandsformelen =", numerator)
print("Nevner =", denominator)
print("Eksakt avstand =", distance)
print("Desimalavstand =", N(distance, 12))
print("Radius =", radius)
print("Avstand < radius =", bool(distance < radius))
assert distance < radius
Kjørt utskriftTeller i avstandsformelen = 3
Nevner = sqrt(14)
Eksakt avstand = 3*sqrt(14)/14
Desimalavstand = 0.801783725737
Radius = 2
Avstand < radius = True

Fasit: Ja. Avstanden er \(3/\sqrt{14}<2\), så planet skjærer gjennom kulen.

Vanlig feil: Å sammenligne den ikke-normaliserte verdien 3 direkte med radiusen, uten å dele på normalvektorens lengde.
Sensorpunkt: Sensor ser etter korrekt punkt-plan-avstand og riktig geometrisk konklusjon.
Del 1 / Oppgave 8Matematisk induksjon

Oppgave 8

Oppgave: Vis ved induksjon at \(1+4+4^2+\cdots+4^n=(4^{n+1}-1)/3\) for \(n\ge0\).
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Et induksjonsbevis består av et startsteg og et induksjonssteg der vi antar formelen for n=k og viser den for n=k+1.

  1. Startsteg n=0
    Venstre side er \(1\). Høyre side er \((4^1-1)/3=1\). Formelen stemmer for \(n=0\).
  2. Induksjonshypotese
    Anta at \[1+4+\cdots+4^k=\frac{4^{k+1}-1}{3}.\]
  3. Skriv summen for k+1
    \[1+4+\cdots+4^k+4^{k+1}\]
  4. Bruk hypotesen
    \[\frac{4^{k+1}-1}{3}+4^{k+1}\]
  5. Forenkle
    \[\frac{4^{k+1}-1+3\cdot4^{k+1}}3=\frac{4\cdot4^{k+1}-1}{3}=\frac{4^{k+2}-1}{3}\]
  6. Konkluder
    Dette er formelen med n=k+1. Dermed gjelder den for alle heltall \(n\ge0\).

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Simplify((4^(k+1)-1)/3+4^(k+1))
Resultat: \((4^{k+2}-1)/3\)
Tolkning: CAS kontrollerer algebraen i induksjonssteget; selve logikken må forklares skriftlig.
Visualisering for Oppgave 8
Numeriske verdier støtter formelen, mens induksjonsbeviset etablerer den for alle n≥0.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, summation, simplify
n, k = symbols('n k', integer=True, nonnegative=True)
base_left = summation(4**n, (n, 0, 0))
base_right = (4**(0+1)-1)/3
hypothesis_rhs = (4**(k+1)-1)/3
next_left_using_hypothesis = hypothesis_rhs + 4**(k+1)
next_target = (4**(k+2)-1)/3
print("Startsteg, venstre side =", base_left)
print("Startsteg, høyre side =", base_right)
print("Uttrykk i induksjonssteget =", next_left_using_hypothesis)
print("Mål for n=k+1 =", next_target)
print("Symbolsk differanse =", simplify(next_left_using_hypothesis-next_target))
for value in range(0,6):
    direct = sum(4**j for j in range(value+1))
    formula = (4**(value+1)-1)//3
    print("n=%d: direkte=%d, formel=%d" % (value,direct,formula))
assert simplify(next_left_using_hypothesis-next_target) == 0
Kjørt utskriftStartsteg, venstre side = 1
Startsteg, høyre side = 1.0
Uttrykk i induksjonssteget = 4*4**(k + 1)/3 - 1/3
Mål for n=k+1 = 4**(k + 2)/3 - 1/3
Symbolsk differanse = 0
n=0: direkte=1, formel=1
n=1: direkte=5, formel=5
n=2: direkte=21, formel=21
n=3: direkte=85, formel=85
n=4: direkte=341, formel=341
n=5: direkte=1365, formel=1365

Fasit: Formelen er bevist ved induksjon for alle \(n\ge0\).

Vanlig feil: Å kontrollere noen enkelttilfeller og kalle det et induksjonsbevis, eller å glemme startsteget.
Sensorpunkt: Sensor ser etter eksplisitt startsteg, induksjonshypotese og korrekt overgang fra k til k+1.

Del 2 - med hjelpemidler

Del 2 / Oppgave 1aFart i rommet

Oppgave 1a

Oppgave: Miniubåtens posisjon er \(\vec r(t)=[6t,7t,-250-5t+0{,}1t^2]\), \(t\in[0,60]\). Bestem farten etter 2 sekunder.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Fartsvektoren er den deriverte av posisjonsvektoren. Selve farten er lengden av denne vektoren.

  1. Deriver hver koordinat
    \[\vec v(t)=\vec r\prime(t)=[6,7,-5+0{,}2t]\]
  2. Sett inn t=2
    \[\vec v(2)=[6,7,-4{,}6]\]
  3. Bruk lengdeformelen
    \[|\vec v(2)|=\sqrt{6^2+7^2+(-4{,}6)^2}\]
  4. Regn ut under roten
    \[36+49+21{,}16=106{,}16\]
  5. Ta kvadratroten
    \[|\vec v(2)|=\sqrt{106{,}16}\approx10{,}303\]
  6. Oppgi enhet
    Farten er omtrent \(10{,}3\text{ m/s}\).

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1r(t)=(6t,7t,-250-5t+0.1t^2)
Resultat: posisjonsvektor
2Length(Derivative(r,2))
Resultat: \(\sqrt{106{,}16}\approx10{,}303\)
Tolkning: GeoGebra deriverer romkurven og beregner lengden av tangentvektoren ved t=2.
Visualisering for Oppgave 1a
Minste senteravstand er omtrent 39,83 m, klart større enn en konservativ kollisjonsgrense på omtrent 20,12 m.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, Matrix, diff, sqrt, Rational, N, simplify
t = symbols('t', real=True)
r = Matrix([6*t, 7*t, -250-5*t+Rational(1,10)*t**2])
v = r.diff(t)
v2 = v.subs(t, 2)
speed = sqrt(v2.dot(v2))
expected = sqrt(2654)/5
print("Posisjon r(t) =", tuple(r))
print("Fartsvektor v(t) =", tuple(v))
print("v(2) =", tuple(v2))
print("Kvadrert fart =", simplify(v2.dot(v2)))
print("Eksakt fart =", speed, "m/s")
print("Desimalfart =", N(speed, 14), "m/s")
print("Kontroll =", simplify(speed-expected))
assert simplify(speed-expected) == 0
Kjørt utskriftPosisjon r(t) = (6*t, 7*t, t**2/10 - 5*t - 250)
Fartsvektor v(t) = (6, 7, t/5 - 5)
v(2) = (6, 7, -23/5)
Kvadrert fart = 2654/25
Eksakt fart = sqrt(2654)/5 m/s
Desimalfart = 10.303397497913 m/s
Kontroll = 0

Fasit: \(\displaystyle |\vec v(2)|=\sqrt{106{,}16}\approx10{,}3\text{ m/s}\).

Vanlig feil: Å oppgi fartsvektoren som svar når oppgaven spør etter den skalariske farten.
Sensorpunkt: Sensor ser etter derivasjon av alle tre koordinatene og lengden av vektoren.
Del 2 / Oppgave 1bEkstremalpunkt for høyde

Oppgave 1b

Oppgave: Hvor langt under havoverflaten er miniubåten på det dypeste?
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Dybden bestemmes av z-koordinaten. Vi skal finne minimumsverdien til den oppadgående andregradsfunksjonen på intervallet.

  1. Skriv z-funksjonen
    \[z(t)=-250-5t+0{,}1t^2\]
  2. Deriver
    \[z\prime(t)=-5+0{,}2t\]
  3. Finn kritisk tidspunkt
    \[-5+0{,}2t=0\Rightarrow t=25\]
  4. Kontroller at det er et minimum
    \(z\prime\prime(t)=0{,}2>0\), og t=25 ligger i intervallet [0,60].
  5. Beregn z-verdien
    \[z(25)=-250-125+0{,}1\cdot625=-312{,}5\]
  6. Tolk fortegnet
    Negativ z betyr under havoverflaten. Den største dybden er derfor \(312{,}5\) meter.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Extremum(-250-5t+0.1t^2)
Resultat: \((25,-312{,}5)\)
Tolkning: GeoGebra finner bunnpunktet til parabelen for z-koordinaten.
Visualisering for Oppgave 1b
Minste senteravstand er omtrent 39,83 m, klart større enn en konservativ kollisjonsgrense på omtrent 20,12 m.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, Rational, diff, solve, N
t = symbols('t', real=True)
z = -250 - 5*t + Rational(1,10)*t**2
z1 = diff(z, t)
z2 = diff(z, t, 2)
critical = solve(z1, t)[0]
minimum_z = z.subs(t, critical)
print("z(t) =", z)
print("z'(t) =", z1)
print("z''(t) =", z2)
print("Kritisk tidspunkt =", critical, "s")
print("z(25) =", minimum_z, "m")
print("Dybde =", -minimum_z, "m")
print("Endepunkter: z(0) =", z.subs(t,0), ", z(60) =", z.subs(t,60))
assert critical == 25 and minimum_z == Rational(-625,2)
Kjørt utskriftz(t) = t**2/10 - 5*t - 250
z'(t) = t/5 - 5
z''(t) = 1/5
Kritisk tidspunkt = 25 s
z(25) = -625/2 m
Dybde = 625/2 m
Endepunkter: z(0) = -250 , z(60) = -190

Fasit: Miniubåten er på det dypeste \(312{,}5\) meter under havoverflaten, ved \(t=25\) s.

Vanlig feil: Å svare -312,5 meter som en negativ dybde, eller å ikke kontrollere intervallet.
Sensorpunkt: Sensor ser etter minimering av z-koordinaten og korrekt fysisk tolkning.
Del 2 / Oppgave 1cMinste avstand mellom bevegelige objekter

Oppgave 1c

Oppgave: Fiskestimets sentrum er \(\vec s(t)=[40+2t,60+2t,-250]\), radiusen er 15 m, og miniubåten er 4 m bred, 5 m høy og 8 m lang. Vurder om de kolliderer.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi sammenligner minste avstand mellom sentrene med en konservativ grense: fiskens radius pluss halvparten av miniubåtens romdiagonal.

  1. Finn differansevektoren
    \[\vec r(t)-\vec s(t)=[4t-40,5t-60,0{,}1t^2-5t]\]
  2. Skriv kvadrert senteravstand
    \[d^2(t)=(4t-40)^2+(5t-60)^2+(0{,}1t^2-5t)^2\]
  3. Minimer på intervallet
    Numerisk løsning av \((d^2)\prime(t)=0\) gir \(t\approx8{,}391\) s.
  4. Beregn minste avstand
    \[d_{\min}\approx39{,}825\text{ m}\]
  5. Lag en konservativ kollisjonsradius
    Miniubåtens halve romdiagonal er \[r_u=\frac12\sqrt{4^2+5^2+8^2}=\frac{\sqrt{105}}2\approx5{,}123.\] Dermed er grensen \(15+r_u\approx20{,}123\) m.
  6. Vurder kollisjon
    Fordi \(39{,}825>20{,}123\), er selv en omsluttende kule rundt miniubåten langt fra fiskestimen. Kollisjon skjer ikke.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1d2(t)=(4t-40)^2+(5t-60)^2+(0.1t^2-5t)^2
Resultat: kvadrert senteravstand
2NSolve(Derivative(d2(t))=0,t)
Resultat: \(t\approx8{,}3908\)
3sqrt(d2(8.390806957))
Resultat: \(39{,}8251\)
Tolkning: Minimering av kvadrert avstand er enklere enn å minimere selve kvadratroten og gir samme tidspunkt.
Visualisering for Oppgave 1c
Minste senteravstand er omtrent 39,83 m, klart større enn en konservativ kollisjonsgrense på omtrent 20,12 m.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, Rational, diff, nroots, sqrt, N
from scipy.optimize import minimize_scalar
import math

t = symbols('t', real=True)
d2 = (4*t-40)**2 + (5*t-60)**2 + (Rational(1,10)*t**2-5*t)**2
derivative = diff(d2, t)
real_critical = [complex(r) for r in nroots(derivative, maxsteps=200)
                 if abs(complex(r).imag) < 1e-10]

def d2_numeric(value):
    return (4*value-40)**2 + (5*value-60)**2 + (0.1*value**2-5*value)**2
result = minimize_scalar(d2_numeric, bounds=(0,60), method='bounded')
minimum_time = result.x
minimum_distance = math.sqrt(result.fun)
submarine_radius = math.sqrt(4**2+5**2+8**2)/2
collision_limit = 15 + submarine_radius
print("d^2(t) =", d2.expand())
print("(d^2)'(t) =", derivative.factor())
print("Reelle kritiske røtter =", real_critical)
print("Numerisk minimumstid = %.12f s" % minimum_time)
print("Minste senteravstand = %.12f m" % minimum_distance)
print("Halv romdiagonal for miniubåten = %.12f m" % submarine_radius)
print("Konservativ kollisjonsgrense = %.12f m" % collision_limit)
print("Sikkerhetsmargin = %.12f m" % (minimum_distance-collision_limit))
print("Kollisjon =", minimum_distance <= collision_limit)
assert minimum_distance > collision_limit
Kjørt utskriftd^2(t) = t**4/100 - t**3 + 66*t**2 - 920*t + 5200
(d^2)'(t) = (t**3 - 75*t**2 + 3300*t - 23000)/25
Reelle kritiske røtter = [(8.390806957239162+0j)]
Numerisk minimumstid = 8.390808198443 s
Minste senteravstand = 39.825109279033 m
Halv romdiagonal for miniubåten = 5.123475382980 m
Konservativ kollisjonsgrense = 20.123475382980 m
Sikkerhetsmargin = 19.701633896053 m
Kollisjon = False

Fasit: Nei. Minste senteravstand er ca. \(39{,}83\) m, mens en konservativ kollisjonsgrense er ca. \(20{,}12\) m.

Vanlig feil: Å sammenligne senteravstanden bare med fiskestimets radius og ignorere miniubåtens størrelse, eller å sjekke bare ett tilfeldig tidspunkt.
Sensorpunkt: Sensor ser etter en begrunnet avstandsmodell, minimering over hele tidsintervallet og vurdering av objektenes utstrekning.
Del 2 / Oppgave 2aSinusregresjon

Oppgave 2a

Oppgave: Tabellen gir målt spenning U ved åtte tidspunkter mellom 0,0020 s og 0,0200 s. Bestem en modell \(U(t)\) for spenningen.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Målingene svinger periodisk rundt 0 og passer til en sinusmodell med omtrent 50 perioder per sekund. Vi bruker sinusregresjon med amplitude, vinkelfrekvens, fase og likevektsledd.

  1. Velg modelltype
    Vi bruker \[U(t)=A\sin(\omega t+\varphi)+D.\]
  2. Utfør sinusregresjon
    Regresjon på de åtte punktene gir omtrent \(A=323{,}473\), \(\omega=314{,}812\), \(\varphi=-0{,}002593\) og \(D=-0{,}912\).
  3. Skriv modellen
    \[U(t)\approx323{,}473\sin(314{,}812t-0{,}002593)-0{,}912.\]
  4. Finn perioden
    \[T=\frac{2\pi}{\omega}\approx0{,}0199585\text{ s}\]
  5. Kontroller frekvensen
    \(1/T\approx50{,}104\) Hz, nær forventet nettverksfrekvens 50 Hz.
  6. Vurder tilpasningen
    Rotmiddelkvadratfeilen er omtrent 1,49 V, svært liten sammenlignet med amplituden over 323 V.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1FitSin({(0.002,189),(0.005,323),(0.007,259),(0.010,-2.12),(0.013,-261),(0.015,-327),(0.018,-189),(0.020,3.52)})
Resultat: \(U(t)\approx323{,}47\sin(314{,}81t-0{,}00259)-0{,}91\)
Tolkning: Sinusregresjonen bestemmer parametrene fra målepunktene og gir en periode nær 0,020 s.
Visualisering for Oppgave 2a
Sinusregresjonen følger målepunktene tett og gir effektivverdi nær 230 V.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
import numpy as np
from scipy.optimize import curve_fit

seconds = np.array([0.0020, 0.0050, 0.0070, 0.0100,
                    0.0130, 0.0150, 0.0180, 0.0200])
voltage = np.array([189.0, 323.0, 259.0, -2.12,
                    -261.0, -327.0, -189.0, 3.52])

def model(t, amplitude, omega, phase, offset):
    return amplitude*np.sin(omega*t + phase) + offset

initial_guess = [327.0, 100*np.pi, 0.0, 0.0]
parameters, covariance = curve_fit(model, seconds, voltage,
                                   p0=initial_guess, maxfev=100000)
amplitude, omega, phase, offset = parameters
predicted = model(seconds, *parameters)
residuals = voltage - predicted
rmse = np.sqrt(np.mean(residuals**2))
period = 2*np.pi/abs(omega)
frequency = 1/period
print("Amplitude A = %.12f V" % amplitude)
print("Vinkelfrekvens omega = %.12f rad/s" % omega)
print("Fase phi = %.12f rad" % phase)
print("Likevektsledd D = %.12f V" % offset)
print("Periode T = %.12f s" % period)
print("Frekvens = %.12f Hz" % frequency)
print("RMSE = %.12f V" % rmse)
print("\nMålt og modellert spenning:")
for t, measured, fitted in zip(seconds, voltage, predicted):
    print("t=%.4f  målt=%8.3f  modell=%10.6f  residual=%9.6f" %
          (t, measured, fitted, measured-fitted))
assert 320 < amplitude < 327
assert 0.019 < period < 0.021
assert rmse < 2.0
Kjørt utskriftAmplitude A = 323.473448427257 V
Vinkelfrekvens omega = 314.812465097724 rad/s
Fase phi = -0.002593095709 rad
Likevektsledd D = -0.912098449405 V
Periode T = 0.019958502295 s
Frekvens = 50.103959967248 Hz
RMSE = 1.488038157013 V

Målt og modellert spenning:
t=0.0020  målt= 189.000  modell=188.883944  residual= 0.116056
t=0.0050  målt= 323.000  modell=322.561277  residual= 0.438723
t=0.0070  målt= 259.000  modell=260.406576  residual=-1.406576
t=0.0100  målt=  -2.120  modell= -2.186225  residual= 0.066225
t=0.0130  målt=-261.000  modell=-263.724556  residual= 2.724556
t=0.0150  målt=-327.000  modell=-324.377151  residual=-2.622849
t=0.0180  målt=-189.000  modell=-188.638762  residual=-0.361238
t=0.0200  målt=   3.520  modell=  2.474897  residual= 1.045103

Fasit: En god modell er \(U(t)\approx323{,}473\sin(314{,}812t-0{,}002593)-0{,}912\).

Vanlig feil: Å bruke grader i sinusfunksjonen når regresjonsverktøyet bruker radianer, eller å glemme likevektsleddet.
Sensorpunkt: Sensor ser etter dokumentert sinusregresjon, en tydelig modell med variabel og en vurdering av tilpasningen.
Del 2 / Oppgave 2bLøse sinusmodell numerisk

Oppgave 2b

Oppgave: På hvilke tidspunkter i de første 0,0200 sekundene er spenningen 230 V ifølge modellen?
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi setter sinusmodellen lik 230 og finner alle røtter i det oppgitte tidsintervallet.

  1. Sett opp likningen
    \[323{,}473\sin(314{,}812t-0{,}002593)-0{,}912=230\]
  2. Isoler sinusverdien
    \[\sin(314{,}812t-0{,}002593)\approx\frac{230+0{,}912}{323{,}473}\approx0{,}7139\]
  3. Finn første løsning numerisk
    Den stigende grenen gir \(t\approx0{,}0025335\) s.
  4. Finn andre løsning i samme periode
    Den synkende grenen gir \(t\approx0{,}0074622\) s.
  5. Kontroller intervallet
    Begge ligger mellom 0 og 0,0200 s. Neste tilsvarende løsninger kommer én periode senere og ligger utenfor intervallet.
  6. Kontroller ved innsetting
    Modellen gir 230,000 V ved begge tidspunktene, innen numerisk presisjon.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1NSolve(U(t)=230,0<=t<=0.0200)
Resultat: \(t\approx0{,}0025335\) og \(t\approx0{,}0074622\)
Tolkning: GeoGebra finner begge skjæringspunktene mellom sinuskurven og linjen U=230 i første periode.
Visualisering for Oppgave 2b
Sinusregresjonen følger målepunktene tett og gir effektivverdi nær 230 V.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
import numpy as np
from scipy.optimize import curve_fit, brentq

seconds = np.array([0.0020,0.0050,0.0070,0.0100,
                    0.0130,0.0150,0.0180,0.0200])
voltage = np.array([189.0,323.0,259.0,-2.12,-261.0,-327.0,-189.0,3.52])

def model(t, A, omega, phase, D):
    return A*np.sin(omega*t+phase)+D

parameters, _ = curve_fit(model, seconds, voltage,
                          p0=[327,100*np.pi,0,0], maxfev=100000)

def equation(t):
    return model(t,*parameters)-230

grid = np.linspace(0,0.0200,20001)
roots = []
for left, right in zip(grid[:-1],grid[1:]):
    if equation(left)*equation(right) < 0:
        root = brentq(equation,left,right)
        if not roots or abs(root-roots[-1]) > 1e-9:
            roots.append(root)
print("Regresjonsparametere =", parameters)
print("Antall røtter i [0,0.0200] =", len(roots))
for index, root in enumerate(roots,1):
    print("t_%d = %.12f s" % (index,root))
    print("U(t_%d) = %.12f V" % (index,model(root,*parameters)))
    print("Residual = %.12e V" % equation(root))
assert len(roots) == 2
assert all(0 <= root <= 0.0200 for root in roots)
Kjørt utskriftRegresjonsparametere = [ 3.23473448e+02  3.14812465e+02 -2.59309571e-03 -9.12098449e-01]
Antall røtter i [0,0.0200] = 2
t_1 = 0.002533496303 s
U(t_1) = 230.000000000228 V
Residual = 2.277715793753e-10 V
t_2 = 0.007462228752 s
U(t_2) = 230.000000000000 V
Residual = -8.526512829121e-14 V

Fasit: \(t\approx0{,}0025335\text{ s}\) og \(t\approx0{,}0074622\text{ s}\).

Vanlig feil: Å gi bare én arcsin-løsning og glemme den andre vinkelen med samme sinusverdi.
Sensorpunkt: Sensor ser etter begge løsninger i intervallet og dokumentasjon av digital løsning.
Del 2 / Oppgave 2cEffektivverdi (RMS)

Oppgave 2c

Oppgave: Bruk modellen og \(U_{\mathrm{eff}}=\sqrt{\frac1T\int_0^T(U(t))^2dt}\) til å avgjøre om målingene kan være riktige når nettspenningen oppgis til 230 V.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Oppgitt nettspenning er effektivverdien, ikke maksimalverdien. Vi må derfor beregne rotmiddelkvadratet over én hel periode.

  1. Bruk regresjonsmodellen
    \(U(t)=A\sin(\omega t+\varphi)+D\), med \(A\approx323{,}473\) og \(D\approx-0{,}912\).
  2. Utnytt en hel periode
    Over én hel periode er middelverdien av \(\sin\) lik 0 og middelverdien av \(\sin^2\) lik 1/2.
  3. Forenkle RMS-formelen
    \[U_{\mathrm{eff}}=\sqrt{\frac{A^2}{2}+D^2}\]
  4. Sett inn parametrene
    \[U_{\mathrm{eff}}\approx\sqrt{\frac{323{,}473^2}{2}+(-0{,}912)^2}\]
  5. Regn ut
    \[U_{\mathrm{eff}}\approx228{,}73\text{ V}\]
  6. Vurder målingene
    Avviket fra 230 V er bare omtrent 1,27 V, under 0,6 %. Med måleusikkerhet og avrunding er målingene fullt plausible.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1T=2pi/314.812465
Resultat: \(T\approx0{,}0199585\)
2sqrt((1/T) Integral((U(t))^2,t,0,T))
Resultat: \(228{,}73\text{ V}\)
Tolkning: Integralberegningen over én hel periode bekrefter RMS-formelen.
Visualisering for Oppgave 2c
Sinusregresjonen følger målepunktene tett og gir effektivverdi nær 230 V.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
import numpy as np
from scipy.optimize import curve_fit
from scipy.integrate import quad

seconds = np.array([0.0020,0.0050,0.0070,0.0100,
                    0.0130,0.0150,0.0180,0.0200])
voltage = np.array([189.0,323.0,259.0,-2.12,-261.0,-327.0,-189.0,3.52])

def model(t,A,omega,phase,D):
    return A*np.sin(omega*t+phase)+D

parameters,_ = curve_fit(model,seconds,voltage,
                         p0=[327,100*np.pi,0,0],maxfev=100000)
A,omega,phase,D = parameters
T = 2*np.pi/abs(omega)
integral,estimated_error = quad(lambda t:model(t,*parameters)**2,0,T,
                                epsabs=1e-12,epsrel=1e-12)
rms_integral = np.sqrt(integral/T)
rms_formula = np.sqrt(A**2/2+D**2)
print("A = %.12f V" % A)
print("D = %.12f V" % D)
print("Periode T = %.12f s" % T)
print("Integral av U(t)^2 = %.12f V^2*s" % integral)
print("Estimert integrasjonsfeil = %.3e" % estimated_error)
print("Effektivverdi fra integral = %.12f V" % rms_integral)
print("Effektivverdi fra lukket formel = %.12f V" % rms_formula)
print("Avvik fra 230 V = %.12f V" % (rms_integral-230))
print("Relativt avvik = %.6f %%" % (100*(rms_integral-230)/230))
assert abs(rms_integral-rms_formula) < 1e-8
assert abs(rms_integral-230) < 2
Kjørt utskriftA = 323.473448427257 V
D = -0.912098449405 V
Periode T = 0.019958502295 s
Integral av U(t)^2 = 1044.196264656368 V^2*s
Estimert integrasjonsfeil = 1.159e-11
Effektivverdi fra integral = 228.732087478543 V
Effektivverdi fra lukket formel = 228.732087478543 V
Avvik fra 230 V = -1.267912521457 V
Relativt avvik = -0.551266 %

Fasit: \(U_{\mathrm{eff}}\approx228{,}7\text{ V}\), svært nær 230 V. Målingene kan derfor være riktige.

Vanlig feil: Å sammenligne toppverdien rundt 323 V direkte med den oppgitte effektivverdien 230 V.
Sensorpunkt: Sensor ser etter bruk av RMS-formelen over en hel periode og en rimelig vurdering av avviket.
Del 2 / Oppgave 3aRekursiv modell

Oppgave 3a

Oppgave: Sofie får 2 enheter CCl4 hver natt og skiller ut 18 % i løpet av hver dag. Hvor mange netter kan hun sove der før nivået blir potensielt farlig over 10 enheter?
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? La a_n være mengden rett etter natt n. Mellom nettene beholdes 82 % av forrige mengde, og deretter tilføres 2 enheter.

  1. Sett opp rekursjonen
    \[a_0=0,\qquad a_n=0{,}82a_{n-1}+2\]
  2. Beregn de første verdiene
    \(a_1=2\), \(a_2=3{,}64\), og nivået stiger gradvis.
  3. Undersøk rundt grensen
    \[a_{10}\approx9{,}584,\qquad a_{11}\approx9{,}859\]
  4. Beregn neste natt
    \[a_{12}=0{,}82a_{11}+2\approx10{,}084\]
  5. Tolk grensen
    Etter 11 netter er nivået fortsatt under 10. Etter den 12. natten er det over 10.
  6. Svar presist
    Hun kan sove 11 netter før nivået kommer opp på et potensielt farlig nivå; den 12. natten passerer grensen.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1IterationList(0.82x+2,0,12)
Resultat: \(\ldots,9{,}8588,10{,}0842\)
Tolkning: Iterasjonslisten viser første indeks der nivået overstiger 10.
Visualisering for Oppgave 3a
Med 18 % daglig utskilling passerer modellen 10 enheter etter den tolvte natten.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
retention = 0.82
exposure = 2.0
amount = 0.0
first_dangerous_night = None
print("Startmengde = %.12f" % amount)
for night in range(1,21):
    amount = retention*amount + exposure
    print("Etter natt %2d: %.12f enheter" % (night,amount))
    if amount > 10 and first_dangerous_night is None:
        first_dangerous_night = night
print("Første natt over 10 enheter =", first_dangerous_night)
print("Antall hele trygge netter =", first_dangerous_night-1)
assert first_dangerous_night == 12
Kjørt utskriftStartmengde = 0.000000000000
Etter natt  1: 2.000000000000 enheter
Etter natt  2: 3.640000000000 enheter
Etter natt  3: 4.984800000000 enheter
Etter natt  4: 6.087536000000 enheter
Etter natt  5: 6.991779520000 enheter
Etter natt  6: 7.733259206400 enheter
Etter natt  7: 8.341272549248 enheter
Etter natt  8: 8.839843490383 enheter
Etter natt  9: 9.248671662114 enheter
Etter natt 10: 9.583910762934 enheter
Etter natt 11: 9.858806825606 enheter
Etter natt 12: 10.084221596997 enheter
Etter natt 13: 10.269061709537 enheter
Etter natt 14: 10.420630601821 enheter
Etter natt 15: 10.544917093493 enheter
Etter natt 16: 10.646832016664 enheter
Etter natt 17: 10.730402253665 enheter
Etter natt 18: 10.798929848005 enheter
Etter natt 19: 10.855122475364 enheter
Etter natt 20: 10.901200429799 enheter
Første natt over 10 enheter = 12
Antall hele trygge netter = 11

Fasit: Hun kan sove **11 netter** før grensen passeres; etter natt 12 er nivået ca. \(10{,}084\).

Vanlig feil: Å trekke 18 % fra bare de 2 nye enhetene i stedet for fra totalmengden, eller å svare 12 uten å skille mellom trygg natt og første farlige natt.
Sensorpunkt: Sensor ser etter en tydelig rekursiv modell, dokumenterte iterasjoner og korrekt tolkning av terskelen.
Del 2 / Oppgave 3bLikevekt i rekursiv modell

Oppgave 3b

Oppgave: En artikkel påstår at nivået aldri blir høyere enn 10 enheter ved 2 enheter eksponering per natt. Hvor stor prosentandel antar artikkelen at kroppen skiller ut per dag?
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? For at nivået skal nærme seg maksimalt 10, må 10 være likevektsverdien til modellen.

  1. La p være utskilt andel
    Da beholdes andelen \(1-p\) fra dag til dag.
  2. Skriv rekursjonen
    \[a_n=(1-p)a_{n-1}+2\]
  3. Bruk likevekten 10
    Ved likevekt er \(a_n=a_{n-1}=10\), så \[10=(1-p)10+2.\]
  4. Løs likningen
    \[10=10-10p+2\Rightarrow10p=2\]
  5. Finn p
    \[p=0{,}20\]
  6. Tolk prosent
    Artikkelen antar at en voksen skiller ut 20 % per dag. Med mer enn 20 % blir grenseverdien lavere enn 10; med mindre blir den høyere.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Solve(10=(1-p)10+2,p)
Resultat: \(p=0{,}20\)
Tolkning: CAS løser likevektslikningen direkte.
Visualisering for Oppgave 3b
Med 18 % daglig utskilling passerer modellen 10 enheter etter den tolvte natten.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, Eq, solve, Rational, simplify
p = symbols('p', real=True)
equilibrium = 10
equation = Eq(equilibrium, (1-p)*equilibrium + 2)
solution = solve(equation, p)[0]
print("Likevektslikning =", equation)
print("Løsning p =", solution)
print("Prosent =", 100*solution, "%")
print("Kontroll av høyresiden =", simplify((1-solution)*10+2))
print("Likevektsverdi fra 2/p =", simplify(2/solution))
assert solution == Rational(1,5)
Kjørt utskriftLikevektslikning = Eq(10, 12 - 10*p)
Løsning p = 1/5
Prosent = 20 %
Kontroll av høyresiden = 10
Likevektsverdi fra 2/p = 10

Fasit: Artikkelen antar \(20\%\) daglig utskilling.

Vanlig feil: Å beregne 18 % av 10 og sammenligne med 2 uten å formulere likevekten, eller å svare 80 % fordi 80 % beholdes.
Sensorpunkt: Sensor ser etter en likevektslikning eller en tilsvarende geometrisk argumentasjon.
Del 2 / Oppgave 4aNumerisk integrasjon og monotoni

Oppgave 4a

Oppgave: Programmet bruker venstre og høyre endepunkter med 100 rektangler for \(f(x)=3^{2x}\) på \([0,2]\). Forklar hvorfor én metode gir litt for høy verdi og den andre litt for lav.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Funksjonen er strengt voksende. Derfor ligger venstreendepunktsrektanglene under grafen, mens høyreendepunktsrektanglene ligger over grafen.

  1. Vis at funksjonen vokser
    \[f\prime(x)=2\ln(3)\cdot3^{2x}>0\] for alle x.
  2. Undersøk første funksjon
    `areal_til_hoyre()` bruker \(x=start+i\,dx\) for \(i=0,\ldots,n-1\). Det er faktisk venstre endepunkt i hvert delintervall.
  3. Tolk første sum
    For en voksende funksjon er høyden ved venstre endepunkt mindre enn funksjonsverdiene videre i intervallet. Summen blir derfor for lav.
  4. Undersøk andre funksjon
    `areal_til_venstre()` bruker \(i=1,\ldots,n\), altså høyre endepunkt i hvert delintervall.
  5. Tolk andre sum
    Høyreendepunktshøyden er størst i hvert delintervall, så summen blir for høy.
  6. Kontroller numerisk
    Med n=100 får vi omtrent 35,6154 fra venstre, 37,2154 fra høyre, mens eksakt areal er omtrent 36,4096.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1LeftSum(3^(2x),0,2,100)
Resultat: \(35{,}6154\), for lavt
2RightSum(3^(2x),0,2,100)
Resultat: \(37{,}2154\), for høyt
Tolkning: GeoGebra viser rektangelsummene og bekrefter fortegnet på feilene.
Visualisering for Oppgave 4a
For en voksende funksjon gir venstre endepunkter for lav sum og høyre endepunkter for høy sum.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
import math
start = 0
slutt = 2
n = 100

dx = (slutt-start)/n

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

def areal_til_hoyre():
    # Koden bruker i praksis venstre endepunkter.
    areal = 0
    for i in range(n):
        x = start + i*dx
        areal = areal + f(x)*dx
    return areal

def areal_til_venstre():
    # Koden bruker i praksis høyre endepunkter.
    areal = 0
    for i in range(1,n+1):
        x = start + i*dx
        areal = areal + f(x)*dx
    return areal

left_sum = areal_til_hoyre()
right_sum = areal_til_venstre()
exact = (3**(2*slutt)-3**(2*start))/(2*math.log(3))
print("dx =", dx)
print("Sum med venstre endepunkter =", left_sum)
print("Sum med høyre endepunkter =", right_sum)
print("Eksakt integral =", exact)
print("Feil for venstresum =", left_sum-exact)
print("Feil for høyresum =", right_sum-exact)
print("Venstresum < eksakt < høyresum =", left_sum < exact < right_sum)
assert left_sum < exact < right_sum
Kjørt utskriftdx = 0.02
Sum med venstre endepunkter = 35.615428142039484
Sum med høyre endepunkter = 37.21542814203948
Eksakt integral = 36.40956906507349
Feil for venstresum = -0.7941409230340071
Feil for høyresum = 0.8058590769659872
Venstresum < eksakt < høyresum = True

Fasit: Funksjonen er voksende. Første metode bruker venstre endepunkter og gir for lav verdi; andre bruker høyre endepunkter og gir for høy verdi.

Vanlig feil: Å stole på funksjonsnavnene uten å lese hvilke x-verdier løkkene faktisk bruker. Navnene er motsatt av endepunktene i koden.
Sensorpunkt: Sensor ser etter koblingen mellom monotoni, rektangelhøyder og over-/underestimat.
Del 2 / Oppgave 4bTrapesmetoden

Oppgave 4b

Oppgave: Skriv ferdig funksjonen `bedre_metode()` slik at arealet beregnes mer nøyaktig uten flere delintervaller.
Vekting: Denne deloppgaven vektes innenfor oppgavens oppgitte poengsum.
Vis løsning

Hva spør oppgaven om? Vi kan kombinere venstre- og høyresummen. Gjennomsnittet av dem er trapesmetoden, som bruker gjennomsnittet av funksjonsverdiene i begge endepunktene i hvert delintervall.

  1. Behold n=100
    Oppgaven sier at vi ikke skal dele opp i flere deler, så \(dx=0{,}02\) beholdes.
  2. Bruk et trapes i hvert delintervall
    Arealbidraget er \[\frac{f(x_i)+f(x_{i+1})}{2}\,dx.\]
  3. Lag løkken
    For \(i=0,\ldots,n-1\) setter vi \(x_1=start+i\,dx\) og \(x_2=x_1+dx\).
  4. Summer bidragene
    Funksjonen legger alle trapesarealene til variabelen `areal`.
  5. Kjør programmet
    Resultatet blir omtrent \(36{,}4154281420\).
  6. Kontroller nøyaktigheten
    Eksakt integral er \[\int_0^2 3^{2x}dx=\frac{80}{\ln9}\approx36{,}4095690651.\] Feilen er bare ca. \(0{,}00586\), mye mindre enn rektangelfeilene.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1TrapezoidalSum(3^(2x),0,2,100)
Resultat: \(36{,}4154281420\)
2Integral(3^(2x),x,0,2)
Resultat: \(80/\ln9\approx36{,}4095690651\)
Tolkning: Trapesmetoden er gjennomsnittet av venstre- og høyresummen når delintervallene er like brede.
Visualisering for Oppgave 4b
For en voksende funksjon gir venstre endepunkter for lav sum og høyre endepunkter for høy sum.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
import math
start = 0
slutt = 2
n = 100

dx = (slutt-start)/n

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

def bedre_metode():
    areal = 0
    for i in range(n):
        x_venstre = start + i*dx
        x_hoyre = x_venstre + dx
        hoyde_gjennomsnitt = (f(x_venstre)+f(x_hoyre))/2
        areal = areal + hoyde_gjennomsnitt*dx
    return areal

resultat = bedre_metode()
eksakt = (3**(2*slutt)-3**(2*start))/(2*math.log(3))
venstre = sum(f(start+i*dx)*dx for i in range(n))
hoyre = sum(f(start+i*dx)*dx for i in range(1,n+1))
print("start =", start)
print("slutt =", slutt)
print("n =", n)
print("dx =", dx)
print("Venstresum =", venstre)
print("Høyresum =", hoyre)
print("Gjennomsnitt av rektangelsummene =", (venstre+hoyre)/2)
print("Resultat fra bedre_metode() =", resultat)
print("Eksakt integral =", eksakt)
print("Absolutt feil =", abs(resultat-eksakt))
print("Relativ feil = %.8f %%" % (100*abs(resultat-eksakt)/eksakt))
assert abs(resultat-(venstre+hoyre)/2) < 1e-12
assert abs(resultat-eksakt) < abs(venstre-eksakt)
assert abs(resultat-eksakt) < abs(hoyre-eksakt)
Kjørt utskriftstart = 0
slutt = 2
n = 100
dx = 0.02
Venstresum = 35.61542814203948
Høyresum = 37.21542814203948
Gjennomsnitt av rektangelsummene = 36.415428142039474
Resultat fra bedre_metode() = 36.415428142039474
Eksakt integral = 36.40956906507349
Absolutt feil = 0.005859076965982979
Relativ feil = 0.01609213 %

Fasit: En korrekt løsning er trapesmetoden. Programmet gir \(36{,}4154281420\), mot eksakt \(36{,}4095690651\).

Vanlig feil: Å øke n, selv om oppgaven uttrykkelig ber om bedre nøyaktighet uten flere deler, eller å glemme faktoren 1/2 i trapesarealet.
Sensorpunkt: Sensor ser etter kjørbar kode, dokumentert utskrift og en metode som faktisk er mer nøyaktig med samme n.