in-kjm1900 forelesning 1 · testfunksjoner:generellform 1 # ingen argumenter, ingen returverdier 2...

43
IN-KJM1900 — Forelesning 1 Simen Kvaal Onsdag 25/10/2017 Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 1 / 41

Upload: ngotram

Post on 17-Mar-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

IN-KJM1900 — Forelesning 1

Simen Kvaal

Onsdag 25/10/2017

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 1 / 41

Page 2: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Oversikt

1 Velkommen til kjemidelen av IN-KJM1900!

2 Intro til prosjektoppgaven

3 Programmering av moduler

4 Testfunksjoner og unit testing

5 Litt om numeriske beregninger

6 Newtons metode

7 Differensiallikninger

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 2 / 41

Page 3: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Litt om meg

Jeg heter Simen Kvaal, [email protected] ved Hylleraas-senteret, tidligere CTCC (senter for fremragendeforskning på kjemi)Teoretisk og beregningsbasert kjemiOm dere ønsker å treffe meg, avtal møte på forhånd

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 3 / 41

Page 4: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Prosjektoppgave

Vi skal løse en prosjektoppgave om sur nedbørStort miljøproblem på 70-80-talletForurensing fra Tyskland, Storbritannia, . . .Fiskebestand nesten borte fra mange vassdrag i Sør-Norge, 36.000 km2

(!)I dag et mindre problem.Spørsmål: hva er årsakssammenhengene mellom sur nedbør ogforsuring av vann og jord?Vi skal gjenskape forskning fra 70-tallet i en prosjektoppgave!

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 4 / 41

Page 5: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Opplegg

Forelesning 1 gang/uke (onsdager 10.15–12.00, 5 uker)Peer Instruction med Pingo.Gruppetimer 1 gang/uke (som før, 5 uker)Samretting (rom Ø186, onsdager 16.15–18.00)Prosjektoppgave: del I (2 uker), del II (3 uker)Begge må godkjennes

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 5 / 41

Page 6: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Oversikt

1 Velkommen til kjemidelen av IN-KJM1900!

2 Intro til prosjektoppgaven

3 Programmering av moduler

4 Testfunksjoner og unit testing

5 Litt om numeriske beregninger

6 Newtons metode

7 Differensiallikninger

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 6 / 41

Page 7: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Birkenesmodellen

Numerisk modell forvannbevegelse og kjemi ijordvæskeTilpasset observasjoner inedbørsfelt i Birkenes kommune,Aust-AgderFlere publikasjoner på 70-90-talletKjemisk modell koblet tilhydrologisk modell

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 7 / 41

Page 8: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Hydrologisk delmodell: Kjapp intro

Hydrologi: læren om vannet påjorda, dets kretsløp, etc.Her: transport av jordvæske inedbørsfeltNedbørsfelt modellert somreservoarer A og BReservoar: vannstand, strøm innog ut. Sammenkobling viastrømmer.Avrenning til bekk. Fysiskemålinger gjort her.

A

B

P

Bekk

Bmin

EA

EB

B

Bmax

Amin

A

Qover

QA

QB

Asig· QA (1 – Asig)· QA

Q

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 8 / 41

Page 9: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Analogi: bøtter med vann

Det kan være nyttig å tenke på et reservoar som en bøtte med vann med et hull.

A

B

P

Bekk

Bmin

EA

EB

B

Bmax

Amin

A

Qover

QA

QB

Asig· QA (1 – Asig)· QA

Q

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 9 / 41

Page 10: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Kjemisk delmodell: kjapp intro

Kjemisk delmodell: Ideell blanding av ioner løst i væsken. Ioner erkjemiske forbindelser med ladning.Sur nedbør som fortynnet svovelsyre H2SO4 i nedbøren P,

H2SO4 −→ 2H+ + SO42−

Sulfat kommer med nedbøren: SO42– følger vannet gjennom modellen.

Reaksjoner med jord: utlekking av giftig aluminium, etc.Vi følger konsentrasjonene av ioner i væsken

[H+], [SO42−], [Al3+], [HCO3

−], [Ca2+]

[X] =masse av X

volumEnder opp med konsentrasjoner i bekken QMiljøpåvirkning!

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 10 / 41

Page 11: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Birkenesmodellen sydd sammen

1 Først løser vi hydrologisk delmodell:

vannivå A(t), B(t)

strøm i bekken Q(t)

2 Så finner vi massene av SO42– i reservoarene

MA(t), MB(t)

