Programmering som matematisk verktøy

Et program er en algoritme skrevet så en maskin kan utføre den. Du trenger fire byggeklosser: VARIABLER (lagre en verdi), REGNEUTTRYKK (bruke den), VALG med if (gjøre noe bare i visse tilfeller) og LØKKER med for/while (gjenta et steg). Merk at = i programmering betyr «legg denne verdien i variabelen», ikke «er lik». Derfor gir x = x + 1 mening som kode, men er en umulig likning. Likhetstesten skrives ==. Innrykket tekst etter if og else hører til valget. Bare én av de to delene kjøres hver gang. Det er viktig i abc-formelen: sqrt(D) må ikke regnes ut når DD er negativ, for da stopper programmet med en feilmelding.

Tilordning

variabel←verdi\text{variabel} \leftarrow \text{verdi}

Løsningene

x=−b±D2ax = \frac{-b \pm \sqrt{D}}{2a}

Program for abc-formelen (Python)
KodeHva den gjør
from math import sqrthenter kvadratrota
a = 1; b = 2; c = -3lagrer koeffisientene
D = b**2 - 4\*a\*cregner diskriminanten
if D < 0:valg: har likningen ingen løsning?
print('ingen løsning')innrykket, kjøres bare når D er negativ
else:ellers (når D ≥ 0)
x1 = (-b + sqrt(D))/(2\*a)innrykket, første løsning
x2 = (-b - sqrt(D))/(2\*a)innrykket, andre løsning

Tips

  • = tilordner, == sammenligner. Bruker du = der du mente en test, får du enten feilmelding eller et lumsk feil svar.
  • Skriv ut mellomverdier mens du utvikler. Ser du at DD ble −8-8 når du ventet 1616, vet du med én gang hvilket steg som er galt.

Eksempel: Spore et program steg for steg

Et program setter s = 0, og gjentar s = s + i for i=1,2,3,4i = 1, 2, 3, 4. Hva er s til slutt?

Løsning:
  1. Vi sporer verdien fra s=0s = 0 etter hver runde i løkken
  2. start: s=0s = 0
  3. i=1i = 1 gir s=0+1=1s = 0 + 1 = 1
  4. i=2i = 2 gir s=1+2=3s = 1 + 2 = 3
  5. i=3i = 3 gir s=3+3=6s = 3 + 3 = 6
  6. i=4i = 4 gir s=6+4=10s = 6 + 4 = 10
  7. løkken er ferdig. Verdien er s=10s = 10, som er summen 1+2+3+41 + 2 + 3 + 4.
Sportabell
is førs etter
101
213
336
4610
Alternativ forklaring/metode: Bygg algoritmen som kolonner

Alternativ metode – innenfor pensum, men ikke hovedmetoden her

Regneark i stedet for kode

Er programmering fortsatt uvant, kan mange av de samme algoritmene bygges i et regneark: én rad per runde i løkken, og en formel i cellen som viser til raden over. Du ser da alle mellomverdiene samtidig, ikke bare sluttsvaret. Metoden gir ikke like generelle løsninger som kode, men den gjør selve algoritmen synlig, og det er algoritmen kompetansemålet handler om, ikke programmeringsspråket.

Samme løkke som regneark: s = s + i
RadCelleformelVerdi av s
1=0 + 11
2=B1 + 23
3=B2 + 36
4=B3 + 410
Alternativ forklaring/metode: Finn nullpunkt for enhver funksjon, ikke bare andregradsuttrykk

Tilleggsinformasjon – ikke pensum på dette nivået

Newtons metode (Newton-Raphson)

Forutsetninger:

  • Bruker verktøy du allerede har (den deriverte fra «Derivasjon»), men selve metoden er ikke 1T-pensum. Den er normalt R2-stoff, tatt med her som en smakebit på hvor algoritmisk tenkning og derivasjon møtes.

abc-formelen finner bare nullpunkter til andregradsuttrykk. Newtons metode finner nullpunkter til så godt som en HVILKEN SOM HELST funksjon, ved å gjenta: xn+1=xn−f(xn)f′(xn)x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}. Du starter med en gjetning, og bruker tangenten i det punktet til å gjette bedre. Programmet er en løkke som gjentar akkurat denne formelen. For f(x)=x2−2f(x) = x^2 - 2 (nullpunktet er 2\sqrt2) med startgjetning x0=1x_0 = 1: f′(x)=2xf'(x) = 2x, så x1=1−−12=1,5x_1 = 1 - \frac{-1}{2} = 1{,}5 → x2=1,5−0,253≈1,4167x_2 = 1{,}5 - \frac{0{,}25}{3} \approx 1{,}4167 → x3≈1,4142x_3 \approx 1{,}4142, allerede etter 3 runder er svaret riktig til 4 desimaler.

Newtons metode på f(x) = x² - 2, x₀ = 1
nxₙf(xₙ)
01-1
11,50,25
21,41670,0069
31,4142≈0

Oppgaver

Prøv minst én oppgave på hvert nivå.

Lett(3)

L-31Hva betyr = i programmering?

Vis fasit
  1. Ett likhetstegn i kode betyr tilordning
  2. legg verdien i variabelen

L-32Hva bruker du for å sammenligne to verdier i Python?

Vis fasit
  1. For likhetstest brukes 2 likhetstegn
  2. dobbelt likhetstegn

L-33Hva kalles en konstruksjon som gjentar et steg?

Vis fasit
  1. En konstruksjon som gjentar 1 eller flere steg
  2. gjentakelsen er poenget
  3. en løkke
Middels(3)

M-31s = 0, så s = s + i for i=1,2,3i = 1, 2, 3. Hva er s?

Vis fasit
  1. Start s = 0
  2. etter i = 1: 1
  3. etter i = 2: 3
  4. etter i = 3: 6

M-32p = 1, så p = p * i for i=1,2,3,4i = 1, 2, 3, 4. Hva er p?

Vis fasit
  1. Start p=1p = 1
  2. 1⋅2=21 \cdot 2 = 2
  3. 2⋅3=62 \cdot 3 = 6
  4. 6⋅4=6 \cdot 4 = 2424

M-33Hvorfor gir x = x + 1 mening i kode, men ikke som likning?

Vis fasit
  1. Likningen x = x + 1 gir 0 = 1
  2. men i kode betyr det «øk x med 1»
  3. tilordning, ikke likhet
Vanskelig(3)

V-31Skriv DD for x2+2x−3x^2 + 2x - 3 som kode og regn ut verdien.

Vis fasit
  1. a=1a = 1, b=2b = 2, c=−3c = -3
  2. D=4−4⋅1⋅(−3)D = 4 - 4 \cdot 1 \cdot (-3)
  3. 4+12=4 + 12 = 1616

V-32Med D=16D = 16: hva blir de to løsningene?

Vis fasit
  1. D=16D = 16 gir roten 44
  2. −2+42=1\frac{-2 + 4}{2} = 1 og −2−42=−3\frac{-2 - 4}{2} = -3
  3. x=1x = 1 og x=−3x = -3

V-33En løkke går fra i=1i = 1 til i=100i = 100 og summerer. Hva blir summen?

Vis fasit
  1. Summen fra 11 til 100100
  2. 100⋅1012=\frac{100 \cdot 101}{2} = 5 0505\,050