•Glemme at Monte Carlo krever stort N for nøyaktig resultat -- N=100 gir stor varians.
•Bruke random.random() (enkeltverdi) når du trenger np.random.random(N) (array).
•Glemme å sette random seed for reproduserbarhet i tester: np.random.seed(42).
Eksamenstips
Python grunnleggende
•Flervalgsoppgaver med 'hva skrives ut' utgjor 10-14 poeng (5-7 oppgaver). Bruk 2-3 minutter per oppgave og trace systematisk.
•Lag en tabell med variabelverdier for hver iterasjon når du tracer løkker. Dette forhindrer tellefeil.
•Når du ser zip + list comprehension, skriv ut alle parene først, sa bygg listen.
•Sjekk alltid om det sporres etter print() av en variabel, en indeks (a[i]), eller et uttrykk.
Funksjoner og testing
•Nesten alle store oppgaver (8+ poeng) har en b)-del som ber deg skrive en testfunksjon. Oev på mønsteret: kjente input -> forventet output -> assert.
•Når oppgaven gir deg en testfunksjon og ber deg skrive funksjonen som testes: les testfunksjonen nøyaktig for å forstå signatur og forventet oppførsel.
•Felle-spørsmål av typen 'expected vs. computed' går igjen: sjekk alltid om range() gir riktige verdier for forventningen.
•Exception-matching er en gjenganger på nesten alle eksamener (H2016, H2019, H2022, H2024). Trace til den FØRSTE linjen i try-blokken som feiler, og finn riktig except-gren. Husk: sys.argv[0] er programnavnet, første argument er sys.argv[1].
•Lambda-funksjonskall i flervalg (riktig kall til euler/diff/bisection) går igjen: korrekt er alltid lambda x: uttrykk som første argument, ikke selve uttrykket og ikke f=...-syntaks foran posisjonsargumenter.
Filhåndtering og ordbeker
•Filhåndtering + ordbok-oppgaven er på ALLE eksamener og gir 9-12 poeng. Drill dette mønsteret!
•Polynom representert som ordbok (poly_eval, poly_diff) er en egen gjenganger (H2013, H2019) -- ov på både evaluering og derivasjon med dict comprehension.
•Les filformatet nøyaktig: er separatoren ';', ', ' (komma + mellomrom), eller bare mellomrom?
•Filtreringsfunksjoner skal alltid returnere en ny ordbok -- aldri endre argumentet.
•Bruk dict comprehension for kompakte filtreringer: {k: v for k, v in d.items() if betingelse}.
Klasser og spesialmetoder
•Vektorklasser (Vec2D, Vec3D) med __add__, __mul__, __str__ er på ALLE eksamener (H2024 Oppg 11, H2025 Oppg 12).
•'Hva skrives ut'-oppgaver med klasser: trace gjennom linje for linje og hold styr på hvilken metode som kalles.
•Piecewise-klasser (__call__ med if/elif) er en annen gjenganger (H2024 Oppg 10).
NumPy og arrays
•Oppgaver som ber deg gjøre 'det samme uten løkke' vil ha NumPy-løsning med linspace + vektoriserte operasjoner.
•Når x kan være både skalar og array, bruk np-funksjoner (np.exp, np.sin) som håndterer begge.
•Husk at np.linspace inkluderer endepunktene -- dette er viktig for riktig steglengde.
•For 2D-systemer (ODE-systemer) bruk np.zeros((N+1, neq)) for å lagre løsningen.
Numerisk derivasjon og integrasjon
•Flervalgsoppgaven om 'hvilken linje mangler' for numerisk derivasjon er en gjenganger (H2025 Oppg 4). Husk: lambda x: uttrykk.
•Diff-klassen (H2024 Oppg 9) kombinerer klasser og numerisk derivasjon -- to temaer i en oppgave.
•Når oppgaven ber om konvergenstest, bruk h = 10**(-k) for k in range(1, 8).
•For plott av deriverte: bruk Diff-klassen og kall den med et NumPy-array (vektorisert).
Differenslikninger og ODE-losere
•Forward Euler er på nesten ALLE eksamener (H2024 Oppg 14, H2025 Oppg 14). Memoriser mønsteret!
•Differenslikninger (Lotka-Volterra, Bogdanov) er den nest vanligste oppgavetypen (H2024 Oppg 12, H2025 Oppg 13).
•Les oppgaveteksten nøyaktig for å se om y_{n+1} avhenger av x_{n+1} eller x_n -- dette bestemmer beregninsrekkefølgen.
•ODESolver-hierarkiet gis alltid som vedlegg. Studer koden på forhand sa du forstår set_initial_condition() og solve().
•SEID/SIR/SEIS-modeller er en favoritt på nesten alle eksamener (H2016, H2019, H2025): definer f(t, u) som returnerer array med deriverte, bruk RungeKutta4, plott komponentene. Vanlig krav: 'ti tidssteg per dag' gir N = 10*T tidssteg.
•A implementere EN ny metode som subklasse av ODESolver (Heun, Midpoint, Backward Euler) ved kun å overskrive advance() er den nest-sikreste oppgaven (H2013, H2016, H2019, H2025). H2025 brukte scipy.optimize.root i advance() for implisitt Backward Euler -- du løser da et likningssystem g(u)=0 per tidssteg.
•Modellering av fysiske ODE-systemer (planetbane, pendel) krever at du først skriver om en andreordens ODE til et system av forsteordens likninger med u = [posisjon, hastighet].
Plotting med Matplotlib
•Plotting er nesten alltid en b)- eller c)-del av en større oppgave. Det gir 2-3 poeng for riktig plot med labels og legend.
•For ODE-systemer: plott t på x-aksen og losningskomponentene på y-aksen.
•Når oppgaven sier 'i samme vindu', bruk flere plt.plot()-kall for plt.show().
Stokastisk simulering
•Monte Carlo er ikke på alle eksamener, men når det kommer er det typisk en selvstendig oppgave på 4-6 poeng.
•Mønsteret er alltid: generer tilfeldige tall -> beregn noe -> tell/gjennomsnitt.
•Bruk NumPy (ikke random-modulen) for effektiv vektorisert sampling.
•Når oppgaven ber om 'estimer sannsynligheten', tenk: antall_treff / N forsøk.
•Klassiske former: myntkast (minst m kron av n), trekke kort/kuler uten tilbakelegging (random.shuffle + a.pop), og Monte Carlo-integrasjon implementert som subklasse i et Integrator-hierarki (w_i = (b-a)/n, tilfeldige punkter). Disse var hyppige 2007-2016.