Konsentrasjoner:

CA(t) =MA(t)A(t)

, CB(t) =MB(t)B(t)

, CQ(t)

3 De andre konsentrasjonene fra likevektsbetingelser + elektronøytralitet

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 11 / 41

Page 12: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Delprosjekt I

Utvikle verktøy, Python-modul: 2 uker1 Innlesing av datafil med målinger av temperatur T (t), nedbør P(t) og[SO4

2−], observert strøm Qobs(t) i bekk2 Newtons metode for ikkelineære likninger

finn x slik at f (x) = 0.

Brukes i kjemisk delmodell.3 Eulers metode for difflikninger

ddt

y(t) = f (y(t), t)

Brukes både i hydrologisk og kjemisk delmodell.

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 12 / 41

Page 13: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Delprosjekt II

Utvikle simuleringsprogram for birkenesmodell: 3 ukerGjenbruke Python-modul

1 Løsning av hydrologisk delmodell2 Løsning av kjemisk delmodell3 Beregning av konsentrasjoner

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 13 / 41

Page 14: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Oversikt

1 Velkommen til kjemidelen av IN-KJM1900!

2 Intro til prosjektoppgaven

3 Programmering av moduler

4 Testfunksjoner og unit testing

5 Litt om numeriske beregninger

6 Newtons metode

7 Differensiallikninger

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 14 / 41

Page 15: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Moduler

En modul er en samling med definisjoner i en .py-fil.Denne kan importeres i et skript slik at definisjonene blir tilgjengeligeTil nå har dere kanskje mest brukt moduler, ikke skrevet de:

1 import numpy

2 x = numpy.linspace(0, 1, 500)

Men det er veldig lett å lage sin egen modul! Du trenger kun å puttedefinisjoner i en egen Python-fil, så importere med import.

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 15 / 41

Page 16: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Moduler

minmodul.py

1 svaret = 42

2

3 def minfunksjon():

4 print("Denne funksjonen er importert.")

Så kan vi bruke modulen:

1 import minmodul # leser minmodul.py

2

3 print(minmodul.svaret) # variabel definert i minmodul.py

4 minmodul.minfunksjon() # funksjon definert i minmodul.py

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 16 / 41

Page 17: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Moduler er nyttige!

Moduler er kjempenyttige!Mange oppgaver gjøres mange ganger, og i ulike sammenhengerLøse oppgaver en gang for alle!Hjelper også tankene i en kompleks oppgave: skille uavhengigeproblemdeler fra hverandre

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 17 / 41

Page 18: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Tittel

Liveprogrammeringseksempel.

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 18 / 41

Page 19: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Oversikt

1 Velkommen til kjemidelen av IN-KJM1900!

2 Intro til prosjektoppgaven

3 Programmering av moduler

4 Testfunksjoner og unit testing

5 Litt om numeriske beregninger

6 Newtons metode

7 Differensiallikninger

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 19 / 41

Page 20: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Hvorfor testfunksjoner?

Et komplett program består av mange underprogrammer (funksjoner,klasser, · · · ) i samspillFor at koden skal være robust, må den testesLa oss si at funksjon B kaller funksjon A. Ett år senere redigerer dufunksjon A og endrer litt på formatet på parametrene. Da ødeleggesfunksjon B, og du får bugsTestfunksjoner sørger for at du fanger opp slike problem

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 20 / 41

Page 21: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Pytest

Skriv testfunksjoner som begynner på test_ i kildefiler som begynner påtest_.Ingen parametre. Ingen output. Kun assert-utsagn (kasterAssertionError-exceptions.)Du kaller ikke funksjonene selv.Kjør pytest fra kommandolinja. Pytest finner alle filene som starter påtest_ og alle funksjonene med navn som starter på test_, og kjører alletestene.Du får en rapport.

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 21 / 41

Page 22: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Testfunksjoner: generell form

1 # Ingen argumenter, ingen returverdier

2 def test_funksjon():

3

4 # Check that some success critera are met:

5 if some_criteria_that_must_be_valid_if_code_is_sane:

6 success = True

7 else:

8 success = False

9

10

11 msg = "Message shown if test fails."

12

13 # Check that success == True, and if not throw

14 # an AssertionError with message msg

15

16 assert success, msg

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 22 / 41

Page 23: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Live eksempel: temperatures.py

Dette eksempelet er enkelt, men relevant! Feilaktig bruk av enheter fikk MarsClimate Orbiter til å krasje i 1999.

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 23 / 41

