Trigonometri — grunderna
Kunna använda sinus och cosinus och förstå periodiska funktioner — bakgrunden till sinusbaserad positionskodning.
Öva i Mattegrafen ↗ · Matematik 4Förkunskaper
Intuition
Tänk på en punkt som går runt en cirkel med radien 1.
- cos(v) är punktens x-koordinat.
- sin(v) är dess y-koordinat.
Det är hela definitionen. Allt annat följer av den.
Eftersom punkten kommer tillbaka till samma ställe varje varv blir båda funktionerna periodiska: de upprepar sig med perioden ett varv, alltså radianer (360°).
Och eftersom x² + y² = 1 för varje punkt på enhetscirkeln får man gratis:
Det är Pythagoras sats, sedd från cirkeln.
Varför det spelar roll för AI: varje periodiskt förlopp — ljudvågor, årstider, dygnsrytm — beskrivs med sinusfunktioner. Fouriertransformen delar upp en signal i just sådana. Och transformerns positionskodning använder sinus och cosinus med olika frekvenser för att ge varje position i en sekvens ett unikt mönster.
Formellt
Radianer. Ett varv är radianer. Vinkeln mäts som båglängden på enhetscirkeln, vilket gör derivatorna rena: . Med grader hade det kommit en faktor överallt.
Värden att kunna utan att räkna:
| 0 | ||||||
|---|---|---|---|---|---|---|
| 0 | 1/2 | 1 | 0 | |||
| 1 | 1/2 | 0 | −1 |
Den allmänna sinusfunktionen:
| Parameter | Betyder | I ljud |
|---|---|---|
| amplitud | volym | |
| frekvens i hertz | tonhöjd | |
| fasförskjutning | var i vågen den startar | |
| period i sekunder | våglängdens varaktighet |
Kopplingen till Fourier: varje periodisk signal kan skrivas som en summa av sinusfunktioner med olika frekvens, amplitud och fas. Fouriertransformen räknar ut vilka. Det är därför trigonometrin är förkunskapen till spektrogram.
Kopplingen till positionskodning: transformern behöver veta var i sekvensen varje token står. Ett sätt är att ge position en vektor där komponent är och komponent är . Låga ger snabba svängningar (skiljer grannar åt), höga ger långsamma (skiljer avlägsna positioner åt) — som siffrorna i ett binärt tal, fast kontinuerligt.
Kod
import numpy as np
# Enhetscirkeln: cos är x, sin är y
for grader in (0, 30, 45, 60, 90, 180):
v = np.deg2rad(grader)
print(f"{grader:3d}° cos={np.cos(v): .3f} sin={np.sin(v): .3f} "
f"sin²+cos²={np.sin(v)**2 + np.cos(v)**2:.1f}")
# 0° cos= 1.000 sin= 0.000 sin²+cos²=1.0
# 30° cos= 0.866 sin= 0.500 sin²+cos²=1.0
# 90° cos= 0.000 sin= 1.000 sin²+cos²=1.0
# En ton: A · sin(2π f t)
fs, f, A = 16000, 440.0, 0.5
t = np.arange(fs) / fs
ton = A * np.sin(2 * np.pi * f * t)
print(round(float(ton.max()), 2), int(round(1 / (f / fs) ))) # 0.5 36 sampel per period
# Summa av sinusar — samma idé som Fourier, baklänges
fyrkant = sum(np.sin(2 * np.pi * (2 * k + 1) * f * t) / (2 * k + 1) for k in range(20))
print(round(float(np.abs(fyrkant).max()), 2)) # närmar sig en fyrkantvåg
# Sinusbaserad positionskodning
def poskod(T, d):
p = np.arange(T)[:, None]
i = np.arange(0, d, 2)[None, :]
vinkel = p / (10000 ** (i / d))
pe = np.zeros((T, d))
pe[:, 0::2], pe[:, 1::2] = np.sin(vinkel), np.cos(vinkel)
return pe
pe = poskod(50, 16)
print(round(float(pe[0] @ pe[1]), 2), round(float(pe[0] @ pe[40]), 2)) # 7.71 1.9
Sista raden visar poängen: närliggande positioner får lika vektorer, avlägsna får olika — helt utan att någon lärt sig något.
Behärskning innebär
- Använder sinus och cosinus i enhetscirkeln
- Läser av amplitud, frekvens och fasförskjutning
- Kopplar periodicitet till Fourier och positionskodning
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Matteboken (Mattecentrum) — fri läsning, ideell förening
- Wikipedia — Trigonometric functions (CC BY-SA 4.0) — CC BY-SA 4.0
- Skolverket — Om AI i skolan — Skolverkets öppna villkor