Uge 1: Øvelser#
Opgaver – Store Dag#
1: Funktion eller ej?#
Betragt følger korrespondance mellem \(a\) og \(b\) værdier:
\(a\) |
\(b\) |
---|---|
1 |
0 |
2 |
1 |
0 |
3 |
1 |
2 |
Vi betragter funktioner hvis definitionsmængde (domain) er en delmængde af \(\{0,1,2,3\}\) og hvis dispositionsmængde (co-domain) er \(\{0,1,2,3\}\). Vi skal bestemme om \(f\) og \(g\) definerer funktioner, hvis vi lader \(f\) følge reglen at første søjle (\(a\)-værdierne) er input og anden søjle (\(b\)-værdierne) skal være output af funktionen \(f\) og definitionsmængden er \(\{0,1,2\}\); og vi lader \(g\) følge reglen om at anden søjle er input og første søjle skal være output af funktionen \(g\) med definitionsmængde \(\{0,1,2,3\}\).
Definerer \(f\) en funktion? Gør \(g\)? I bekræftende fald: bestem værdimængden/billedmængden (engelsk: range/image) for funktionen, og afgør om funktionen er injektiv og surjektiv.
Hint
Læs dette afsnit i noten
Svar
Kun \(g\) er en funktion, da \(f\) både forsøger at definere \(f(1)=0\) og \(f(1)=2\). Funktionen \(g\) har \(\mathrm{im}(g) = \{0,1,2,\} \subset \{0,1,2,3\}\) er derfor ikke surjektiv. Da \(g(0)=1\) og \(g(2)=1\) er den heller ikke injektiv.
2: Ens funktionsforskrifter?#
Vi betragter funktioner \(f_i : \mathbb{R} \to \mathbb{R}\) givet ved:
hvor \(x \in \mathbb{R}\).
Nogle af funktionerne er samme funktion. Find dem alle!
Hint
ReLU er defineret i noterne.
Hint
Find først \(f_i(x)\) for de forskellige funktioner for et par forskellige værdier af \(x\).
3: Mulige visualiseringer#
Diskuter om man kan visualisere nedenstående funktioner – i givet fald plot dem med SymPy/dtumathtools:
En skalarfunktion af to variable \(f: \mathbb{R}^2 \to \mathbb{R}, \, f(x_1,x_2) = \sqrt{\vert x_1 x_2 \vert}\)
En skalarfunktion af fire variable \(f: \mathbb{R}^4 \to \mathbb{R}, \, f(x_1,x_2,x_3,x_4) = \sqrt{\vert x_1 x_2 x_3 x_4 \vert}\)
En kompleks skalarfunktion af to variable \(f: \mathbb{R}^2 \to \mathbb{C}, \, f(x_1,x_2) = \sqrt{\vert x_1 x_2 \vert} + i \cos(x_1 + x_2)\)
Et vektorfelt i 2D \(\pmb{f}: \mathbb{R}^2 \to \mathbb{R}^2, \, \pmb{f}(x_1,x_2) = (-x_2/3, x_1/3)\)
Et vektorfelt i 3D \(\pmb{f}: \mathbb{R}^3 \to \mathbb{R}^3, \, \pmb{f}(x,y,z)= (x^3+yz^2, y^3-xz^2, z^3)\)
En funktion af formen \(\pmb{r}: [0,10] \to \mathbb{R}^3, \, \pmb{r}(t) = (\cos(t),\sin(t),t)\)
Note
Følgende Python kommandoer kan være nyttige:
dtuplot.plot3d
, dtuplot.plot_vector
,
dtuplot.plot3d_parametric_line
.
Hint
Når man plotter et vektorfelt, kan det være nødvendigt at skalere vektorerne (hvis de er for korte eller lange). Dette kan gøres ved at gange vektorfeltet igennem med en skalar, fx 0.1 * f
i stedet for f
.
4: Næste primtal-funktion#
Lad \(f: \mathbb{N} \to \mathbb{N}\) være en funktion, der returnerer det næste primtal (strengt) større end et givet naturligt tal \(n\). I denne opgave skal du først vurdere værdien af funktionen for to specifikke input og derefter vise, at funktionen er veldefineret, før du implementerer den i Python.
Spørgsmål a#
Find ved simple overvejelser \(f(10)\) og \(f(13)\).
Hint
Overvej primtallene efter \(n\): 2, 3, 5, 7, …
Svar
\(f(10) = 11\) og \(f(13) = 17\), da 11 er det mindste primtal større end 10, og 17 er det mindste primtal større end 13.
Spørgsmål b#
Argumenter for, at funktionen \(f(n)\) er veldefineret.
Hint
Dette betyder, at vi skal argumentere for at afbildningen \(f: \mathbb{N} \to \mathbb{N}\) er en funktion, altså, at den til ethvert element \(n \in \mathbb{N}\) entydigt knytter præcis ét element \(f(n) \in \mathbb{N}\).
Hint
Der findes uendeligt mange primtal og således uendeligt store primtal.
Svar
Eksistens: Der findes uendeligt mange primtal, så der vil altid være et primtal større end ethvert naturligt tal.
Entydighed: For ethvert tal \( n\) findes der et entydigt mindste primtal, der er større end \( n\).
Funktionen er derfor veldefineret, da der altid findes et næste primtal større end \( n\) (eksistens), og da der kun findes ét mindste primtal større end \( n\) (entydighed).
Spørgsmål c#
Kan man finde et funktionsudtryk for \(f(n)\)? Argumenter for, hvorfor det er eller ikke er muligt.
Svar
Der findes ingen kendt simpel formel, der direkte beregner det næste primtal større end et givet tal \( n\). Primtallene følger ingen enkel matematisk sammenhæng, så funktionen må beregnes algoritmisk ved at teste tal efter \(n\).
Spørgsmål d#
Implementer funktionen \(f(n)\) i Python, som tager et heltal \(n\) som input og returnerer det næste primtal større end \(n\). Definer en hjælpefunktion er_primtal(x)
til at afgøre, om et tal er primtal.
from math import sqrt
def er_primtal(x: int) -> bool:
"""Returnerer True hvis x er et primtal, ellers False."""
if x < 2:
return False
# Three lines of code missing
return True
def f(n: int) -> int:
"""Returnerer det næste primtal større end n."""
kandidat = n + 1
# Two lines of code missing
return kandidat
Hint
For er_primtal(x)
:
Du kan undersøge om
i
går op ix
vedx % i == 0
Tjek dette for alle
i
fra2
tilsqrt(x)
Returner
False
hvis det er tilfældet for eti
Hint
For f(n)
:
Tjek om
n+1
er et primtal.Tjek nærnest om
n+2
er et primtal.Osv. Stop når du finder et primtal og returner dette.
Svar
from math import sqrt
def er_primtal(x: int) -> bool:
"""Returnerer True hvis x er et primtal, ellers False."""
if x < 2:
return False
for i in range(2, int(sqrt(x)) + 1): # Vi behøver kun at tjekke op til kvadratroden af x
if x % i == 0:
return False
return True
def f(n: int) -> int:
"""Returnerer det næste primtal større end n."""
kandidat = n + 1
while not er_primtal(kandidat):
kandidat += 1
return kandidat
# Test-eksempler
if __name__ == "__main__":
n = 5
print(f"Det næste primtal større end {n} er {f(n)}.") # Skal returnere 7
n = 7
print(f"Det næste primtal større end {n} er {f(n)}.") # Skal returnere 11
5: lineær vektor-funktion#
Lad \(A \in \mathsf{M}_{3 \times 5}(\mathbb{R})\) være givet ved
Betragt vektorfunktionen \(\pmb{f}: \mathbb{R}^5 \to \mathbb{R}^3\) givet ved \(\pmb{f} = \pmb{x} \mapsto A\pmb{x}\), hvor \(\pmb{x}\) er en søjlevektor i \(\mathbb{R}\).
Spørgsmål a#
Angiv de 3 koordinatfunktioner for \(\pmb{f}\).
Hint
Husk at koordinatfunktionerne \(f_i\) er \(\pmb{f} = (f_1,f_2,f_3)\).
Spørgsmål b#
Angiv billedmængden \(\mathrm{im}(\pmb{f})\) for \(\pmb{f}\).
Hint
Hvad er rangen af \(A\)? Hvad er søjlerummet (column space \(\mathrm{col}A\)) af \(A\)?
Svar
\(\mathrm{im}(\pmb{f}) = \mathrm{col}A = \mathbb{R}^3 \)
Spørgsmål c#
Er vektorfunktionen \(\pmb{f}\) surjektiv og/eller injektiv?
Svar
\(\pmb{f}\) er surjektiv, da \(\mathrm{im}(\pmb{f}) = \mathbb{R}^3\). Den er ikke injektiv, da \(\mathrm{dim \, ker}(A) = 5-3=2\) (du bør finde to forskellige vektorer \(\pmb{x}_1, \pmb{x}_2 \in \mathbb{R}^5\) for hvilke \(\pmb{f}(\pmb{x}_1) = \pmb{f}(\pmb{x}_2)\)).
6: Chatbots og (dis-)kontinuitet#
Spørg en chatbot, fx BingChat, Open IAs ChatGPT eller Microsoft Copilot, om den kan give et eksempel på en funktion \(f: \mathbb{R} \to \mathbb{R}\), der er kontinuert i præcis 3 punkter og diskontinuert i alle andre punkter. Vurdér om chatbottens svar er korrekt eller forkert. Kan man plotte funktionen fra chatbottens eksempel?
7: Python-funktion som matematisk funktion#
Betragt følgende funktion:
from sympy import *
from dtumathtools import *
init_printing()
def f(x1, x2):
return Matrix([ln(x1), x1 * x2**2 + 1])
Note
Man kan definere den samme funktion med følgende en-linjes kald: myfun = lambda x1,x2: Matrix([ln(x1), x1 * x2**2 + 1])
. Der er Python-tekniske forskelle på de to metoder, men i brug minder de meget om hinanden. Vi anbefaler generelt at der bruges def
-funktioner. Lambda-funktioner er dog brugbare i situationer hvor funktionen kun skal bruges én gang og i kald til andre funktioner, fx sorted(['a1', 'z0'], key = lambda x: int(x[1]))
.
Note
Det er ikke nødvendigt at definere
x1,x2 = symbols("x1 x2")
idef f(x1,x2):
. Det er dog god programmeringspraksis at fortælle andre hvad funktionen forventer at få som input og giver som output. Dette gøres elegant i Python ved:
def f(x1: Symbol('x1', real=True), x2: Symbol('x2', real=True)) -> Matrix:
return Matrix([ln(x1), x1 * x2**2 + 1])
Selv om vi tit arbejder med funktioner i dette kursus, så er det ofte ikke nødvendigt at definere Python-funktioner, fx findes den afledte af \(f(x)=x^2 \cos(x)\) jo blot ved:
x = symbols("x")
f = x**2 * cos(x)
f.diff()
Spørgsmål a:#
Hvad er funktionsværdien i \(f(2,-3)\)?
Spørgsmål b:#
Skriv Python-funktionen ned som en matematisk funktion. Dispositionsmængden (co-domain) er \(\mathbb{R}^2\). Hvad er definitionsmængden (domain)?
Hint
I Python skal man ikke angive “definitionsmængder”. Vi mener derfor her at definitionsmængden skal være den størst mulige.
Hint
Hvad er definitionsmængden for logaritmen?
Svar
\(\mathrm{dom}(f) = ]0,\infty [ \times \mathbb{R}\)
Spørgsmål c:#
Find billedmængden (engelsk: image/range).
Hint
Spørgsmålet er for hvilke \((y_1, y_2) \in \mathbb{R}^2\), ligningerne \(y_1 = \ln(x_1)\) og \(y_2 = x_1 \, x_2^2 + 1\) har en løsning. Kig først på ligningen \(y_1 = \ln(x_1)\).
Hint
Hvis \(x_1\) kun kan være et vilkårligt positivt, reelt tal, hvilke værdier kan \(x_1 \, x_2^2 + 1\) så antage?
Svar
\(\mathrm{im} (f) = \mathbb{R} \times [1, \infty [\)
Opgaver – Lille Dag#
1: Størrelse af vektorer#
Betragt følgende tre vektorer i \(\mathbb{R}^3\):
Hvilken vektor er længst? Hvilke vektorer er ortogonale på hinanden? Hvilke to vektorer er tættest på hinanden?
Note
Vi kan forestille os vektorerne som (geometriske) stedvektorer med begyndelsespunkt i \(\pmb{0}=[0,0,0]^T\) og slutpunkt \(\pmb{v}_i\) for hhv \(i=1,2,3\). Under tiden skriver man dette som \(\overrightarrow{\pmb{0}\pmb{v}_i}\).
2: Partielle afledede af simpel skalar-funktion#
Find de partielle afledte \(\frac{\partial f}{\partial x_1}\) og \(\frac{\partial f}{\partial x_2}\) for \(f(x_1, x_2) = x_1^3 + 3x_1 x_2 + x_2^3\). Bestem værdien af de partielle afledte i punktet \((x_1,x_2)=(1,2)\).
Hint
Husk formlen for partielle afledte med hensyn til hver variabel.
Behandl andre variable som konstanter under differentiering.
Svar
\(\frac{\partial f}{\partial x_1} = 3x_1^2 + 3x_2\)
\(\frac{\partial f}{\partial x_2} = 3x_2^2 + 3x_1\)
I punktet \((1,2)\): \(\frac{\partial f}{\partial x_1}(1, 2) = 9\), \(\frac{\partial f}{\partial x_2}(1, 2) = 15\)
3: Forskellige(?) kvadratiske former#
Lad \(\pmb{x} = [x_1,x_2]^T\) være en søjlevektor i \(\mathbb{R}^2\). Definer:
og
Lad \(q_i: \mathbb{R}^2 \to \mathbb{R}\) være givet ved:
for \(i=1,2,3\). Sådanne funktioner kaldes kvadratiske former, se denne definition.
Spørgsmål a#
Gang udtrykket for \(q_1(x_1,x_2)\) ud. Først i hånden, så ved hjælp af Python. Gang også udtrykkene for \(q_2(x_1,x_2)\) og \(q_3(x_1,x_2)\) (i hånden eller Python) ud.
Hint
Det kan være nødvendigt at bruge c = Matrix([-60])
da SymPy ikke vil lægge skalarer sammen med 1x1 matricer. Omvendt, kan en 1x1 SymPy matrix q1
laves om til en skalar ved enten q1[0,0]
eller q1[0]
.
Svar
\( q_1(\pmb{x}) = 11 x_{1}^{2} - 24 x_{1} x_{2} - 20 x_{1} + 4 x_{2}^{2} + 40 x_{2} - 60\)
Spørgsmål b#
Er den kvadratiske matrix \(A\) i en kvadratisk form (som fx \(\pmb{x}^T A \pmb{x}\)) entydig givet?
Hint
Kig på \(q_1(\pmb{x})\) og \(q_2(\pmb{x})\)
Svar
Nej. Fx er \(q_1(\pmb{x}) = q_2(\pmb{x})\), mens \(A_1 \neq A_2\).
Spørgsmål c#
Plot grafen af funktionen \(q_1\). Plot så nogle niveaukurver. Hvilken geometrisk form har niveaukurverne? Gør det samme for \(q_3\).
Spørgsmål d#
En af funktionerne har et minimum. Hvilken? Hvor ligger det cirka? Hvad kaldes det samme punkt for de funktioner der ikke har et minimum?
Svar
\(q_3\) har et minimum
Det ligger i \((2,1)\) (det skal bare aflæses fra et plot)
\(q_1\) har et såkaldt saddelpunkt i samme punkt, Wikipedia
4: Kvadratiske former med symmetriske matricer#
Lad \(A\) være en vilkårlig \(n \times n\) matrix, og lad \(\pmb{x}\) være en søjlevektor i \(\mathbb{R}^n\). Definer \(B\) ved \(B = (A + A^T)/2\).
Spørgsmål a#
Vis at matricen \(B\) er symmetrisk
Hint
En matrix \(B\) er symmetrisk hvis og kun hvis \(B = B^T\). Husk at \(B = \tfrac{1}{2} (A + A^T) \)
Svar
\( B^T = ((A + A^T)/2)^T = \tfrac{1}{2} (A^T + (A^T)^T) = \tfrac{1}{2} (A^T + A) = \tfrac{1}{2} (A + A^T) = B \)
Spørgsmål b#
Vis at \(\pmb{x}^T A \pmb{x} = \pmb{x}^T B \pmb{x}\).
Spørgsmål c#
Konkludér at man altid kan antage at kvadratiske former af formen \(q(\pmb{x}) = \pmb{x}^T A \pmb{x} + \pmb{b}^T \pmb{x} + c\) er givet ved en symmetrisk matrix \(A\).
5: Niveaukurver og gradienter#
Vi betragter funktion \(f:\mathbb{R}^2\rightarrow \mathbb{R}\) givet ved forskriften
og dens niveaukurver
Spørgsmål a#
Vis at niveaukurven for et vilkårligt \(c\) kan beskrives ved en ligning på formen \(y=g_c(x)\) hvor \(g_c\) er en reel funktion af \(x\), og tegn de niveaukurver der svarer til \(c\in\{−2,−1,0,1,2\}\).
Svar
Niveaukurverne er 5 parabler som er parallelforskudt i forhold til hinanden i \(y\)-aksen retning. Hvad er afstanden mellem dem?
Spørgsmål b#
Vis at punktet \(P=(2,1)\) ligger på niveaukurven svarende til \(c=2\), og find en parameterfremstilling for denne niveaukurve.
Svar
Man kan fx vælge \(\pmb{r}(u)=\left(u,\frac{1}{2}u^2-1\right)\), \(u\in\mathbb{R}\).
Spørgsmål c#
Bestem den til parameterfremstillingen hørende tangentvektor i \(P\), og vis at tangentvektoren er ortogonal på gradienten for \(f\) i \(P\).
Hint
Tangentvektoren får man ved først at differentiere hver af de to koordinatfunktioner i parameterfremstillingen, og dernæst at indsætte parameterværdien for det givne punkt.
Spørgsmål d#
Lav i Python et samlet plot af niveaukurverne og gradientvektorfeltet for \(f\).
Hint
Brug SymPy’s dtuplot
.