R2 eksamenVår 2023LK20

Matematikk R2 eksamen – vår 2023

ifingo
Norsk (Bokmål)

ifingo · Matematikk R2

Matematikk R2 - eksamen vår 2023 (LK20)

Løsningsforslag til eksamenssettet fra Utdanningsdirektoratet.

Del 1 - uten hjelpemidler

Del 1 / Oppgave 1aBestemt integral og symmetri

Oppgave 1a

Oppgave: Regn ut \(\displaystyle\int_{-1}^{1}(4x^3-x)\,dx\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal beregne et bestemt integral. Integranden er en odde funksjon på et symmetrisk intervall.

  1. Undersøk symmetrien
    \(h(x)=4x^3-x\) oppfyller \(h(-x)=-h(x)\).
  2. Bruk symmetriregelen
    Integral av en odde funksjon fra \(-a\) til \(a\) er 0.
  3. Alternativ: finn en stamfunksjon
    \[H(x)=x^4-\frac{x^2}{2}\]
  4. Sett inn øvre grense
    \(H(1)=1-1/2=1/2\).
  5. Sett inn nedre grense
    \(H(-1)=1-1/2=1/2\).
  6. Trekk fra
    \[H(1)-H(-1)=0\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Integral(4*x^3-x,x,-1,1)
Resultat: 0
Tolkning: CAS bekrefter både symmetrien og den eksakte integralverdien.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, integrate, simplify
x = symbols('x', real=True)
integrand = 4*x**3 - x
antiderivative = integrate(integrand, x)
value = integrate(integrand, (x, -1, 1))
print("Integrand =", integrand)
print("h(-x) + h(x) =", simplify(integrand.subs(x, -x) + integrand))
print("Stamfunksjon =", antiderivative)
print("H(1) =", antiderivative.subs(x, 1))
print("H(-1) =", antiderivative.subs(x, -1))
print("Bestemt integral =", value)
assert value == 0
Kjørt utskriftIntegrand = 4*x**3 - x
h(-x) + h(x) = 0
Stamfunksjon = x**4 - x**2/2
H(1) = 1/2
H(-1) = 1/2
Bestemt integral = 0

Fasit: 0.

Vanlig feil: Å overse at intervallet er symmetrisk og gjøre unødvendig kompliserte beregninger med fortegnsfeil.
Sensorpunkt: Sensor godtar symmetriargument eller korrekt bruk av en stamfunksjon.
Del 1 / Oppgave 1bBestemt eksponentialintegral

Oppgave 1b

Oppgave: Regn ut \(\displaystyle\int_{0}^{\ln 2}e^{2x}\,dx\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal finne en stamfunksjon til e^(2x), sette inn grensene og bruke at e^(ln 2)=2.

  1. Integrer med kjerneregel baklengs
    \[\int e^{2x}\,dx=\frac12e^{2x}+C\]
  2. Sett inn grensene
    \[\int_0^{\ln2}e^{2x}\,dx=\left[\frac12e^{2x}\right]_0^{\ln2}\]
  3. Beregn øvre verdi
    \(e^{2\ln2}=e^{\ln4}=4\), så øvre verdi er 2.
  4. Beregn nedre verdi
    Ved \(x=0\) får vi \(\frac12e^0=1/2\).
  5. Trekk fra
    \[2-\frac12=\frac32\]
  6. Kontroller fortegn
    Integranden er positiv, så et positivt svar er nødvendig.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Integral(exp(2x),x,0,ln(2))
Resultat: \(3/2\)
Tolkning: CAS gir den eksakte verdien 3/2.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, exp, log, integrate, Rational, simplify
x = symbols('x', real=True)
integrand = exp(2*x)
F = integrate(integrand, x)
value = integrate(integrand, (x, 0, log(2)))
print("Integrand =", integrand)
print("Stamfunksjon =", F)
print("Øvre verdi =", simplify(F.subs(x, log(2))))
print("Nedre verdi =", simplify(F.subs(x, 0)))
print("Bestemt integral =", value)
print("Kontroll mot 3/2 =", simplify(value - Rational(3,2)))
assert simplify(value - Rational(3,2)) == 0
Kjørt utskriftIntegrand = exp(2*x)
Stamfunksjon = exp(2*x)/2
Øvre verdi = 2
Nedre verdi = 1/2
Bestemt integral = 3/2
Kontroll mot 3/2 = 0

Fasit: \(\displaystyle\frac32\).

Vanlig feil: Å glemme faktoren 1/2 i stamfunksjonen til e^(2x).
Sensorpunkt: Sensor ser etter korrekt stamfunksjon og eksakt grenseinnsetting.
Del 1 / Oppgave 2aDerivasjon av tangens

Oppgave 2a

Oppgave: Vis at dersom \(f(x)=\tan x\), så er \(f\prime(x)=1+\tan^2x\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal bevise den oppgitte derivasjonsformelen ved å skrive tan x som sin x / cos x.

  1. Skriv tangens som kvotient
    \[\tan x=\frac{\sin x}{\cos x}\]
  2. Bruk kvotientregelen
    \[f\prime(x)=\frac{\cos x\cos x-\sin x(-\sin x)}{\cos^2x}\]
  3. Forenkle telleren
    \[\cos^2x+\sin^2x=1\]
  4. Få standardformen
    \[f\prime(x)=\frac1{\cos^2x}\]
  5. Skriv 1 med felles nevner
    \[1+\tan^2x=1+\frac{\sin^2x}{\cos^2x}=\frac{\cos^2x+\sin^2x}{\cos^2x}\]
  6. Konkluder
    Begge uttrykkene er \(1/\cos^2x\), derfor er \(f\prime(x)=1+\tan^2x\).

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Derivative(tan(x),x)
Resultat: \(\sec^2x\)
2TrigSimplify(sec(x)^2-(1+tan(x)^2))
Resultat: 0
Tolkning: CAS bekrefter identiteten, men det algebraiske beviset må vises.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, tan, sin, cos, diff, simplify, trigsimp
x = symbols('x', real=True)
f = tan(x)
derivative = diff(f, x)
identity_form = 1 + tan(x)**2
quotient_form = diff(sin(x)/cos(x), x)
print("f(x) =", f)
print("Derivert av tan(x) =", derivative)
print("Derivert via sin/cos =", quotient_form)
print("1 + tan(x)^2 =", identity_form)
print("Kontroll derivative - identity =", trigsimp(derivative - identity_form))
print("Kontroll kvotientform =", simplify(trigsimp(quotient_form - identity_form)))
assert trigsimp(derivative - identity_form) == 0
Kjørt utskriftf(x) = tan(x)
Derivert av tan(x) = tan(x)**2 + 1
Derivert via sin/cos = sin(x)**2/cos(x)**2 + 1
1 + tan(x)^2 = tan(x)**2 + 1
Kontroll derivative - identity = 0
Kontroll kvotientform = 0

Fasit: \(f\prime(x)=1+\tan^2x\).

Vanlig feil: Å skrive at formelen er kjent uten å vise hvorfor den følger av kvotientregelen og identiteten sin²x+cos²x=1.
Sensorpunkt: Sensor ser etter et faktisk bevis, ikke bare sluttformelen.
Del 1 / Oppgave 2bUbestemt trigonometrisk integral

Oppgave 2b

Oppgave: Regn ut \(\displaystyle\int\frac{1+\tan^2x}{\tan x}\,dx\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal bruke resultatet fra a eller omskrive integranden til en sum av tan x og cot x.

  1. Del brøken
    \[\frac{1+\tan^2x}{\tan x}=\frac1{\tan x}+\tan x=\cot x+\tan x\]
  2. Integrer cotangens
    \[\int\cot x\,dx=\ln|\sin x|\]
  3. Integrer tangens
    \[\int\tan x\,dx=-\ln|\cos x|\]
  4. Sett sammen
    \[\ln|\sin x|-\ln|\cos x|+C\]
  5. Bruk logaritmeregelen
    \[\ln\left|\frac{\sin x}{\cos x}\right|+C=\ln|\tan x|+C\]
  6. Oppgi gyldighet
    Uttrykket gjelder på intervaller der både \(\tan x\) og integranden er definert.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Integral((1+tan(x)^2)/tan(x),x)
Resultat: \(\ln|\tan x|\)
Tolkning: Derivasjon av ln|tan x| gir integranden på hvert gyldig intervall.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, tan, sin, cos, log, diff, simplify, trigsimp
x = symbols('x', real=True)
integrand = (1 + tan(x)**2)/tan(x)
F = log(tan(x))
rewritten = cos(x)/sin(x) + sin(x)/cos(x)
print("Integrand =", integrand)
print("Omskrevet =", rewritten)
print("Trigonometrisk kontroll =", trigsimp(integrand - rewritten))
print("Foreslått stamfunksjon = log(tan(x))")
print("Derivert tilbake =", diff(F, x))
print("Kontroll =", simplify(trigsimp(diff(F, x) - integrand)))
print("Merk: absoluttverdi brukes i den reelle stamfunksjonen.")
assert simplify(trigsimp(diff(F, x) - integrand)) == 0
Kjørt utskriftIntegrand = (tan(x)**2 + 1)/tan(x)
Omskrevet = sin(x)/cos(x) + cos(x)/sin(x)
Trigonometrisk kontroll = -tan(x) - 1/tan(x) + 2/sin(2*x)
Foreslått stamfunksjon = log(tan(x))
Derivert tilbake = (tan(x)**2 + 1)/tan(x)
Kontroll = 0
Merk: absoluttverdi brukes i den reelle stamfunksjonen.

Fasit: \(\ln|\tan x|+C\).

Vanlig feil: Å integrere telleren og nevneren hver for seg, eller å glemme absoluttverdien.
Sensorpunkt: Sensor ser etter korrekt omskriving og en stamfunksjon med +C.
Del 1 / Oppgave 3aVolum av pyramide

Oppgave 3a

Oppgave: Punktene \(A(0,0,0)\), \(B(5,0,0)\), \(C(4,2,0)\) og \(T(0,0,5)\) danner en pyramide. Regn ut volumet.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal finne arealet av grunnflaten ABC og høyden fra T til xy-planet.

  1. Velg grunnflate
    Trekanten ABC ligger i planet \(z=0\).
  2. Finn to sidevektorer
    \(\overrightarrow{AB}=(5,0,0)\) og \(\overrightarrow{AC}=(4,2,0)\).
  3. Finn kryssproduktet
    \[\overrightarrow{AB}\times\overrightarrow{AC}=(0,0,10)\]
  4. Finn trekantarealet
    \[G=\frac12\cdot10=5\]
  5. Finn høyden
    T har z-koordinat 5, så avstanden til z=0 er \(h=5\).
  6. Bruk pyramideformelen
    \[V=\frac13Gh=\frac13\cdot5\cdot5=\frac{25}{3}\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Cross((5,0,0),(4,2,0))
Resultat: (0,0,10)
21/3*Area(Triangle(A,B,C))*5
Resultat: \(25/3\)
Tolkning: Kryssproduktet gir dobbelt areal av trekanten, og høyden står vinkelrett på grunnplanet.
Visualisering for Oppgave 3a
Pyramiden har grunnflate ABC i xy-planet og toppunkt T fem enheter over planet.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import Matrix, Rational
A = Matrix([0,0,0])
B = Matrix([5,0,0])
C = Matrix([4,2,0])
T = Matrix([0,0,5])
AB = B-A
AC = C-A
cross = AB.cross(AC)
base_area = cross.norm()/2
height = 5
volume = Rational(1,3)*base_area*height
print("AB =", tuple(AB))
print("AC =", tuple(AC))
print("AB x AC =", tuple(cross))
print("Grunnflateareal =", base_area)
print("Høyde =", height)
print("Volum =", volume)
assert base_area == 5
assert volume == Rational(25,3)
Kjørt utskriftAB = (5, 0, 0)
AC = (4, 2, 0)
AB x AC = (0, 0, 10)
Grunnflateareal = 5
Høyde = 5
Volum = 25/3

Fasit: \(\displaystyle V=\frac{25}{3}\).

Vanlig feil: Å bruke parallellogramarealet 10 som grunnflateareal i stedet for trekantarealet 5.
Sensorpunkt: Sensor ser etter trekantareal, høyde og faktoren 1/3.
Del 1 / Oppgave 3bAreal i rommet

Oppgave 3b

Oppgave: Regn ut arealet av \(\triangle BCT\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal bruke kryssproduktet av to sidevektorer i trekanten BCT.

  1. Finn vektorene fra B
    \[\overrightarrow{BC}=(-1,2,0),\qquad\overrightarrow{BT}=(-5,0,5)\]
  2. Beregn kryssproduktet
    \[\overrightarrow{BC}\times\overrightarrow{BT}=(10,5,10)\]
  3. Finn lengden
    \[\|(10,5,10)\|=\sqrt{100+25+100}=15\]
  4. Tolk lengden
    Kryssproduktets lengde er arealet av parallellogrammet spent ut av vektorene.
  5. Del på to
    \[A_{BCT}=\frac12\cdot15\]
  6. Skriv svaret
    \[A_{BCT}=\frac{15}{2}\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Cross(C-B,T-B)
Resultat: (10,5,10)
2Length(%)/2
Resultat: \(15/2\)
Tolkning: CAS bekrefter kryssproduktet og trekantarealet.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import Matrix, Rational, sqrt, simplify
B = Matrix([5,0,0])
C = Matrix([4,2,0])
T = Matrix([0,0,5])
BC = C-B
BT = T-B
cross = BC.cross(BT)
norm = simplify(cross.norm())
area = norm/2
print("BC =", tuple(BC))
print("BT =", tuple(BT))
print("BC x BT =", tuple(cross))
print("Lengde av kryssprodukt =", norm)
print("Areal av trekant BCT =", area)
print("Kontroll mot 15/2 =", simplify(area - Rational(15,2)))
assert area == Rational(15,2)
Kjørt utskriftBC = (-1, 2, 0)
BT = (-5, 0, 5)
BC x BT = (10, 5, 10)
Lengde av kryssprodukt = 15
Areal av trekant BCT = 15/2
Kontroll mot 15/2 = 0

Fasit: \(\displaystyle\frac{15}{2}\).

Vanlig feil: Å glemme å dele kryssproduktets lengde på 2.
Sensorpunkt: Sensor ser etter egnede sidevektorer og korrekt kryssprodukt.
Del 1 / Oppgave 3cAvstand fra punkt til plan

Oppgave 3c

Oppgave: Bestem avstanden fra A til planet som går gjennom B, C og T.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal finne en normalvektor til planet BCT, skrive planlikningen og bruke avstandsformelen.

  1. Bruk normalvektoren fra b
    \((10,5,10)\) kan forkortes til \(\mathbf n=(2,1,2)\).
  2. Skriv planet gjennom B
    \[2(x-5)+1(y-0)+2(z-0)=0\]
  3. Forenkle planlikningen
    \[2x+y+2z-10=0\]
  4. Bruk avstandsformelen
    For \(A=(0,0,0)\): \[d=\frac{|2\cdot0+0+2\cdot0-10|}{\sqrt{2^2+1^2+2^2}}\]
  5. Beregn nevneren
    \(\sqrt{4+1+4}=3\).
  6. Konkluder
    \[d=\frac{10}{3}\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Plane(B,C,T)
Resultat: \(2x+y+2z=10\)
2Distance(A,Plane(B,C,T))
Resultat: \(10/3\)
Tolkning: Planets normalvektor og avstandsformelen gir den eksakte avstanden.
Visualisering for Oppgave 3c
Pyramiden har grunnflate ABC i xy-planet og toppunkt T fem enheter over planet.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import Matrix, sqrt, Rational, simplify
A = Matrix([0,0,0])
B = Matrix([5,0,0])
C = Matrix([4,2,0])
T = Matrix([0,0,5])
normal = (C-B).cross(T-B)
primitive_normal = normal/5
constant = primitive_normal.dot(B)
distance = abs(primitive_normal.dot(A)-constant)/primitive_normal.norm()
print("Normalvektor fra kryssprodukt =", tuple(normal))
print("Forenklet normalvektor =", tuple(primitive_normal))
print("Planlikning: 2*x + y + 2*z =", constant)
print("Avstand fra A til planet =", distance)
print("Kontroll mot 10/3 =", simplify(distance - Rational(10,3)))
assert distance == Rational(10,3)
Kjørt utskriftNormalvektor fra kryssprodukt = (10, 5, 10)
Forenklet normalvektor = (2, 1, 2)
Planlikning: 2*x + y + 2*z = 10
Avstand fra A til planet = 10/3
Kontroll mot 10/3 = 0

Fasit: \(\displaystyle\frac{10}{3}\).

Vanlig feil: Å bruke lengden av normalvektoren 3 i telleren eller glemme absoluttverdien.
Sensorpunkt: Sensor ser etter planlikning og korrekt punkt-plan-avstand.
Del 1 / Oppgave 4aProgramforståelse og aritmetisk følge

Oppgave 4a

Oppgave: En elev bruker programmet med \(a=3\), \(d=4\), \(S=0\) og en løkke som N ganger legger a til S og deretter øker a med d. Forklar hva eleven ønsker å regne ut.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal lese programmet linje for linje og knytte variablene til en aritmetisk følge og dens delsum.

  1. Identifiser første ledd
    Variabelen \(a\) starter på 3, så første ledd er \(a_1=3\).
  2. Identifiser differansen
    Etter hver runde utføres \(a=a+d\) med \(d=4\). Følgen har derfor konstant differanse 4.
  3. Tolk løkken
    I hver runde legges den nåværende verdien av a til S før a økes.
  4. Skriv leddet i runde i
    Med \(i=0,1,\ldots,N-1\) legges \(3+4i\) til summen.
  5. Skriv summen
    Programmet beregner \[S_N=\sum_{i=0}^{N-1}(3+4i).\]
  6. Konkluder
    Eleven ønsker å finne summen av de N første leddene i den aritmetiske følgen 3, 7, 11, 15, ... .

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Sequence(3+4i,i,0,N-1)
Resultat: \(3,7,11,\ldots,3+4(N-1)\)
2Sum(Sequence(3+4i,i,0,N-1))
Resultat: \(N(2\cdot3+(N-1)4)/2\)
Tolkning: CAS-uttrykket viser at løkken er en aritmetisk delsum.
Visualisering for Oppgave 4a
Følgen øker med 4 for hver uke. Programmet summerer de N første leddene.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
a = 3
d = 4
N = 10
S = 0
print("Startverdier: a =", a, ", d =", d, ", N =", N, ", S =", S)
for i in range(N):
    print(f"runde {i+1:2d}: legger til a = {a:2d}")
    S = S + a
    a = a + d
print("Summen S =", S)
print("Neste verdi av a =", a)
expected = N*(2*3 + (N-1)*d)//2
print("Kontroll med sumformelen =", expected)
assert S == expected
Kjørt utskriftStartverdier: a = 3 , d = 4 , N = 10 , S = 0
runde  1: legger til a =  3
runde  2: legger til a =  7
runde  3: legger til a = 11
runde  4: legger til a = 15
runde  5: legger til a = 19
runde  6: legger til a = 23
runde  7: legger til a = 27
runde  8: legger til a = 31
runde  9: legger til a = 35
runde 10: legger til a = 39
Summen S = 210
Neste verdi av a = 43
Kontroll med sumformelen = 210

Fasit: Programmet summerer de N første leddene i den aritmetiske følgen med \(a_1=3\) og differanse \(d=4\).

Vanlig feil: Å tro at programmet bare skriver ut det N-te leddet. Variabelen S akkumulerer alle leddene.
Sensorpunkt: Sensor ser etter koblingen mellom startverdien, differansen, løkken og delsum.
Del 1 / Oppgave 4bAritmetisk sum og programkjøring

Oppgave 4b

Oppgave: Hva blir resultatet når programmet kjøres dersom \(N=100\)?
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi kan enten følge programmet eller bruke sumformelen for en aritmetisk følge.

  1. Finn første ledd
    \(a_1=3\).
  2. Finn ledd nummer 100
    \[a_{100}=3+99\cdot4=399.\]
  3. Bruk sumformelen
    \[S_{100}=\frac{100}{2}(3+399).\]
  4. Regn ut parentesen
    \(3+399=402\).
  5. Regn ut summen
    \[S_{100}=50\cdot402=20100.\]
  6. Knytt til programmet
    Programmet skriver derfor tallet 20100.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Sum(Sequence(3+4i,i,0,99))
Resultat: 20100
Tolkning: CAS og programmet gir samme heltallssum.
Visualisering for Oppgave 4b
Følgen øker med 4 for hver uke. Programmet summerer de N første leddene.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
a = 3
d = 4
N = 100
S = 0
for i in range(N):
    S = S + a
    a = a + d
print("N =", N)
print("Første ledd = 3")
print("Siste ledd som ble summert =", a-d)
print("Verdien av a etter løkken =", a)
print("Programmet skriver S =", S)
formula = N*(2*3 + (N-1)*d)//2
print("Sumformelen gir =", formula)
assert S == 20100
assert S == formula
Kjørt utskriftN = 100
Første ledd = 3
Siste ledd som ble summert = 399
Verdien av a etter løkken = 403
Programmet skriver S = 20100
Sumformelen gir = 20100

Fasit: Programmet skriver \(20100\).

Vanlig feil: Å bruke a=403 etter løkken som siste ledd i summen. Det siste summerte leddet er 399.
Sensorpunkt: Sensor ser etter korrekt antall ledd og riktig aritmetisk sum.
Del 1 / Oppgave 5aArealargument for sinusgrensen

Oppgave 5a

Oppgave: Bruk arealbetraktninger til å begrunne at \(\frac12\sin v<\frac12v<\frac12\tan v\) for \(0<v<\pi/2\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Figuren inneholder en trekant inne i en sirkelsektor, som igjen ligger inne i en større rettvinklet trekant.

  1. Finn arealet av den indre trekanten
    \(AB=AD=1\) og den inkluderte vinkelen er v, så \[A_{\triangle ABD}=\frac12\sin v.\]
  2. Finn arealet av sektoren
    Sektoren har radius 1 og vinkel v radianer, så \[A_{\text{sektor }ABD}=\frac12v.\]
  3. Finn høyden i den ytre trekanten
    I den rettvinklede trekanten ABC er \(AB=1\), derfor er \(BC=\tan v\).
  4. Finn arealet av den ytre trekanten
    \[A_{\triangle ABC}=\frac12\cdot1\cdot\tan v=\frac12\tan v.\]
  5. Bruk innleiringen
    Trekant ABD ligger inne i sektoren, og sektoren ligger inne i trekant ABC.
  6. Konkluder
    \[\frac12\sin v<\frac12v<\frac12\tan v.\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Assume(0<v<pi/2)
Resultat: alle tre arealer er positive
2Numeric(1/2*sin(v)<1/2*v<1/2*tan(v),v=0.5)
Resultat: true
Tolkning: En numerisk kontroll illustrerer ulikheten, mens arealinnleiringen er selve beviset.
Visualisering for Oppgave 5a
Når v nærmer seg 0 fra høyre, nærmer både cos(v) og 1 seg samme verdi. Dermed klemmes sin(v)/v mot 1.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, sin, tan, pi, N
v = symbols('v', positive=True)
for value in [0.1, 0.3, 0.5, 0.8, 1.2]:
    left = sin(value)/2
    middle = value/2
    right = tan(value)/2
    print(f"v = {value:3.1f}: 0.5*sin(v) = {left:.12f}, 0.5*v = {middle:.12f}, 0.5*tan(v) = {right:.12f}")
    assert left < middle < right
print("Kontrollpunktene ligger i intervallet (0, pi/2) =", (0, float(N(pi/2, 15))))
Kjørt utskriftv = 0.1: 0.5*sin(v) = 0.049916708323, 0.5*v = 0.050000000000, 0.5*tan(v) = 0.050167336043
v = 0.3: 0.5*sin(v) = 0.147760103331, 0.5*v = 0.150000000000, 0.5*tan(v) = 0.154668124805
v = 0.5: 0.5*sin(v) = 0.239712769302, 0.5*v = 0.250000000000, 0.5*tan(v) = 0.273151244922
v = 0.8: 0.5*sin(v) = 0.358678045450, 0.5*v = 0.400000000000, 0.5*tan(v) = 0.514819278525
v = 1.2: 0.5*sin(v) = 0.466019542984, 0.5*v = 0.600000000000, 0.5*tan(v) = 1.286075811063
Kontrollpunktene ligger i intervallet (0, pi/2) = (0, 1.5707963267948966)

Fasit: \(\frac12\sin v<\frac12v<\frac12\tan v\) for \(0<v<\pi/2\).

Vanlig feil: Å oppgi standardulikheten uten å forklare arealene til de tre områdene.
Sensorpunkt: Sensor ser etter arealene til trekant, sektor og ytre trekant samt korrekt innleiring.
Del 1 / Oppgave 5bOmskriving av ulikheter

Oppgave 5b

Oppgave: Forklar at ulikhetene gir \(1<\frac{v}{\sin v}<\frac1{\cos v}\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi omskriver arealulikheten ved å bruke at sinus er positiv i det aktuelle intervallet.

  1. Fjern faktoren en halv
    Multipliser hele ulikheten med 2: \[\sin v<v<\tan v.\]
  2. Bruk positivitet
    For \(0<v<\pi/2\) er \(\sin v>0\), så vi kan dividere uten å snu ulikhetstegnene.
  3. Divider første del
    \[\frac{\sin v}{\sin v}<\frac v{\sin v}\Rightarrow1<\frac v{\sin v}.\]
  4. Divider andre del
    \[\frac v{\sin v}<\frac{\tan v}{\sin v}.\]
  5. Forenkle høyresiden
    \[\frac{\tan v}{\sin v}=\frac{\sin v/\cos v}{\sin v}=\frac1{\cos v}.\]
  6. Konkluder
    \[1<\frac v{\sin v}<\frac1{\cos v}.\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Simplify(tan(v)/sin(v))
Resultat: \(1/\cos v\)
Tolkning: CAS bekrefter den trigonometriske forenklingen på intervallet der sinus ikke er null.
Visualisering for Oppgave 5b
Når v nærmer seg 0 fra høyre, nærmer både cos(v) og 1 seg samme verdi. Dermed klemmes sin(v)/v mot 1.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, sin, cos, tan, simplify
v = symbols('v', positive=True)
identity = simplify(tan(v)/sin(v) - 1/cos(v))
print("tan(v)/sin(v) - 1/cos(v) =", identity)
for value in [0.1, 0.5, 1.0]:
    middle = value/float(sin(value))
    upper = 1/float(cos(value))
    print(f"v = {value:.1f}: 1 < {middle:.12f} < {upper:.12f}")
    assert 1 < middle < upper
assert identity == 0
Kjørt utskrifttan(v)/sin(v) - 1/cos(v) = 0
v = 0.1: 1 < 1.001668613163 < 1.005020918400
v = 0.5: 1 < 1.042914821467 < 1.139493927325
v = 1.0: 1 < 1.188395105778 < 1.850815717681

Fasit: \(1<\frac v{\sin v}<\frac1{\cos v}\).

Vanlig feil: Å dividere med sinus uten å nevne at sinus er positiv.
Sensorpunkt: Sensor ser etter lovlig divisjon og forenklingen \( an v/\sin v=1/\cos v\).
Del 1 / Oppgave 5cKlemmeteoremet

Oppgave 5c

Oppgave: Bruk ulikhetene til å begrunne at \(\displaystyle\lim_{v\to0^+}\frac{\sin v}{v}=1\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi tar reciproke verdier og bruker klemmeteoremet mellom cosinus og konstanten 1.

  1. Start fra resultatet i b
    \[1<\frac v{\sin v}<\frac1{\cos v}.\]
  2. Ta reciproke verdier
    Alle uttrykkene er positive. Når vi tar reciproke verdier, snus ulikhetstegnene.
  3. Få klemmeulikheten
    \[1>\frac{\sin v}{v}>\cos v,\] altså \[\cos v<\frac{\sin v}{v}<1.\]
  4. Finn nedre grenseverdi
    \[\lim_{v\to0^+}\cos v=1.\]
  5. Finn øvre grenseverdi
    \[\lim_{v\to0^+}1=1.\]
  6. Bruk klemmeteoremet
    Siden uttrykket ligger mellom to funksjoner som begge går mot 1, får vi \[\lim_{v\to0^+}\frac{\sin v}{v}=1.\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Limit(sin(v)/v,v,0,Right)
Resultat: 1
2Limit(cos(v),v,0,Right)
Resultat: 1
Tolkning: CAS bekrefter grenseverdiene; klemmeteoremet forklarer hvorfor de gir resultatet.
Visualisering for Oppgave 5c
Når v nærmer seg 0 fra høyre, nærmer både cos(v) og 1 seg samme verdi. Dermed klemmes sin(v)/v mot 1.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, sin, cos, limit, S
v = symbols('v', positive=True)
ratio_limit = limit(sin(v)/v, v, 0, dir='+')
lower_limit = limit(cos(v), v, 0, dir='+')
upper_limit = limit(S.One, v, 0, dir='+')
print("lim cos(v) når v -> 0+ =", lower_limit)
print("lim sin(v)/v når v -> 0+ =", ratio_limit)
print("lim 1 når v -> 0+ =", upper_limit)
for value in [0.5, 0.1, 0.01, 0.001]:
    low = float(cos(value))
    mid = float(sin(value)/value)
    print(f"v={value:g}: cos(v)={low:.15f} < sin(v)/v={mid:.15f} < 1")
    assert low < mid < 1
assert lower_limit == ratio_limit == upper_limit == 1
Kjørt utskriftlim cos(v) når v -> 0+ = 1
lim sin(v)/v når v -> 0+ = 1
lim 1 når v -> 0+ = 1
v=0.5: cos(v)=0.877582561890373 < sin(v)/v=0.958851077208406 < 1
v=0.1: cos(v)=0.995004165278026 < sin(v)/v=0.998334166468282 < 1
v=0.01: cos(v)=0.999950000416665 < sin(v)/v=0.999983333416666 < 1
v=0.001: cos(v)=0.999999500000042 < sin(v)/v=0.999999833333342 < 1

Fasit: \(\displaystyle\lim_{v\to0^+}\frac{\sin v}{v}=1\).

Vanlig feil: Å ta reciproke verdier uten å snu ulikhetstegnene.
Sensorpunkt: Sensor ser etter klemmeulikheten, de to ytre grenseverdiene og en eksplisitt bruk av klemmeteoremet.

Del 2 - med hjelpemidler

Del 2 / Oppgave 1aLogistisk regresjon

Oppgave 1a

Oppgave: Tabellen gir strømmingsutgifter i millioner kroner for årene 2008–2018. Lag en modell \(F\) med \(F(0)\) som verdien i 2008, og begrunn modellen.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal velge x som antall år etter 2008 og tilpasse en modell som beskriver sterk vekst med gradvis utflating.

  1. Velg x-verdier
    Bruk \(x=0,2,4,6,8,10\) for årene 2008, 2010, ..., 2018.
  2. Vurder datamønsteret
    Tallene vokser først raskt og flater deretter ut. En logistisk modell er derfor mer realistisk enn en eksponentialmodell på lang sikt.
  3. Bruk logistisk regresjon
    Modellformen er \[F(x)=\frac{L}{1+A e^{-kx}}\]
  4. Finn regresjonskoeffisientene
    Regresjon gir omtrent \(L=660{,}363\), \(A=30{,}721\) og \(k=0{,}70656\).
  5. Skriv modellen
    \[F(x)=\frac{660{,}363}{1+30{,}721e^{-0{,}70656x}}\]
  6. Vurder tilpasningen
    Modellen har \(R^2\approx0{,}9976\) og en naturlig horisontal asymptote, så den er godt egnet til perioden og nær framtid.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1FitLogistic({(0,2),(2,70),(4,246),(6,456),(8,582),(10,655)})
Resultat: \(F(x)\approx660{,}363/(1+30{,}721e^{-0{,}70656x})\)
Tolkning: Den logistiske regresjonen gir en svært høy forklaringsgrad og modellerer utflatingen i dataene.
Visualisering for Oppgave 1a
Den logistiske modellen beskriver rask vekst etterfulgt av utflating mot omtrent 660 millioner kroner per år.

Digital kontroll i Python

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

x_data = np.array([0, 2, 4, 6, 8, 10], dtype=float)
y_data = np.array([2, 70, 246, 456, 582, 655], dtype=float)

def logistic(x, L, A, k):
    return L/(1 + A*np.exp(-k*x))

parameters, covariance = curve_fit(
    logistic, x_data, y_data,
    p0=(700, 30, 0.7), bounds=(0, np.inf), maxfev=100000
)
L, A, k = parameters
predicted = logistic(x_data, L, A, k)
ss_res = np.sum((y_data-predicted)**2)
ss_tot = np.sum((y_data-y_data.mean())**2)
r_squared = 1-ss_res/ss_tot
print(f"L = {L:.9f}")
print(f"A = {A:.9f}")
print(f"k = {k:.9f}")
print(f"R^2 = {r_squared:.12f}")
for x_value, observed, model_value in zip(x_data, y_data, predicted):
    print(f"x={x_value:>4.1f}: observert={observed:>6.1f}, modell={model_value:>10.4f}")
assert r_squared > 0.997
Kjørt utskriftL = 660.363710742
A = 30.720705867
k = 0.706557278
R^2 = 0.997574316686
x= 0.0: observert=   2.0, modell=   20.8181
x= 2.0: observert=  70.0, modell=   77.9013
x= 4.0: observert= 246.0, modell=  234.1910
x= 6.0: observert= 456.0, modell=  457.6636
x= 8.0: observert= 582.0, modell=  596.1063
x=10.0: observert= 655.0, modell=  643.4816

Fasit: Et gyldig modellvalg er \(F(x)=\dfrac{660{,}363}{1+30{,}721e^{-0{,}70656x}}\), der x er år etter 2008.

Vanlig feil: Å bruke de faktiske årstallene 2008, 2010, ... som x når oppgaven krever at F(0) svarer til 2008.
Sensorpunkt: Sensor vurderer både modellvalg, dokumentert regresjon og faglig begrunnelse.
Del 2 / Oppgave 1bIntegral, gjennomsnitt, sum og derivert

Oppgave 1b

Oppgave: For modellen F skal du bestemme \(I=\int_{-0,5}^{10,5}F(x)dx\), \(G=\frac15\int_{2,5}^{7,5}F(x)dx\), \(S=\sum_{i=0}^{10}F(i)\) og \(D=\frac{F(5,001)-F(5)}{0,001}\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal bruke den valgte logistiske modellen til fire ulike beregninger med forskjellige matematiske betydninger.

  1. Bruk samme modell som i a
    \[F(x)=\frac{660{,}3634667}{1+30{,}72074684e^{-0{,}70655791x}}\]
  2. Beregn I numerisk
    \[I\approx3728{,}74\]
  3. Beregn gjennomsnittsverdien G
    \[G=\frac15\int_{2,5}^{7,5}F(x)dx\approx344{,}45\]
  4. Beregn den diskrete summen S
    \[S=F(0)+F(1)+\cdots+F(10)\approx3728{,}82\]
  5. Beregn differansekvotienten D
    \[D\approx116{,}31\]
  6. Oppgi enheter
    I og S måles i millioner kroner, G i millioner kroner per år, og D i millioner kroner per år per år.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Integral(F,-0.5,10.5)
Resultat: \(I\approx3728{,}74\)
2Integral(F,2.5,7.5)/5
Resultat: \(G\approx344{,}45\)
3Sum(F(i),i,0,10)
Resultat: \(S\approx3728{,}82\)
4(F(5.001)-F(5))/0.001
Resultat: \(D\approx116{,}31\)
Tolkning: Numerisk integrasjon, diskret summering og differansekvotient gir de fire verdiene.
Visualisering for Oppgave 1b
Den logistiske modellen beskriver rask vekst etterfulgt av utflating mot omtrent 660 millioner kroner per år.

Digital kontroll i Python

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

L = 660.3634667
A = 30.72074684
k = 0.70655791

def F(x):
    return L/(1 + A*np.exp(-k*x))

I, I_error = quad(F, -0.5, 10.5)
G_integral, G_error = quad(F, 2.5, 7.5)
G = G_integral/5
S = sum(F(i) for i in range(11))
D = (F(5.001)-F(5))/0.001
print(f"I = {I:.12f}")
print(f"Estimert integrasjonsfeil for I = {I_error:.3e}")
print(f"G = {G:.12f}")
print(f"S = {S:.12f}")
print(f"F(5) = {F(5):.12f}")
print(f"F(5.001) = {F(5.001):.12f}")
print(f"D = {D:.12f}")
assert abs(I-3728.736936638496) < 1e-6
assert abs(G-344.4484764815358) < 1e-6
assert abs(S-3728.815494779811) < 1e-6
assert abs(D-116.30549114943278) < 1e-6
Kjørt utskriftI = 3728.736936638496
Estimert integrasjonsfeil for I = 4.835e-11
G = 344.448476481536
S = 3728.815494779811
F(5) = 347.969763971638
F(5.001) = 348.086069462788
D = 116.305491149433

Fasit: \(I\approx3728{,}74\), \(G\approx344{,}45\), \(S\approx3728{,}82\) og \(D\approx116{,}31\).

Vanlig feil: Å bruke en annen modell i b enn den som ble definert i a, eller å glemme faktoren 1/5 i G.
Sensorpunkt: Sensor ser etter dokumenterte digitale beregninger og konsistent bruk av modellen.
Del 2 / Oppgave 1cPraktisk tolkning av modeller

Oppgave 1c

Oppgave: Gi en praktisk tolkning av svarene I, G, S og D.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal koble hvert matematisk uttrykk til år, enheter og hva størrelsen sier om strømmingsmarkedet.

  1. Tolk I
    Intervallet \([-0,5,10,5]\) dekker omtrent kalenderårene 2008–2018. I er modellert samlet strømmingsbruk i denne perioden, omtrent 3729 millioner kroner.
  2. Tolk G
    G er gjennomsnittlig årlig strømmingsbruk fra 2,5 til 7,5 år etter 2008, altså omtrent fra midten av 2010 til midten av 2015: 344,45 millioner kroner per år.
  3. Tolk S
    S summerer modellens årstallverdier for 2008, 2009, ..., 2018. Resultatet er omtrent 3729 millioner kroner.
  4. Tolk D
    x=5 svarer til 2013. D er en framoverdifferanse som tilnærmer \(F\prime(5)\).
  5. Oppgi veksttolkningen
    I 2013 økte den årlige strømmingsbruken ifølge modellen med omtrent 116 millioner kroner per år.
  6. Skille mellom nivå og endring
    F(5) er selve årlige beløpet, mens D beskriver hvor raskt dette beløpet endrer seg.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Derivative(F,x)
Resultat: \(F\prime(5)\approx116{,}31\)
2Year=2008+x
Resultat: \(x=5\leftrightarrow2013\)
Tolkning: Differansekvotienten ligger svært nær den analytiske deriverte i x=5.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
import math
L = 660.3634667
A = 30.72074684
k = 0.70655791

def F(x):
    return L/(1 + A*math.exp(-k*x))

def F_prime(x):
    exponential = math.exp(-k*x)
    return L*A*k*exponential/(1 + A*exponential)**2

D = (F(5.001)-F(5))/0.001
analytic = F_prime(5)
print("x=5 svarer til år", 2008+5)
print(f"F(5) = {F(5):.6f} millioner kroner per år")
print(f"Differansekvotient D = {D:.6f}")
print(f"Analytisk F'(5) = {analytic:.6f}")
print(f"Forskjell = {D-analytic:.6f}")
print("I og S tolkes som omtrent samlet beløp i millioner kroner.")
print("G tolkes som gjennomsnittlig årlig beløp.")
assert abs(D-analytic) < 0.02
Kjørt utskriftx=5 svarer til år 2013
F(5) = 347.969764 millioner kroner per år
Differansekvotient D = 116.305491
Analytisk F'(5) = 116.307710
Forskjell = -0.002218
I og S tolkes som omtrent samlet beløp i millioner kroner.
G tolkes som gjennomsnittlig årlig beløp.

Fasit: I og S er omtrent samlet beløp for 2008–2018, G er et femårig gjennomsnitt, og D er modellens årlige veksttakt rundt 2013.

Vanlig feil: Å gi bare tallene på nytt uten årstall, enheter eller forklaring av forskjellen mellom sum, gjennomsnitt og derivert.
Sensorpunkt: Sensor ser etter praktiske tolkninger med riktige enheter.
Del 2 / Oppgave 2aPlanlikning

Oppgave 2a

Oppgave: Planet \(\alpha\) går gjennom \(A(1,0,3)\), \(B(0,1,2)\) og \(C(2,3,2)\). Bestem en likning for planet \(\beta\) som er parallelt med \(\alpha\) og går gjennom \(P(2,-5,5)\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi skal finne en normalvektor til α og bruke den samme normalvektoren for det parallelle planet β.

  1. Finn to retningsvektorer i α
    \[\overrightarrow{AB}=(-1,1,-1),\qquad\overrightarrow{AC}=(1,3,-1)\]
  2. Finn en normalvektor
    \[\overrightarrow{AB}\times\overrightarrow{AC}=(2,-2,-4)\sim(1,-1,-2)\]
  3. Skriv generell parallell planlikning
    \[x-y-2z+d=0\]
  4. Sett inn P
    \[2-(-5)-2\cdot5+d=0\]
  5. Finn konstanten
    \(7-10+d=0\), derfor \(d=3\).
  6. Skriv β
    \[\beta:\ x-y-2z+3=0\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Cross(B-A,C-A)
Resultat: (2,-2,-4)
2Plane(P,(1,-1,-2))
Resultat: \(x-y-2z+3=0\)
Tolkning: Parallelle plan har proporsjonale normalvektorer, og P oppfyller den nye likningen.
Visualisering for Oppgave 2a
Planene er parallelle. A og Q ligger på samme normal, og kulens sentrum S er midtpunktet mellom tangentpunktene.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import Matrix, symbols, simplify
A = Matrix([1,0,3])
B = Matrix([0,1,2])
C = Matrix([2,3,2])
P = Matrix([2,-5,5])
AB = B-A
AC = C-A
normal = AB.cross(AC)
primitive = normal/2
constant_beta = -primitive.dot(P)
print("AB =", tuple(AB))
print("AC =", tuple(AC))
print("AB x AC =", tuple(normal))
print("Forenklet normalvektor =", tuple(primitive))
print("Beta: x - y - 2*z + d = 0")
print("d =", constant_beta)
print("Kontroll i P =", primitive.dot(P)+constant_beta)
assert tuple(primitive) == (1,-1,-2)
assert constant_beta == 3
assert primitive.dot(P)+constant_beta == 0
Kjørt utskriftAB = (-1, 1, -1)
AC = (1, 3, -1)
AB x AC = (2, -2, -4)
Forenklet normalvektor = (1, -1, -2)
Beta: x - y - 2*z + d = 0
d = 3
Kontroll i P = 0

Fasit: \(\beta:\ x-y-2z+3=0\).

Vanlig feil: Å bruke punktene A, B og C direkte i β; de ligger i α, ikke nødvendigvis i det parallelle planet β.
Sensorpunkt: Sensor ser etter normalvektor, parallellitet og innsetting av P.
Del 2 / Oppgave 2bTangentpunkter mellom parallelle plan

Oppgave 2b

Oppgave: En kule tangerer \(\alpha\) i A og \(\beta\) i et punkt Q. Bestem eksakte koordinater til Q.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Radiene til tangentpunktene står normalt på planene. Derfor ligger A og Q på samme linje parallell med normalvektoren.

  1. Finn α-likningen
    Med normalvektor \((1,-1,-2)\) og punkt A får vi \[\alpha:x-y-2z+5=0\]
  2. Parametriser normalen gjennom A
    \[Q=A+t(1,-1,-2)=(1+t,-t,3-2t)\]
  3. Krev at Q ligger i β
    \[(1+t)-(-t)-2(3-2t)+3=0\]
  4. Løs for t
    \[-2+6t=0\Rightarrow t=1/3\]
  5. Finn Q
    \[Q=\left(1+\frac13,-\frac13,3-\frac23\right)\]
  6. Skriv eksakt svar
    \[Q=\left(\frac43,-\frac13,\frac73\right)\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Line(A,A+(1,-1,-2))
Resultat: normalen gjennom A
2Intersect(Line(...),beta)
Resultat: \(Q=(4/3,-1/3,7/3)\)
Tolkning: Q ligger i β, og vektoren AQ er parallell med begge planenes normalvektor.
Visualisering for Oppgave 2b
Planene er parallelle. A og Q ligger på samme normal, og kulens sentrum S er midtpunktet mellom tangentpunktene.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import Matrix, symbols, Eq, solve, Rational, simplify
t = symbols('t', real=True)
A = Matrix([1,0,3])
normal = Matrix([1,-1,-2])
Q_t = A + t*normal
beta_expression = Q_t[0]-Q_t[1]-2*Q_t[2]+3
parameter = solve(Eq(beta_expression,0), t)[0]
Q = Q_t.subs(t, parameter)
center = (A+Q)/2
print("Normalen gjennom A: A + t*n =", tuple(Q_t))
print("Beta-uttrykk langs normalen =", beta_expression)
print("t =", parameter)
print("Q =", tuple(Q))
print("Kontroll Q i beta =", simplify(Q[0]-Q[1]-2*Q[2]+3))
print("Kulens sentrum =", tuple(center))
print("AQ =", tuple(Q-A))
assert parameter == Rational(1,3)
assert tuple(Q) == (Rational(4,3),Rational(-1,3),Rational(7,3))
Kjørt utskriftNormalen gjennom A: A + t*n = (t + 1, -t, 3 - 2*t)
Beta-uttrykk langs normalen = 6*t - 2
t = 1/3
Q = (4/3, -1/3, 7/3)
Kontroll Q i beta = 0
Kulens sentrum = (7/6, -1/6, 8/3)
AQ = (1/3, -1/3, -2/3)

Fasit: \(Q=(4/3,-1/3,7/3)\).

Vanlig feil: Å velge et vilkårlig punkt i β i stedet for skjæringen mellom β og normalen gjennom A.
Sensorpunkt: Sensor ser etter normalretningen og eksakt skjæring med β.
Del 2 / Oppgave 3aVektorfart i rommet

Oppgave 3a

Oppgave: Posisjonen er \(\vec r(t)=[1+e^{t/20},\,1-\sin t,\,\frac1{10}e^{-2t+2}+\cos t]\), \(t\in[0,5]\). Bestem banefarten etter 1 sekund.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Banefarten er lengden av den deriverte posisjonsvektoren.

  1. Deriver x-komponenten
    \[x\prime(t)=\frac1{20}e^{t/20}.\]
  2. Deriver y-komponenten
    \[y\prime(t)=-\cos t.\]
  3. Deriver z-komponenten
    \[z\prime(t)=-\frac15e^{-2t+2}-\sin t.\]
  4. Skriv fartsvektoren
    \[\vec v(t)=\left[\frac{e^{t/20}}{20},-\cos t,-\frac15e^{-2t+2}-\sin t\right].\]
  5. Sett inn t=1
    \[\vec v(1)=\left[\frac{e^{1/20}}{20},-\cos1,-\frac15-\sin1\right].\]
  6. Finn lengden
    \[|\vec v(1)|=\sqrt{\left(\frac{e^{1/20}}{20}\right)^2+\cos^21+\left(\frac15+\sin1\right)^2}\approx1{,}174.\]

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Derivative(1+exp(t/20),t)
Resultat: \(e^{t/20}/20\)
2Derivative(1-sin(t),t)
Resultat: \(-\cos t\)
3sqrt((exp(1/20)/20)^2+cos(1)^2+(1/5+sin(1))^2)
Resultat: \(1{,}17446\)
Tolkning: Komponentvis derivasjon og vektorlengde gir banefarten i cm/s.
Visualisering for Oppgave 3a
Posisjonsvektoren beskriver en romkurve for dysen i tidsintervallet 0 til 5 sekunder.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, exp, sin, cos, Matrix, diff, sqrt, N, simplify, Rational
t = symbols('t', real=True)
r = Matrix([1 + exp(t/20), 1 - sin(t), Rational(1,10)*exp(-2*t+2) + cos(t)])
v = r.diff(t)
v1 = simplify(v.subs(t, 1))
speed1 = sqrt(simplify(v1.dot(v1)))
print("r(t) =", list(r))
print("v(t) = r'(t) =", list(v))
print("v(1) =", list(v1))
print("|v(1)| eksakt =", speed1)
print("|v(1)| desimal =", N(speed1, 15), "cm/s")
assert abs(float(N(speed1, 20)) - 1.174457883969599) < 1e-12
Kjørt utskriftr(t) = [exp(t/20) + 1, 1 - sin(t), exp(2 - 2*t)/10 + cos(t)]
v(t) = r'(t) = [exp(t/20)/20, -cos(t), -exp(2 - 2*t)/5 - sin(t)]
v(1) = [exp(1/20)/20, -cos(1), -sin(1) - 1/5]
|v(1)| eksakt = sqrt(exp(1/10)/400 + 2*sin(1)/5 + 26/25)
|v(1)| desimal = 1.17445788396960 cm/s

Fasit: Banefarten etter 1 sekund er omtrent \(1{,}174\ \text{cm/s}\).

Vanlig feil: Å oppgi fartsvektoren uten å beregne lengden.
Sensorpunkt: Sensor ser etter komponentvis derivasjon, innsetting av t=1 og korrekt norm.
Del 2 / Oppgave 3bNumerisk minimering av banefart

Oppgave 3b

Oppgave: Ved hvilket tidspunkt er banefarten lavest?
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi minimerer kvadratet av farten på det lukkede intervallet. Det gir samme minimum og unngår en unødvendig kvadratrot i derivasjonen.

  1. Definer fartskvadratet
    \[s^2(t)=\frac{e^{t/10}}{400}+\cos^2t+\left(\frac15e^{-2t+2}+\sin t\right)^2.\]
  2. Deriver digitalt
    Derivert av fartskvadratet settes lik null og løses numerisk.
  3. Finn kritisk punkt
    Det indre kritiske punktet er \(t\approx3{,}542010\).
  4. Kontroller endepunktene
    \(s(0)\approx1{,}7851\) og \(s(5)\approx1{,}0020\).
  5. Sammenlign
    \(s(3{,}542010)\approx1{,}001298\), som er mindre enn begge endepunktsverdiene.
  6. Konkluder
    Banefarten er lavest etter omtrent \(3{,}54\) sekunder.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1s(t)=sqrt((exp(t/20)/20)^2+cos(t)^2+(exp(-2t+2)/5+sin(t))^2)
Resultat: fartsfunksjonen
2Extremum(s,0,5)
Resultat: \(t\approx3{,}54201\), \(s\approx1{,}00130\)
Tolkning: Numerisk ekstremalpunkt og endepunktskontroll viser at dette er det globale minimumet på intervallet.
Visualisering for Oppgave 3b
Farten ved t=1 er omtrent 1,174 cm/s, og minimumsfarten opptrer ved t omtrent 3,542 s.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
import numpy as np
from scipy.optimize import minimize_scalar
from math import exp, sin, cos, sqrt

def speed(t):
    return sqrt((exp(t/20)/20)**2 + cos(t)**2 + (0.2*exp(-2*t+2) + sin(t))**2)

result = minimize_scalar(speed, bounds=(0, 5), method="bounded", options={"xatol": 1e-14})
t_min = result.x
s_min = result.fun
print("Optimalisering vellykket =", result.success)
print("t_min =", format(t_min, ".15f"), "s")
print("s(t_min) =", format(s_min, ".15f"), "cm/s")
print("s(0) =", format(speed(0), ".15f"), "cm/s")
print("s(5) =", format(speed(5), ".15f"), "cm/s")
# Tett rutenett som uavhengig kontroll
grid = np.linspace(0, 5, 200001)
values = np.array([speed(float(x)) for x in grid])
index = int(np.argmin(values))
print("Rutenettminimum ved t =", format(grid[index], ".6f"), "med fart", format(values[index], ".12f"))
assert result.success
assert abs(t_min - 3.54201023) < 2e-6
assert s_min < speed(0) and s_min < speed(5)
Kjørt utskriftOptimalisering vellykket = True
t_min = 3.542010118761751 s
s(t_min) = 1.001298264729785 cm/s
s(0) = 1.785056302004441 cm/s
s(5) = 1.001994578016918 cm/s
Rutenettminimum ved t = 3.542000 med fart 1.001298264730

Fasit: Minimumsfarten opptrer ved \(t\approx3{,}542\ \text{s}\).

Vanlig feil: Å finne et kritisk punkt uten å kontrollere endepunktene i intervallet.
Sensorpunkt: Sensor ser etter dokumentert numerisk minimering og en global sammenligning på [0,5].
Del 2 / Oppgave 3cRetningsvektor og parallelle plan

Oppgave 3c

Oppgave: Avgjør om fartsretningen noen gang er parallell med xy-planet eller parallell med yz-planet.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? En vektor er parallell med xy-planet når z-komponenten er null, og parallell med yz-planet når x-komponenten er null.

  1. Bruk fartsvektoren
    \[\vec v(t)=\left[\frac{e^{t/20}}{20},-\cos t,-\frac15e^{-2t+2}-\sin t\right].\]
  2. Test xy-planet
    Vi løser \[-\frac15e^{-2t+2}-\sin t=0\] på \([0,5]\).
  3. Finn tidspunktet numerisk
    Løsningen er \(t\approx3{,}144337\). Da har fartsvektoren null z-komponent og er parallell med xy-planet.
  4. Test yz-planet
    Her måtte x-komponenten være null: \[\frac{e^{t/20}}{20}=0.\]
  5. Bruk positiviteten til eksponentialfunksjonen
    \(e^{t/20}>0\) for alle reelle t, så x-komponenten er alltid positiv.
  6. Konkluder
    Fartsretningen er parallell med xy-planet én gang, ved \(t\approx3{,}144\), men aldri parallell med yz-planet.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1z(t)=-exp(-2t+2)/5-sin(t)
Resultat: z-komponenten
2Root(z,3,4)
Resultat: \(t\approx3{,}144337\)
3exp(t/20)/20
Resultat: \(>0\) for alle t
Tolkning: Roten i z-komponenten gir parallellitet med xy-planet. Positiv x-komponent utelukker parallellitet med yz-planet.
Visualisering for Oppgave 3c
Posisjonsvektoren beskriver en romkurve for dysen i tidsintervallet 0 til 5 sekunder.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from scipy.optimize import brentq
from math import exp, sin, cos

def vx(t):
    return exp(t/20)/20

def vy(t):
    return -cos(t)

def vz(t):
    return -0.2*exp(-2*t+2) - sin(t)

root_xy = brentq(vz, 3, 4)
print("Rot for z-komponenten i [3,4] =", format(root_xy, ".15f"), "s")
print("v_x ved roten =", format(vx(root_xy), ".15f"))
print("v_y ved roten =", format(vy(root_xy), ".15f"))
print("v_z ved roten =", format(vz(root_xy), ".15e"))
# x-komponenten er positiv på hele intervallet; minimum opptrer ved t=0.
print("min v_x på [0,5] = v_x(0) =", vx(0))
print("max v_x på [0,5] = v_x(5) =", vx(5))
print("Parallell med xy-planet = ja")
print("Parallell med yz-planet = nei")
assert abs(vz(root_xy)) < 1e-12
assert vx(0) > 0 and vx(5) > 0
Kjørt utskriftRot for z-komponenten i [3,4] = 3.144337277528660 s
v_x ved roten = 0.058512468559978
v_y ved roten = 0.999996233522081
v_z ved roten = 1.212138028838794e-15
min v_x på [0,5] = v_x(0) = 0.05
max v_x på [0,5] = v_x(5) = 0.06420127083438706
Parallell med xy-planet = ja
Parallell med yz-planet = nei

Fasit: Parallell med xy-planet ved \(t\approx3{,}144337\ \text{s}\). Aldri parallell med yz-planet.

Vanlig feil: Å bytte om hvilke komponenter som må være null for de to planene.
Sensorpunkt: Sensor ser etter korrekt komponentbetingelse, numerisk rot og et argument for at x-komponenten aldri er null.
Del 2 / Oppgave 4aAritmetisk og geometrisk følge

Oppgave 4a

Oppgave: Bestem beløpet David får hver uke de fire første ukene i begge tilbudene.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Tilbud 1 er aritmetisk med differanse 10, mens tilbud 2 er geometrisk med vekstfaktor 1,05.

  1. Tilbud 1, uke 1
    \(a_1=100\).
  2. Fortsett aritmetisk
    \(a_2=110\), \(a_3=120\), \(a_4=130\).
  3. Tilbud 2, uke 1
    \(b_1=100\).
  4. Bruk vekstfaktoren
    \(b_2=105\), \(b_3=110{,}25\).
  5. Finn uke 4
    \(b_4=110{,}25\cdot1{,}05=115{,}7625\).
  6. Oppsummer
    Tilbud 1: 100, 110, 120, 130. Tilbud 2: 100, 105, 110,25, 115,7625 kroner.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Sequence(100+10(n-1),n,1,4)
Resultat: \(100,110,120,130\)
2Sequence(100*1.05^(n-1),n,1,4)
Resultat: \(100,105,110{,}25,115{,}7625\)
Tolkning: De to listene viser henholdsvis konstant differanse og konstant prosentvis vekst.
Visualisering for Oppgave 4a
Det geometriske tilbudet passerer det aritmetiske ukebeløpet for første gang i uke 28.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from decimal import Decimal, getcontext
getcontext().prec = 28
offer1 = []
offer2 = []
a = Decimal("100")
b = Decimal("100")
for week in range(1, 5):
    offer1.append(a)
    offer2.append(b)
    print(f"uke {week}: tilbud 1 = {a} kr, tilbud 2 = {b} kr")
    a = a + Decimal("10")
    b = b * Decimal("1.05")
print("Tilbud 1, fire uker =", offer1)
print("Tilbud 2, fire uker =", offer2)
assert offer1 == [Decimal("100"), Decimal("110"), Decimal("120"), Decimal("130")]
assert offer2[-1] == Decimal("115.762500")
Kjørt utskriftuke 1: tilbud 1 = 100 kr, tilbud 2 = 100 kr
uke 2: tilbud 1 = 110 kr, tilbud 2 = 105.00 kr
uke 3: tilbud 1 = 120 kr, tilbud 2 = 110.2500 kr
uke 4: tilbud 1 = 130 kr, tilbud 2 = 115.762500 kr
Tilbud 1, fire uker = [Decimal('100'), Decimal('110'), Decimal('120'), Decimal('130')]
Tilbud 2, fire uker = [Decimal('100'), Decimal('105.00'), Decimal('110.2500'), Decimal('115.762500')]

Fasit: Tilbud 1: \(100,110,120,130\) kr. Tilbud 2: \(100,105,110{,}25,115{,}7625\) kr.

Vanlig feil: Å legge til 5 kroner i tilbud 2 i stedet for å multiplisere hele beløpet med 1,05.
Sensorpunkt: Sensor ser etter fire ledd i hver følge og korrekt bruk av rekursjonene.
Del 2 / Oppgave 4bSammenligning av eksplisitte følger

Oppgave 4b

Oppgave: Hvor mange uker tar det før tilbud 2 gir høyere ukelønn enn tilbud 1?
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi sammenligner de eksplisitte formlene og finner det første heltallet n der den geometriske følgen er størst.

  1. Finn formel for tilbud 1
    \[a_n=100+10(n-1).\]
  2. Finn formel for tilbud 2
    \[b_n=100\cdot1{,}05^{n-1}.\]
  3. Sett opp ulikheten
    \[100\cdot1{,}05^{n-1}>100+10(n-1).\]
  4. Søk over hele uker
    Ulikheten løses numerisk eller ved en løkke over positive heltall.
  5. Kontroller uke 27
    \(b_{27}\approx355{,}57<a_{27}=360\).
  6. Kontroller uke 28
    \(b_{28}\approx373{,}35>a_{28}=370\). Derfor er uke 28 den første.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1a(n)=100+10(n-1)
Resultat: aritmetisk modell
2b(n)=100*1.05^(n-1)
Resultat: geometrisk modell
3First(KeepIf(b(n)>a(n),Sequence(n,n,1,100)))
Resultat: 28
Tolkning: Heltallskontrollen viser at skiftet skjer mellom uke 27 og 28.
Visualisering for Oppgave 4b
Det geometriske tilbudet passerer det aritmetiske ukebeløpet for første gang i uke 28.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
def a(n):
    return 100 + 10*(n-1)

def b(n):
    return 100*1.05**(n-1)

first_week = None
for n in range(1, 101):
    if b(n) > a(n):
        first_week = n
        break
print("Første uke med b_n > a_n =", first_week)
for n in [26, 27, 28, 29]:
    print(f"n={n}: a_n={a(n):.6f}, b_n={b(n):.6f}, b_n-a_n={b(n)-a(n):.6f}")
assert first_week == 28
assert b(27) <= a(27)
assert b(28) > a(28)
Kjørt utskriftFørste uke med b_n > a_n = 28
n=26: a_n=350.000000, b_n=338.635494, b_n-a_n=-11.364506
n=27: a_n=360.000000, b_n=355.567269, b_n-a_n=-4.432731
n=28: a_n=370.000000, b_n=373.345632, b_n-a_n=3.345632
n=29: a_n=380.000000, b_n=392.012914, b_n-a_n=12.012914

Fasit: Tilbud 2 gir høyere ukelønn første gang i **uke 28**.

Vanlig feil: Å runde en kontinuerlig likningsløsning uten å kontrollere de to nærmeste hele ukene.
Sensorpunkt: Sensor ser etter eksplisitte formler og kontroll av at uke 28 faktisk er den første.
Del 2 / Oppgave 4cSammenligning av delsummer

Oppgave 4c

Oppgave: Hvor mange uker tar det før tilbud 2 til sammen har gitt mer lønn enn tilbud 1?
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Nå må vi sammenligne summen av alle ukebeløpene, ikke bare beløpet i én uke.

  1. Finn summen i tilbud 1
    \[A_n=\frac n2\bigl(2\cdot100+(n-1)10\bigr).\]
  2. Finn summen i tilbud 2
    \[B_n=100\frac{1{,}05^n-1}{1{,}05-1}.\]
  3. Sett opp sammenligningen
    Vi søker etter første heltall n med \(B_n>A_n\).
  4. Kontroller n=38
    \(A_{38}=10830\) og \(B_{38}\approx10770{,}95\), så tilbud 2 ligger fortsatt bak.
  5. Kontroller n=39
    \(A_{39}=11310\) og \(B_{39}\approx11409{,}50\).
  6. Konkluder
    Tilbud 2 har gitt mest samlet etter 39 uker.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1A(n)=n/2*(200+10(n-1))
Resultat: aritmetisk delsum
2B(n)=100*(1.05^n-1)/0.05
Resultat: geometrisk delsum
3First(KeepIf(B(n)>A(n),Sequence(n,n,2,100)))
Resultat: 39
Tolkning: Delsummene krysser mellom uke 38 og 39.
Visualisering for Oppgave 4c
Den samlede summen i tilbud 2 passerer tilbud 1 for første gang etter 39 uker.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
def sum_offer1(n):
    return n/2*(2*100 + (n-1)*10)

def sum_offer2(n):
    return 100*(1.05**n - 1)/0.05

first_week = None
for n in range(2, 201):
    if sum_offer2(n) > sum_offer1(n):
        first_week = n
        break
print("Første n med samlet tilbud 2 > samlet tilbud 1 =", first_week)
for n in [37, 38, 39, 40]:
    A = sum_offer1(n)
    B = sum_offer2(n)
    print(f"n={n}: A_n={A:.6f}, B_n={B:.6f}, B_n-A_n={B-A:.6f}")
assert first_week == 39
assert sum_offer2(38) <= sum_offer1(38)
assert sum_offer2(39) > sum_offer1(39)
Kjørt utskriftFørste n med samlet tilbud 2 > samlet tilbud 1 = 39
n=37: A_n=10360.000000, B_n=10162.813886, B_n-A_n=-197.186114
n=38: A_n=10830.000000, B_n=10770.954580, B_n-A_n=-59.045420
n=39: A_n=11310.000000, B_n=11409.502309, B_n-A_n=99.502309
n=40: A_n=11800.000000, B_n=12079.977424, B_n-A_n=279.977424

Fasit: Tilbud 2 har gitt mer samlet lønn etter **39 uker**.

Vanlig feil: Å bruke sammenligningen av ukebeløp fra oppgave b i stedet for delsummer.
Sensorpunkt: Sensor ser etter begge sumformlene og kontroll av uke 38 og 39.
Del 2 / Oppgave 5aOmdreiningsvolum med sylinderskall

Oppgave 5a

Oppgave: Funksjonen er \(f(x)=\frac{2-\cos x}{\sin x}\), \(D_f=[\pi/4,3\pi/4]\). Grafen og området under den roteres om y-aksen. Bestem volumet av omdreiningslegemet.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Når et område under en graf roteres om y-aksen, er sylinderskall en direkte metode: radius x, høyde f(x) og tykkelse dx.

  1. Skriv skallformelen
    Et tynt skall har volum \(dV=2\pi\cdot x\cdot f(x)\,dx\).
  2. Sett inn funksjonen
    \[V=2\pi\int_{\pi/4}^{3\pi/4}x\frac{2-\cos x}{\sin x}\,dx.\]
  3. Bruk digital integrasjon
    Integralets stamfunksjon er ikke en vanlig elementær R2-funksjon, så vi dokumenterer numerisk CAS-beregning.
  4. Beregn integralet
    \[\int_{\pi/4}^{3\pi/4}x\frac{2-\cos x}{\sin x}\,dx\approx5{,}909404.\]
  5. Multipliser med 2π
    \[V\approx2\pi\cdot5{,}909404\approx37{,}129872.\]
  6. Oppgi volum
    Volumet er omtrent \(37{,}13\) kubikkenheter.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Integral(2*pi*x*(2-cos(x))/sin(x),x,pi/4,3*pi/4)
Resultat: \(37{,}129871865\)
Tolkning: CAS beregner sylinderskallintegralet direkte. Radiusen er x fordi rotasjonsaksen er y-aksen.
Visualisering for Oppgave 5a
Ved rotasjon om y-aksen har legemet maksimal høyde 2√2+1 ≈ 3,828, mens kjeglen bare er omtrent 2,686 høy.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from math import pi
from scipy.integrate import quad
import mpmath as mp

def f(x):
    return (2-mp.cos(x))/mp.sin(x)

def shell_integrand_float(x):
    from math import sin, cos
    return 2*pi*x*(2-cos(x))/sin(x)

a = pi/4
b = 3*pi/4
volume_scipy, error = quad(shell_integrand_float, a, b, epsabs=1e-12, epsrel=1e-12)
mp.mp.dps = 50
volume_mpmath = 2*mp.pi*mp.quad(lambda x: x*f(x), [mp.pi/4, 3*mp.pi/4])
inner_integral = volume_mpmath/(2*mp.pi)
print("Nedre grense a =", format(a, ".15f"))
print("Øvre grense b =", format(b, ".15f"))
print("Integral uten faktoren 2*pi =", mp.nstr(inner_integral, 25))
print("Volum fra scipy.integrate.quad =", format(volume_scipy, ".15f"))
print("Estimert integrasjonsfeil =", format(error, ".3e"))
print("Volum fra mpmath (50 siffer presisjon) =", mp.nstr(volume_mpmath, 35))
print("Forskjell mellom metodene =", mp.nstr(abs(volume_mpmath-volume_scipy), 12))
assert abs(volume_scipy - 37.12987186509575) < 1e-11
assert abs(float(volume_mpmath) - volume_scipy) < 1e-11
Kjørt utskriftNedre grense a = 0.785398163397448
Øvre grense b = 2.356194490192345
Integral uten faktoren 2*pi = 5.909402643698679917773135
Volum fra scipy.integrate.quad = 37.129871865095751
Estimert integrasjonsfeil = 4.592e-12
Volum fra mpmath (50 siffer presisjon) = 37.129871865095750596162950644693611
Forskjell mellom metodene = 5.08327822642e-16

Fasit: \(V\approx37{,}13\) kubikkenheter.

Vanlig feil: Å bruke skiveformelen \(\pi\int f(x)^2dx\), som gjelder ved rotasjon om x-aksen, ikke y-aksen.
Sensorpunkt: Sensor ser etter riktig rotasjonsakse, sylinderskallintegralet og dokumentert digital beregning.
Del 2 / Oppgave 5bDimensjonskontroll i en kjegle

Oppgave 5b

Oppgave: Omdreiningslegemet skal plasseres i en rett kjegle med radius 4 og volum 45. Avgjør om legemet får plass.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Volum alene avgjør ikke om et legeme får plass. Her er høyden allerede en avgjørende dimensjon.

  1. Finn kjeglens høyde
    \[45=\frac13\pi\cdot4^2h\Rightarrow h=\frac{135}{16\pi}\approx2{,}686.\]
  2. Finn legemets vertikale utstrekning
    Området som roteres går fra \(y=0\) til den største verdien av f på intervallet.
  3. Undersøk f
    \[f\prime(x)=\frac{1-2\cos x}{\sin^2x}.\] Det indre kritiske punktet \(x=\pi/3\) er et minimum, så maksimum finnes i et endepunkt.
  4. Beregn endepunktene
    \[f(\pi/4)=2\sqrt2-1,\qquad f(3\pi/4)=2\sqrt2+1.\]
  5. Sammenlign høydene
    Legemets høyde er \(2\sqrt2+1\approx3{,}828\), mens kjeglens høyde er omtrent \(2{,}686\).
  6. Konkluder
    Siden legemet er høyere enn hele kjeglen, kan det ikke få plass. At volumet \(37{,}13<45\) er ikke tilstrekkelig.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
13*45/(pi*4^2)
Resultat: \(135/(16\pi)\approx2{,}686\)
2Max((2-cos(x))/sin(x),pi/4<=x<=3pi/4)
Resultat: \(2\sqrt2+1\approx3{,}828\)
Tolkning: Kjeglen har større volum, men for liten høyde. Dimensjonskontrollen avgjør spørsmålet.
Visualisering for Oppgave 5b
Ved rotasjon om y-aksen har legemet maksimal høyde 2√2+1 ≈ 3,828, mens kjeglen bare er omtrent 2,686 høy.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, sin, cos, pi, sqrt, diff, simplify, N, Rational
x = symbols('x', real=True)
f = (2-cos(x))/sin(x)
fp = simplify(diff(f, x))
cone_height = Rational(3)*45/(pi*4**2)
left = simplify(f.subs(x, pi/4))
right = simplify(f.subs(x, 3*pi/4))
critical = pi/3
critical_value = simplify(f.subs(x, critical))
body_height = right
print("f'(x) =", fp)
print("f(pi/4) =", left, "=", N(left, 15))
print("f(pi/3) =", critical_value, "=", N(critical_value, 15))
print("f(3*pi/4) =", right, "=", N(right, 15))
print("Kjeglehøyde =", cone_height, "=", N(cone_height, 15))
print("Legemets maksimale høyde =", body_height, "=", N(body_height, 15))
print("Høydeforskjell legeme - kjegle =", N(body_height-cone_height, 15))
print("Får plass =", bool(body_height <= cone_height))
assert simplify(fp - (1-2*cos(x))/sin(x)**2) == 0
assert body_height > cone_height
Kjørt utskriftf'(x) = (1 - 2*cos(x))/sin(x)**2
f(pi/4) = -1 + 2*sqrt(2) = 1.82842712474619
f(pi/3) = sqrt(3) = 1.73205080756888
f(3*pi/4) = 1 + 2*sqrt(2) = 3.82842712474619
Kjeglehøyde = 135/(16*pi) = 2.68573966467573
Legemets maksimale høyde = 1 + 2*sqrt(2) = 3.82842712474619
Høydeforskjell legeme - kjegle = 1.14268746007046
Får plass = False

Fasit: Nei. Legemets høyde er omtrent \(3{,}828\), mens kjeglen bare er omtrent \(2{,}686\) høy.

Vanlig feil: Å konkludere at legemet får plass bare fordi volumet er mindre enn 45.
Sensorpunkt: Sensor ser etter beregnet kjeglehøyde og en konkret sammenligning med legemets maksimale høyde.
Del 2 / Oppgave 6aAvstandsformelen og polylinje

Oppgave 6a

Oppgave: Forklar at lengden fra \((x_i,f(x_i))\) til \((x_{i+1},f(x_{i+1}))\) er \(S_i=\sqrt{h^2+k_i^2}\), der \(k_i=f(x_{i+1})-f(x_i)\).
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? To nabopunkter danner hypotenusen i en rettvinklet trekant med horisontal og vertikal forskjell.

  1. Finn horisontal forskjell
    Siden \(x_{i+1}=x_i+h\), er \[\Delta x=x_{i+1}-x_i=h.\]
  2. Finn vertikal forskjell
    \[\Delta y=f(x_{i+1})-f(x_i)=k_i.\]
  3. Bruk avstandsformelen
    \[S_i=\sqrt{(\Delta x)^2+(\Delta y)^2}.\]
  4. Sett inn forskjellene
    \[S_i=\sqrt{h^2+k_i^2}.\]
  5. Tolk geometrisk
    Uttrykket er hypotenusen i den lille rettvinklede trekanten mellom nabopunktene.
  6. Knytt til total lengde
    Summen \(\sum_{i=0}^{N-1}S_i\) er polylinjens tilnærming til grafens lengde.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Distance((x_i,f(x_i)),(x_i+h,f(x_i+h)))
Resultat: \(\sqrt{h^2+(f(x_i+h)-f(x_i))^2}\)
Tolkning: Avstandsformelen gir nøyaktig lengden av hvert linjestykke i polylinjen.
Visualisering for Oppgave 6a
Grafen er den øvre halvdelen av en enhetssirkel. Polygonlengden nærmer seg derfor den eksakte buelengden π.

Digital kontroll i Python

Python 3.13 / SymPy 1.14 - faktisk kjørt
from sympy import symbols, sqrt, simplify
h, k = symbols('h k', real=True)
distance = sqrt(h**2 + k**2)
print("Horisontal katet = h")
print("Vertikal katet = k_i")
print("Avstandsformelen gir S_i =", distance)
print("S_i^2 - (h^2+k_i^2) =", simplify(distance**2 - (h**2+k**2)))
assert simplify(distance**2 - (h**2+k**2)) == 0
Kjørt utskriftHorisontal katet = h
Vertikal katet = k_i
Avstandsformelen gir S_i = sqrt(h**2 + k**2)
S_i^2 - (h^2+k_i^2) = 0

Fasit: \(S_i=\sqrt{h^2+k_i^2}\).

Vanlig feil: Å bruke \(h+k_i\) i stedet for Pytagoras.
Sensorpunkt: Sensor ser etter de to koordinatforskjellene og avstandsformelen.
Del 2 / Oppgave 6bNumerisk buelengde med polylinje

Oppgave 6b

Oppgave: For \(g(x)=\sqrt{1-x^2}\), \(x\in[-1,1]\), beregn en god tilnærming til grafens lengde med polylinjemetoden og vurder svaret.
Vekting: Alle deloppgavene vektes likt.
Vis løsning

Hva spør oppgaven om? Vi implementerer akkurat metoden i oppgaven med mange like delintervaller.

  1. Velg antall delintervaller
    For eksempel \(N=100000\). Da er \(h=2/N\).
  2. Lag punktene
    \(x_i=-1+ih\) og \(y_i=g(x_i)\).
  3. Beregn hvert linjestykke
    \[S_i=\sqrt{h^2+(y_{i+1}-y_i)^2}.\]
  4. Summer
    \[L_N=\sum_{i=0}^{N-1}S_i.\]
  5. Numerisk resultat
    Med \(N=100000\) får vi \(L_N\approx3{,}14159262\).
  6. Vurder rimeligheten
    Grafen er øvre halvsirkel med radius 1. Den eksakte buelengden er derfor \(\pi\approx3{,}14159265\), så tilnærmingen er svært god.

Digital kontroll i GeoGebra/CAS

GeoGebra / CAS
1Length(sqrt(1-x^2),-1,1)
Resultat: \(\pi\)
2Numeric(pi)
Resultat: \(3{,}141592654\)
Tolkning: GeoGebra gir den eksakte buelengden som kontroll, mens Python følger den etterspurte polylinjemetoden.
Visualisering for Oppgave 6b
Grafen er den øvre halvdelen av en enhetssirkel. Polygonlengden nærmer seg derfor den eksakte buelengden π.

Digital kontroll i Python

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

def polyline_length(N):
    x = np.linspace(-1.0, 1.0, N + 1)
    y = np.sqrt(np.maximum(0.0, 1.0 - x*x))
    h = 2.0/N
    k = np.diff(y)
    segments = np.sqrt(h*h + k*k)
    return float(np.sum(segments)), h, segments

for N in [100, 1000, 10000, 100000]:
    length, h, segments = polyline_length(N)
    print(f"N={N:6d}, h={h:.10f}, polylengde={length:.12f}, feil mot pi={length-pi:.12e}")
length, h, segments = polyline_length(100000)
print("Antall linjestykker =", len(segments))
print("Første linjestykke =", format(segments[0], ".15f"))
print("Siste linjestykke =", format(segments[-1], ".15f"))
print("Endelig tilnærming =", format(length, ".15f"))
print("Eksakt halvsirkellengde pi =", format(pi, ".15f"))
assert abs(length - pi) < 1e-6
Kjørt utskriftN=   100, h=0.0200000000, polylengde=3.140760589842, feil mot pi=-8.320637473282e-04
N=  1000, h=0.0020000000, polylengde=3.141566356216, feil mot pi=-2.629737331361e-05
N= 10000, h=0.0002000000, polylengde=3.141591822040, feil mot pi=-8.315499977485e-07
N=100000, h=0.0000200000, polylengde=3.141592627294, feil mot pi=-2.629577444679e-08
Antall linjestykker = 100000
Første linjestykke = 0.006324555320337
Siste linjestykke = 0.006324555320320
Endelig tilnærming = 3.141592627294019
Eksakt halvsirkellengde pi = 3.141592653589793

Fasit: Grafens lengde er omtrent \(3{,}141593\), altså svært nær \(\pi\).

Vanlig feil: Å beregne arealet under halvsirkelen i stedet for lengden langs buen.
Sensorpunkt: Sensor ser etter implementert polylinjesum, tilstrekkelig stor N og en rimelighetsvurdering mot halvsirkelen.