Page 24: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Oversikt

1 Velkommen til kjemidelen av IN-KJM1900!

2 Intro til prosjektoppgaven

3 Programmering av moduler

4 Testfunksjoner og unit testing

5 Litt om numeriske beregninger

6 Newtons metode

7 Differensiallikninger

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 24 / 41

Page 25: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Flytall: en orientering

Når vi gjør beregninger på datamaskiner er de sjelden eksakteModellfeil: Modellen er ikke riktig (eks. værmelding)Regnefeil: Likningene løses kun timærmingsvis

En datamaskin rekner med flyttallEnkelt sagt, endelige desimalekspansjoner,

y = ±a · 10n, a, n heltall

Ca. 15–17 gjeldende siffer (Python float, C double)Kun et endelig antall desimaler tilgjengelig: Representasjonsfeil

1 >>> from math import pi

2 >>> print pi

3 3.14159265359

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 25 / 41

Page 26: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Tap av signifikans og avrundingsfeil

Alle beregninger har en endelig presisjon – avrundingsfeilVi kan få fenomener som tap av signifikans.Rekkefølgen på operasjoner kan spille en rolle:

1 >>> 1 + 1e-100 - 1

2 0.0

3 >>> 1 - 1 + 1e-100

4 1e-100

5 >>>

Eksakt svar i neste eksempel er 10−13 =1e-13:

1 >>> 1.0000000000000000 - 0.9999999999999

2 1.000310945187266e-13

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 26 / 41

Page 27: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Eksempel: numerisk derivasjon

Den deriverte til f (x) er

f ′(x) = limh→0

f (x + h) − f (x)h

Eksempel:f (x) = sin(x), f ′(x) = cos(x).

I datamaskinen kan vi aldri la h→ 0!Approksimasjon: velg en liten h, og regn ut

f ′h(x) =f (x + h) − f (x)

h

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 27 / 41

Page 28: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Eksempel: f (x) = sin(x)

Vi kan ikke velge h så liten vi vil!

10 13 10 11 10 9 10 7 10 5 10 3

h

10 9

10 8

10 7

10 6

10 5

10 4

10 3

10 2

feil

i num

erisk

der

iver

t

sin(x), x=1

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 28 / 41

Page 29: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Oversikt

1 Velkommen til kjemidelen av IN-KJM1900!

2 Intro til prosjektoppgaven

3 Programmering av moduler

4 Testfunksjoner og unit testing

5 Litt om numeriske beregninger

6 Newtons metode

7 Differensiallikninger

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 29 / 41

Page 30: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Likninger med én ukjent

La f (x) være en funksjon, for eksempel

f (x) = x3 − 1.

Betrakt problemet: finn x∗ slik at

f (x∗) = 0

En slik x∗ kalles en “rot” av funksjonen f (x)For funksjonen f (x) = x3 − 1 kan vi finne løsningen x∗ = 1 ganske greit,men hva med dette eksempelet?

f (x) = x5 − 4 cos(x)etan(x/π) − 7

Vi trenger approksimative metoder

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 30 / 41

Page 31: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Newtons metode

Iterativ metode:1 Start med et gjett x0 for x∗2 Gjenta en formel mange ganger:

x0 → x1 → x2 → · · ·

3 Stopp når xk har konvergert

Formelen for Newtons metode er:

xk+1 = xk − f ′(xk)−1f (xk).

Vi må ha et uttrykk for både f (x) og f ′(x).

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 31 / 41

Page 32: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Illustrasjon: f (x) = x3 − 0.7x2 − 1.1x + 0.6

0.0 0.5 1.0 1.5 2.0 2.5

0

2

4

6

8

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 32 / 41

Page 33: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Illustrasjon: f (x) = x3 − 0.7x2 − 1.1x + 0.6

0.0 0.5 1.0 1.5 2.0 2.5

0

2

4

6

8

f(x0)

x0x1

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 32 / 41

Page 34: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Illustrasjon: f (x) = x3 − 0.7x2 − 1.1x + 0.6

0.0 0.5 1.0 1.5 2.0 2.5

0

2

4

6

8

f(x0)

x0x1

f(x1)

x2

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 32 / 41

Page 35: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Eksempel

f (x) = (x + 1)(x − 0.5)(x − 1.2) = x3 − 0.7x2 − 1.1x + 0.6Konvergenshistorikk:

1 x0 = 2.200000

2 At iteration 0, x = 1.6738878143133462.

3 At iteration 1, x = 1.3741331494162794.

4 At iteration 2, x = 1.2372954723615801.

5 At iteration 3, x = 1.2023502104483390.

6 At iteration 4, x = 1.2000103267171331.

7 At iteration 5, x = 1.2000000002008111.

8 At iteration 6, x = 1.2000000000000000.

Når vi nærmer oss x∗: Antall korrekte siffer dobles per iterasjon“Kvadratisk konvergens”Hvor ville du startet dersom du ønsket roten x∗ = 1.0?

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 33 / 41

Page 36: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Nytt eksempel (litt for moro skyld)

Newtons metode fungerer også på komplekse polynomKomplekse tall har en real og imaginær del:

x = a + ib, i2 = −1

x + x ′ = (a + a′) + i(b + b′), xx ′ = (aa′ − bb′) + i(ab′ + b′a)

Så komplekse tall er som vektorer i planet der vi også har multiplikasjondefinert (Caspar Wessel, 1745–1818)x0 er her kompleks, og vi kan få ulik x∗ avhengig av denne.

f (x) = x3 − 1

x∗ kan være 1, 12 + i

√32 ,

12 − i

√32

Dette er også et eksempel på at moduler er nyttige! Vi bruker sammeimplementasjon av Newtons metode som tidligere

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 34 / 41

Page 37: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Resultat

1.5 1.0 0.5 0.0 0.5 1.0 1.5Re x_0

1.5

1.0

0.5

0.0

0.5

1.0

1.5

Im x

_0

Attraktorer for de tre roettene til f(x) = x^3 - 1

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 35 / 41

Page 38: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Oversikt

1 Velkommen til kjemidelen av IN-KJM1900!

2 Intro til prosjektoppgaven

3 Programmering av moduler

4 Testfunksjoner og unit testing

5 Litt om numeriske beregninger

6 Newtons metode

7 Differensiallikninger

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 36 / 41

Page 39: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Hva er en difflikning?

En liking der den ukjente er en (eller flere) funksjonerVi er interessert i initialverdiproblemer: Finn y(t) slik at

ddt

y(t) = f (y(t), t), y(0) = a

der f (y, t) er en kjent funksjonLikingene for vannbevegelse er på denne formenTypisk: vi må løse likningene numerisk

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 37 / 41

Page 40: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Eksempel: radioaktivt henfall

Radioaktive kjerner kan henfalle ved å sende uten 4

4He-kjerne (α-partikkel)Over en tid δt sannsynlighet λδt for at en kjernehenfaller. Halveringstid,

t1/2 = λ ln(2)

I snitt vil Nλδt kjerner henfalle, N=antall kjerner ien prøveMassereknskap:

δN = −λNδt

Difflikning: δt → 0,

dNdt= −λN, N(0) = N0

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 38 / 41

Page 41: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Eulers metode

ddt

y(t) = f (y(t), t), y(0) = a

De fleste difflikninger må løses numeriskEulers metode er kanskje den enkleste numeriske metodenBasert på definisjonen av den deriverte:

ddt

y(t) = limδt→0

1δt[y(t + δt) − y(t)]

Anta at vi kjenner y(t), velger fiksert δt > 0 og løser for y(t + δt):

y(t + δt) = y(t) + δt · f (y(t), t).

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 39 / 41

Page 42: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Eulers metode II

Input:Steglengde h og ønsket tidsintervall 0 ≤ t ≤ tsluttFunksjon f (y, t)Initialverdi y(0) = a

Output:Vektor y = (y0, y1, · · · , yk, · · · ) med beregnede approksimasjoner til y(tk),tk = kh.

Algoritme:1 Velg tidssteg h > 0. Sett y0 = a. Sett k = 0.2 Sett

yk+1 = yk + h · f (yk, tk), tk = kh.

3 Dersom tk < tslutt, gå til 2

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 40 / 41

Page 43: IN-KJM1900 Forelesning 1 · Testfunksjoner:generellform 1 # Ingen argumenter, ingen returverdier 2 def test_funksjon(): 3 4 # Check that some success critera are met: 5 if some_criteria_that

Radioaktivt henfall og Eulers metode

Live-programmering av

Nk+1 = Nk − λh · Nk

N0 = 100

λ = 0.5 ln(2)

h = 1

Plotting av resultat

Simen Kvaal IN-KJM1900 — Forelesning 1 Onsdag 25/10/2017 41 / 41