9789144160474

Page 1

­PProgrammering, rogrammering, ­m odellering modellering och ochsimulering simuleringi i

Python Python P E R

J Ö N S S O N

Per Jönsson


Kopieringsförbud Detta verk är skyddat av upphovsrättslagen. Kopiering, utöver lärares och studenters begränsade rätt att kopiera för undervisningsändamål enligt Bonus Copyright Access kopieringsavtal, är förbjuden. För information om avtalet hänvisas till utbildningsanordnarens huvudman eller Bonus Copyright Access. Vid utgivning av detta verk som e-bok, är e-boken kopieringsskyddad. Den som bryter mot lagen om upphovsrätt kan åtalas av allmän åklagare och dömas till böter eller fängelse i upp till två år samt bli skyldig att erlägga ersättning till upphovsman eller rättsinnehavare. Studentlitteratur har både digital och traditionell bokutgivning. Studentlitteraturs trycksaker är miljöanpassade, både när det gäller papper och tryckprocess.

Art.nr 45427 ISBN 978-91-44-16047-4 Upplaga 1:1 © Författarna och Studentlitteratur 2022 studentlitteratur.se Studentlitteratur AB, Lund Formgivning omslag: Jens Martin Omslagsbild: Prasad Jadhav/Unsplash Printed by Eurographic Group, 2022


Innehåll Del I Programmering i Python 1 Introduktion till Python 1.1 Installera Python . . . . . . . . . 1.2 Spyder utvecklingsmiljö . . . . . . 1.3 Tilläggspaket och moduler . . . . 1.4 Interaktiv körning . . . . . . . . . 1.5 Script och py-filer . . . . . . . . . 1.6 Skriva in och editera kommandon 1.7 LaTeX – dokumentera program . 1.8 Instuderingsfrågor . . . . . . . . . 1.9 Övningar . . . . . . . . . . . . . .

13 . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

15 15 15 16 17 18 20 21 22 23

2 Tal och matematiska funktioner 2.1 Olika typer av tal . . . . . . . . . . . . . 2.2 Räkning med reella och komplexa tal . . 2.3 Matematiska funktioner för reella tal . . 2.4 Matematiska funktioner för komplexa tal 2.5 Komplexa tal – attribut och metoder . . 2.6 Lambda-funktioner . . . . . . . . . . . . 2.7 Räkning med tal – avrundningsfel . . . . 2.8 Instuderingsfrågor . . . . . . . . . . . . . 2.9 Övningar . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

25 25 26 29 31 33 35 36 36 37

3 Datatyper, variabler och tilldelningssatser 3.1 Tal, teckensträngar, listor och tupler . . . . 3.2 Tilldelningssatser . . . . . . . . . . . . . . 3.3 Tilldelningssatser i tekniska termer . . . . 3.4 Tilldelningssatser – värde, typ, referens . . 3.5 Tilldelningssatser – stegning . . . . . . . . 3.6 Tupler och multipla tilldelningar . . . . . . 3.7 Tilldelning av sammansatta uttryck . . . . 3.8 Variabelnamn . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

41 41 42 42 44 45 46 47 47

© F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .


6

INNEHÅLL

3.9 3.10 3.11 3.12

Inläsning och utskrift till skärmen Tillämpning – fönsterbyte . . . . . Instuderingsfrågor . . . . . . . . . Övningar . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

48 50 51 52

4 Listor, tupler och strängar 4.1 Indexering av listor, tupler och strängar . 4.2 Delområden av listor, tupler och strängar 4.3 Listor – mutabilitet . . . . . . . . . . . . 4.4 Listor med tal . . . . . . . . . . . . . . . 4.5 Klasser och metoder . . . . . . . . . . . . 4.6 Metoder för listor . . . . . . . . . . . . . 4.7 Metoder för strängar . . . . . . . . . . . 4.8 Instuderingsfrågor . . . . . . . . . . . . . 4.9 Övningar . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

57 57 60 62 64 66 67 70 73 74

5 Vektorer, matriser och flerdimensionella fält 5.1 NumPy . . . . . . . . . . . . . . . . . . . . . 5.2 Fält . . . . . . . . . . . . . . . . . . . . . . . 5.3 Fält – attribut . . . . . . . . . . . . . . . . . 5.4 Vektorer . . . . . . . . . . . . . . . . . . . . 5.5 Arange och linspace . . . . . . . . . . . . . . 5.6 Delvektorer . . . . . . . . . . . . . . . . . . . 5.7 Vektorer – ta bort element . . . . . . . . . . 5.8 Vektorer – mutabilitet . . . . . . . . . . . . . 5.9 Matriser . . . . . . . . . . . . . . . . . . . . 5.10 Noll- och ettmatriser . . . . . . . . . . . . . 5.11 Diagonal- och bandmatriser . . . . . . . . . . 5.12 Slumpmatriser . . . . . . . . . . . . . . . . . 5.13 Omformning av matriser . . . . . . . . . . . 5.14 Skillnad mellan radmatris och vektor . . . . 5.15 Delmatriser . . . . . . . . . . . . . . . . . . . 5.16 Att sätta samman matriser . . . . . . . . . . 5.17 Läsa och skriva variabler till fil . . . . . . . . 5.18 Aritmetiska operationer på fält . . . . . . . . 5.19 Elementvisa funktioner . . . . . . . . . . . . 5.20 Aggregerings- och lokaliseringsfunktioner . . 5.21 Metoder för ndarray . . . . . . . . . . . . . . 5.22 Tillämpning – temperaturdata . . . . . . . . 5.23 Instuderingsfrågor . . . . . . . . . . . . . . . 5.24 Övningar . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

77 77 77 79 79 81 83 85 85 87 88 89 90 92 94 94 97 99 102 104 107 110 112 114 115

6 Grafik och visualisering 125 6.1 Matplotlib – pyplot . . . . . . . . . . . . . . . . . . . . . . . 125 © F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


INNEHÅLL 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 6.15 6.16 6.17 6.18 6.19

Exempelgalleriet . . . . . . . . Skapa och spara en figur . . . Grundläggande plottmetoder . Axlar och skalning . . . . . . . Text och teckenförklaring . . . Pilar och förklarande text . . . Polygoner och fyllda områden Histogram och stapeldiagram . Plottar av funktionsytor . . . Plottmetoder för 3D-grafik . . Konturplottar . . . . . . . . . Implicita funktioner . . . . . . Matriser och bilder . . . . . . Animeringar . . . . . . . . . . Växelverkan med figuren . . . Grafik – generella råd . . . . . Instuderingsfrågor . . . . . . . Övningar . . . . . . . . . . . .

7

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

126 127 129 134 138 141 142 143 147 148 152 155 157 160 163 165 166 167

7 Programmering 7.1 Logiska uttryck . . . . . . . . . . . 7.2 If-satser . . . . . . . . . . . . . . . . 7.3 While-loopar . . . . . . . . . . . . . 7.4 For-loopar . . . . . . . . . . . . . . 7.5 Fördimensionering . . . . . . . . . . 7.6 Avbrottssatser och flaggor . . . . . . 7.7 Break-loopar . . . . . . . . . . . . . 7.8 Nästlade loopar . . . . . . . . . . . 7.9 Tillämpning – Madelungkonstanten 7.10 Tillämpning – signalbehandling . . 7.11 Tillämpning – bildbehandling . . . . 7.12 Tillämpning – värmeströmning . . . 7.13 Instuderingsfrågor . . . . . . . . . . 7.14 Övningar . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

173 173 176 178 181 185 185 187 188 190 191 193 195 197 198

8 Programstruktur 8.1 Program, funktioner och moduler . . . . . 8.2 Funktioner . . . . . . . . . . . . . . . . . . 8.3 Anrop av funktioner . . . . . . . . . . . . . 8.4 Funktioner – mutabilitet . . . . . . . . . . 8.5 Funktioner – odefinierade lokala variabler . 8.6 Funktionsnamn som invariabler . . . . . . 8.7 Olika antal invariabler – nyckelordsvariabel 8.8 Funktioner samlade i moduler . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

211 211 212 213 216 217 218 221 222

© F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .


8

INNEHÅLL

8.9 8.10 8.11 8.12 8.13

Sökväg för moduler . . . . . Tillämpning – symmetrier . Tillämpning – area på karta Instuderingsfrågor . . . . . . Övningar . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

223 224 227 229 230

9 Vektorisering och effektivitet 9.1 Mäta tidsåtgång . . . . . . . . . . . . . . . . 9.2 Vektorisering . . . . . . . . . . . . . . . . . . 9.3 Vektoriserade operationer under masker . . . 9.4 Extrahera index och räkna . . . . . . . . . . 9.5 Tillämpning – vektoriserad värmeströmning . 9.6 Tillämpning – bildklassificering . . . . . . . . 9.7 Instuderingsfrågor . . . . . . . . . . . . . . . 9.8 Övningar . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

237 237 238 240 242 244 245 247 248

Del II Numerisk matematik

253

10 Linjär algebra 10.1 NumPy – linalg . . . . . . . . . . . . 10.2 Koordinatsystem . . . . . . . . . . . . 10.3 Räkning med vektorer . . . . . . . . . 10.4 Skalärprodukt . . . . . . . . . . . . . 10.5 Normerade vektorer . . . . . . . . . . 10.6 Räkning med vektorer i Python . . . 10.7 Matriser . . . . . . . . . . . . . . . . 10.8 Matrisoperationer . . . . . . . . . . . 10.9 Invers matris . . . . . . . . . . . . . . 10.10 Transponat . . . . . . . . . . . . . . . 10.11 Ortogonala och unitära matriser . . . 10.12 Symmetriska och Hermiteska matriser 10.13 Determinanter . . . . . . . . . . . . . 10.14 Linjära ekvationssystem . . . . . . . . 10.15 Illa-konditionerade system . . . . . . 10.16 Egenvärden och egenvektorer . . . . . 10.17 Numerisk metod – Gausselimination . 10.18 Numerisk metod – egenvärden . . . . 10.19 Tillämpning – dynamiska system . . . 10.20 Tillämpning – tvungna svängningar . 10.21 Tillämpning – fria svängningar . . . . 10.22 Instuderingsfrågor . . . . . . . . . . . 10.23 Övningar . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

255 255 256 258 259 260 261 262 263 266 268 270 270 271 273 275 278 282 285 287 292 295 299 300

© F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


INNEHÅLL

9

11 Funktioner av en variabel 11.1 Funktion av en variabel . . . . . . . . . 11.2 Graf . . . . . . . . . . . . . . . . . . . . 11.3 Kontinuitet och nollställen . . . . . . . 11.4 Derivata . . . . . . . . . . . . . . . . . 11.5 Högre derivator . . . . . . . . . . . . . 11.6 Taylorpolynom . . . . . . . . . . . . . . 11.7 Maximi- och minimipunkter . . . . . . 11.8 Gridd – finita differensapproximationer 11.9 Integraler . . . . . . . . . . . . . . . . . 11.10 Trunkeringsfelet för mittensumman . . 11.11 Richardsonextrapolation . . . . . . . . 11.12 Vektorvärda funktioner . . . . . . . . . 11.13 Tillämpning – graf av derivator . . . . 11.14 Tillämpning – nollställen . . . . . . . . 11.15 Instuderingsfrågor . . . . . . . . . . . . 11.16 Övningar . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

307 307 308 309 310 312 313 314 316 319 321 322 326 328 329 331 331

12 Funktioner av flera variabler 12.1 Funktioner av två variabler . . . . . . . 12.2 Mängder i planet . . . . . . . . . . . . . 12.3 Graf . . . . . . . . . . . . . . . . . . . . 12.4 Konturplottar . . . . . . . . . . . . . . 12.5 Kontinuitet . . . . . . . . . . . . . . . . 12.6 Derivata . . . . . . . . . . . . . . . . . 12.7 Gradient . . . . . . . . . . . . . . . . . 12.8 Högre derivator . . . . . . . . . . . . . 12.9 Tangentplan och Taylorpolynom . . . . 12.10 Maximi- och minimipunkter . . . . . . 12.11 Gridd – finita differensapproximationer 12.12 Dubbelintegraler . . . . . . . . . . . . . 12.13 Dubbelintegraler, allmänna områden . . 12.14 Funktioner av n-variabler . . . . . . . . 12.15 Vektorvärda funktioner av n-variabler . 12.16 Instuderingsfrågor . . . . . . . . . . . . 12.17 Övningar . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

335 335 336 337 339 340 341 342 344 345 347 349 351 353 355 362 365 366

Del III Modellering och simulering 13 Introduktion till modellering och simulering med 13.1 Modellering och simulering . . . . . . . . . . . . . 13.2 Fördelar med simuleringar . . . . . . . . . . . . . 13.3 Olika typer av modeller och simuleringar . . . . . © F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R

371 SciPy 373 . . . . . . 373 . . . . . . 374 . . . . . . 375


10

INNEHÅLL

13.4 13.5 13.6 13.7 13.8 13.9 13.10 13.11

Visualisering av resultat . . . . . . . . Utmaningar . . . . . . . . . . . . . . SciPy . . . . . . . . . . . . . . . . . . Importera underpaket till SciPy . . . Tillämpning – föränderliga betingelser Tillämpning – infektionsepidemiologi Instuderingsfrågor . . . . . . . . . . . Övningar . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

375 376 377 378 379 380 383 383

14 Interpolation 14.1 Polynom . . . . . . . . . . . . . . . . . 14.2 Interpolation med polynom . . . . . . . 14.3 Interpolation med splinefunktioner . . . 14.4 Interpolation i två dimensioner . . . . . 14.5 Interpolation med periodiska funktioner 14.6 Diskret Fouriertransform . . . . . . . . 14.7 Nyquistfrekvens . . . . . . . . . . . . . 14.8 Fast Fourier Transform (FFT) . . . . . 14.9 Diskret Fouriertransform av bilder . . . 14.10 Instuderingsfrågor . . . . . . . . . . . . 14.11 Övningar . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

385 385 387 393 395 400 401 402 404 407 413 413

15 Icke-linjära ekvationer 15.1 Icke-linjära ekvationer . . . . . . 15.2 System av icke-linjära ekvationer 15.3 Kondition . . . . . . . . . . . . . 15.4 Inbyggda funktioner i Python . 15.5 Numeriska metoder . . . . . . . 15.6 Tillämpning – Lagrangepunkter 15.7 Instuderingsfrågor . . . . . . . . 15.8 Övningar . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

419 419 420 422 422 429 436 438 439

16 Optimering 16.1 Globala och lokala minima . . . . . . . . . . . . . . . 16.2 Optimering av funktion av en variabel . . . . . . . . . 16.3 Optimering av funktion av flera variabler . . . . . . . 16.4 Kondition . . . . . . . . . . . . . . . . . . . . . . . . . 16.5 Inbyggda funktioner i Python . . . . . . . . . . . . . 16.6 Numerisk metod – minimering av envariabelfunktion 16.7 Numerisk metod – minimering av flervariabelfunktion 16.8 Tillämpning – rekonstruktion av en yta . . . . . . . . 16.9 Instuderingsfrågor . . . . . . . . . . . . . . . . . . . . 16.10 Övningar . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

445 445 446 447 450 450 458 463 468 471 472

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

© F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


INNEHÅLL 17 Modellering av data 17.1 Minstakvadratanpassningar . . . . . 17.2 Designmatris och normalekvationer 17.3 Polynom som modellfunktioner . . . 17.4 Linjära modellfunktioner . . . . . . 17.5 Icke-linjära modellfunktioner . . . . 17.6 Icke-parametriska modeller . . . . . 17.7 Numerisk metod – Gauss-Newton . 17.8 Tillämpning – videodata . . . . . . 17.9 Tillämpning – jordens andning . . . 17.10 Tillämpning – uteliggare . . . . . . 17.11 Tillämpning – anpassning av cirkel . 17.12 Instuderingsfrågor . . . . . . . . . . 17.13 Övningar . . . . . . . . . . . . . . .

11

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

475 475 476 478 479 482 485 488 491 493 497 500 502 502

18 Integraler 18.1 Tolkning av integraler . . . . . . . . . . . . . 18.2 Kurvlängd . . . . . . . . . . . . . . . . . . . 18.3 Rotationskroppar . . . . . . . . . . . . . . . 18.4 Integraler i Python . . . . . . . . . . . . . . 18.5 Tolkning av dubbel- och trippelintegraler . . 18.6 Dubbel- och trippelintegraler i Python . . . 18.7 Numeriska metoder . . . . . . . . . . . . . . 18.8 Tillämpning – area korrugerad plåt . . . . . 18.9 Tillämpning – diffraktionsgräns för teleskop . 18.10 Tillämpning – gravitationskraft . . . . . . . 18.11 Instuderingsfrågor . . . . . . . . . . . . . . . 18.12 Övningar . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

511 511 512 513 514 518 519 521 529 530 531 533 534

19 Differentialekvationer 19.1 Ordinära differentialekvationer . . . . . . 19.2 System av ordinära differentialekvationer 19.3 Högre ordningens differentialekvationer . 19.4 Begynnelsevärdesproblem i Python . . . 19.5 Begynnelsevärdesproblem – stegmetoder 19.6 Randvärdesproblem . . . . . . . . . . . . 19.7 Egenvärdesproblem . . . . . . . . . . . . 19.8 Tillämpning – populationsdynamik . . . 19.9 Tillämpning – vågfunktion för väte . . . . 19.10 Instuderingsfrågor . . . . . . . . . . . . . 19.11 Övningar . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

539 539 540 541 542 548 554 556 560 563 567 567

© F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .


12

INNEHÅLL

12 20 Monte Carlo-metoder 20.1 Inledande exempel . . . . . . . . . . . . . 20.2 Täthetsfunktion och fördelningsfunktion . 20 Monte Carlo-metoder 20.3 Slumptalsgenerering 20.1 Inledande exempel . i. Python . . . . . .. .. .. .. .. .. 20.4 Mått av ett område . . . . . . . . . . . .. 20.2 Täthetsfunktion och fördelningsfunktion 20.5 Multipelintegraler . . . . . . . .. .. .. .. .. .. 20.3 Slumptalsgenerering i Python 20.6 Tillämpning – jordens tröghetsmoment 20.4 Mått av ett område . . . . . . . . . . . .. 20.7 Multipelintegraler Tillämpning – felfortplantning 20.5 . . . . . . . .. .. .. .. .. .. 20.8 Tillämpning – strålningstransport . . . .. 20.6 Tillämpning – jordens tröghetsmoment 20.9 Tillämpning – ideal gas i 2D . . . . 20.7 Tillämpning – felfortplantning . . . .. .. .. 20.10 Tillämpning Instuderingsfrågor . . . . . . . . . .. .. .. .. 20.8 – strålningstransport 20.11 Övningar . . . . . . . . i. 2D . . .. .. .. .. .. .. .. 20.9 Tillämpning – ideal gas

. . .. .. .. .. .. .. .. .. ..

. . .. .. .. .. .. .. .. .. ..

. . .. .. .. .. .. .. .. .. ..

. . .. .. .. .. .. .. .. .. ..

. . .. .. .. .. .. .. .. .. ..

INNEHÅLL 579 . . . . . . 579 . . . . . . 579 580 .. .. .. .. .. .. 581 579 .. .. .. .. .. .. 580 585 587 .. .. .. .. .. .. 581 .. .. .. .. .. .. 589 585 .. .. .. .. .. .. 591 587 592 .. .. .. .. .. .. 589 .. .. .. .. .. .. 595 591 .. .. .. .. .. .. 599 592 599 .. .. .. .. .. .. 595

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

20.10 Instuderingsfrågor . . . . . . . . . . . . . . . . . . . . . . . . 599 A Installera Anaconda 605 20.11 Övningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599

Bilaga

B Jupyter Notebook A Installera Anaconda B.1 Starta Jupyter Notebook . Spara en arbetsbok . . . . B B.2 Jupyter Notebook B.3 Lägga bilder Notebook och länkar . B.1 Starta in Jupyter B.4 Ladda upp datafiler B.2 Spara en arbetsbok .. .. .. .. B.5 Öppnain enbilder arbetsbok . . . . B.3 Lägga och länkar

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

. . .. .. ..

607 605 607 611 607 612 607 612 611 613 612

B.4 Ladda upp datafiler . . . . . . . . . . . . . . . . . . . . . . . 612 C Lösningar till valda övningar 615 B.5 Öppna en arbetsbok . . . . . . . . . . . . . . . . . . . . . . . 613 Sakregister C Lösningar till valda övningar

619 615

Sakregister

619

© F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


Del I

Programmering i Python



Kapitel 1

Introduktion till Python Python är ett generellt programspråk, som lanserades 1991 av Guido van Rossum. Språket stöder objektorienterad programmering. Python har utvecklats som öppen källkod, vilket gör att det finns många tilläggspaket. Python används till exempel för vetenskapliga beräkningar, modellering och simulering, maskininlärning, datautvinning, datorgrafik, datavisualisering och grafiska användargränssnitt. Enligt det så kallade TIOBE-indexet är Python världens mest använda programspråk (januari 2022).

1.1

Installera Python

Vi rekommenderar att Python installeras via Anaconda Individual Edition, vilken finns för Windows, Mac och Linux (se appendix A för installationsinstruktioner). Då vi installerar Anaconda får vi bland annat Python, utvecklingsmiljön Spyder och anteckningsboken Jupyter (se appendix B för att komma igång). Anaconda gör det också lätt att ladda ner tilläggspaket till Python via den inbyggda pakethanteraren Conda.

1.2

Spyder utvecklingsmiljö

Spyder är en integrerad utvecklingsmiljö (eng. Integrated Development Environment, IDE) för Python, som innehåller ett kommandofönster (eng. IPython console), där man kan arbeta interaktivt, en editor, där man skriver sina program (script), och en variabelutforskare, där man kan se vilka variabler som är definierade och deras värden. Spyder har även verktyg för att hantera och spara plottar och felsöka (debugga) program. Spyder visas i figur 1.1. Då man startar Spyder får man ljus text mot en svart bakgrund. Om man inte tycker detta är snyggt, och vill byta till en vit bakgrund med svart text, © F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


16

Introduktion till Python

Figur 1.1: Spyder utvecklingsmiljö för Python. Fönstret nere till höger är kommandofönstret (eng. IPython console), där man skriver in sina kommandon. Fönstret till vänster är editorn, där man skriver sina script. så gör man det genom att i verktygsfältet klicka på Inställningar och välja Appearance. Under Syntax highlighting väljer man Spyder i stället för Spyder Dark. Det är ofta bekvämt att interaktivt kunna manipulera plottar och grafik. För att möjliggöra detta går vi till Inställningar och väljer IPython console. Under Graphics väljer vi Backend: Automatic. I det följande förutsätter vi att detta är gjort.

1.3

Tilläggspaket och moduler

Vid starten av Python finns bara en begränsad mängd kommandon (funktioner) att tillgå. Beroende på uppgiften vi vill lösa, behöver vi importera funktioner från olika paket eller moduler. Detta kan göras på flera olika sätt. Det finns till exempel inga matematiska funktioner då vi startar Python. För att importera kvadratrotfunktionen sqrt från modulen (paketet) numpy skriver vi from numpy import sqrt Vi kan nu använda kvadratroten som vanligt. För att beräkna kvadratroten © F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


1.4 Interaktiv körning

17

ur fyra skriver vi sqrt(4) Det är ofta opraktiskt att importera funktioner en och en. För att importera alla funktioner från numpy ger vi kommandot import numpy Vid anropet av funktionerna måste vi nu ha med modulnamnet som ett förled och anropet blir numpy.sqrt(4) Vi kan också importera modulen och ge den ett förkortat namn. Det har blivit standard att numpy importeras som import numpy as np Anropet av funktionen blir nu np.sqrt(4) För att behärska Python måste man veta vilka moduler och funktioner som finns tillgängliga. De viktigaste modulerna (paketen) är math, som bland annat innehåller de elementära matematiska funktionerna, numpy, som tillåter oss att arbeta med flerdimensionella matriser (eng. arrayer), scipy, som används för att göra beräkningar inom matematisk analys och linjär algebra, och matplotlib, som innehåller funktioner för plottning och grafik. Vi återkommer till dessa moduler (paket) och tillhörande funktioner längre fram.

1.4

Interaktiv körning

En av de trevliga sakerna med Python är att vi kan köra det interaktivt. Kommandon skrivs i kommandofönstret och utförs när returtangenten trycks ned. Vi börjar med några enkla exempel och struntar i att ge alla detaljer då de kommer senare. Exempel 1.1. För att beräkna 16 · 27 skriver vi 16*27 och trycker retur. Python skriver ut svaret 432 © F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


18

Introduktion till Python

Exempel 1.2. Vi ska beräkna sin(π/4). Både sinusfunktionen och värdet på π finns i modulen math, som vi måste importera. Kommandona blir import math math.sin(math.pi/4) och Python svarar 0.7071067811865476

Exempel 1.3. Vi har talen 1, 2, 4, 2, 7, 8, 2, 13 och ska beräkna medelvärdet. Funktionen som beräknar medelvärde heter mean och finns i modulen numpy, som vi måste importera. Vi ger kommandona import numpy as np x = [1,2,4,2,7,8,2,13] np.mean(x) och Python svarar 4.875

1.5

Script och py-filer

En serie kommandon samlade i en fil utgör ett program eller ett script. Kommandona i filen delas ofta in i mindre enheter, vilka kallas celler. En cell inleds med #%%. I Python har filer som innehåller kommandon alltid suffixet (extensionen) .py och kallas ibland py-filer. Script och kommandofiler skapas i Spyders editor. Då man skrivit in sina kommandon i editorn, klickar man på ikonen för att spara, varvid Spyder ber en att ge namnet på filen och katalogen där den ska sparas. För att köra eller exekvera programmet, vilket innebär att de inskrivna kommandona utförs i ordning uppifrån och ner (sekventiellt), klickar vi på ikonen med den gröna triangeln i Spyders verktygsfält. I stället för att exekvera hela programmet kan vi exekvera enskilda celler. Gå in i editorn och ställ dig i den aktuella cellen. Klicka sedan på ikonen till höger om den gröna triangeln så körs (exekveras) kommandona i cellen. Editorn med inskrivna kommandon i två celler visas i figur 1.2. Program kan också köras från kommandofönstret genom att skriva runfile följt av programnamn, inklusive sökväg, inom parentes. Observera att namn på py-filer ej får börja med siffror. Namn får ej heller innehålla punkter annat än för att markera extension. Mer om namnkonventioner i kapitel 3.8. © F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


1.5 Script och py-filer

Figur 1.2: Fönstret till vänster är editorn, där man skriver sina program. Första raden kommer upp automatiskt och anger att Unicode Transformation Format 8 bits (utf-8) används för att avkoda symboler. Text inom de trippla citationstecknen är kommentarer. Det är lämplig att här skriva vad programmet gör, när det skapades och vem som skrivit det. Programmet, vilket har givits namnet funplot.py, körs genom att klicka på den gröna triangeln i verktygsfältet. Programmet kan också köras genom att i kommandofönstret ge kommandot runfile följt av programnamnet inom parentes. För att öppna en redan existerande py-fil klickar man på ikonen för att öppna i verktygsfältet. Man kan också gå in via File i menyraden. Då man gjort ändringar i en fil måste dessa sparas genom att klicka på ikonen för att spara. Vi tar två exempel för att visa på användningen av py-filer. För att inte skriva så mycket visar vi inte de första raderna med Unicode Transformation Format eller kommentarerna inom citationstecknen. Text efter # är kommentarer och ignoreras av Python. Kommentarer är viktiga för att andra ska kunna förstå hur programmet fungerar. Exempel 1.4. Vi har en summa s = 3 + 4 + 5 + . . . + 52. Summan beräknas med följande py-fil # summa.py s = 0 for i in range(3,53): s = s + i

# Sätt summa till noll # Loopa från 3 till 52 # Addera term till summan

print(’Summan är ’,s)

# Skriv ut resultatet

© F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R

19


20

Introduktion till Python

Py-filen sparas genom att klicka på ikonen för att spara och döps till summa.py. Filen (programmet) körs genom att klicka på den gröna triangeln och Python skriver ut Summan är

1375

Exempel 1.5. Följande py-fil bestämmer antalet element i en vektor x och räknar hur många av dessa element som är positiva. # element.py x = [1,2,-1,-2,-3,4,-5] n = len(x) npos = 0 for i in range(0,n): if x[i] > 0: npos = npos + 1

# # # # # #

Definiera vektorn x Antal element i x Antal pos. element sätts till 0 Loopa över elementen i vektorn Om element positivt öka npos med ett

print(’Antal element’,n) # skriv ut print(’Antal positiva element’,npos) Vi döper py-filen till element.py. Då vi kör filen skriver Python ut Antal element 7 Antal positiva element 3

1.6

Skriva in och editera kommandon

Kommandona som skrivs i kommandofönstret lagras i en buffert. Genom att använda piltangenterna ↑ och ↓ kan man bläddra bland de inskrivna kommandona. Spyder använder sig av automatisk komplettering (eng. TAB-completion), vilket innebär att du bara behöver skriva in början av ett kommando och sedan trycka på TAB-tangenten för att få förslag på hur kommandot kan kompletteras. Detta är mycket användbart! Automatisk komplettering fungerar även på egeninförda variabler, vilket gör att vi inte behöver vara rädda för långa variabelnamn eller för att skriva fel. Exempel 1.6. Vi avser att skriva kommandot import math. Då vi börjar skriva

© F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


1.7 LaTeX – dokumentera program

im <tryck TAB> och trycker på TAB-tangenten, kompletteras kommandot till import Då vi fortsätter kommandot och adderar m import m <tryck TAB> och trycker på TAB-tangenten, kommer 30 möjliga kompletteringar fram och vi väljer den önskade kompletteringen import math. Exempel 1.7. Vi har importerat modulen math genom import math För att se vilka funktioner som är tillgängliga i modulen skriver vi math. <tryck TAB>

# notera punkten efter math

och trycker på TAB-tangenten. Vi får upp en lista över alla funktioner som är tillgängliga i modulen, och vi kan välja den vi önskar. Detta är mycket användbart. Exempel 1.8. Vi skriver ett program gravitation.py i editorn # gravitation.py mass_of_earth = 5.972e24 mass_of_moon = 7.3476e22 distance = 3.844e8 G = 6.67408e-11 För att på nästa rad i programmet beräkna kraften mellan jorden och månen som produkten av massorna och gravitationskonstanten delat med det kvadrerade avståndet, behöver vi bara skriva mass och trycka på TAB-tangenten för att få en lista av möjliga variabelnamn som börjar med mass av vilka vi väljer mass_of_earth. Vi skriver sedan * och mass och trycker på TABtangenten. I listan som kommer upp, väljer vi nu mass_of_moon. Upprepad användning av automatisk komplettering gör att det går snabbare att skriva, dessutom undviker vi skrivfel.

1.7

LaTeX – dokumentera program

Vi använder Python för att lösa uppgifter av olika slag. Som en del av detta behöver vi nästan alltid dokumentera de utvecklade programmen – hur de © F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R

21


Per Jönsson är docent i fysik och professor i tilllämpad matematik. Han har lång erfarenhet av undervisning i programmering, beräkningsvetenskap, modellering och simulering och har skrivit flera böcker inom området. Per är verksam vid Malmö universitet och har erhållit universitetets pedagogiska pris.

Programmering, modellering och simulering i Python Boken behandlar programmering, modellering och simulering i Python och vänder sig till en bred grupp av användare – från nybörjare, som vill lära sig grunderna i programmering, till mer vana användare, som vill använda Pythons olika paket för att modellera och simulera. I bokens första del behandlas grunderna i programmering. Presentationen är till stor del baserad på konkreta exempel: detta skriver man in och så här blir resultatet. Bokens andra del går igenom den matematik, främst linjär algebra och analys, som är nödvändig för att kunna använda Python för att modellera och simulera. Presentationen av matematiken knyts till Pythons inbyggda funktioner och rutiner. Den tredje och avslutande delen behandlar modellering och simulering. Efter en inledande översikt redovisas olika metoder för att sätta upp modeller och köra simuleringar, men även för att hantera och analysera experimentella data. Boken innehåller ett stort antal övningsuppgifter med fullständiga lösningar och lämpar sig väl för självstudier. På bokens webbplats (studentlitteratur.se/45427) finns datafiler och material för att kunna köra de exempel som presenteras. Där finns också fullständiga lösningar till bokens övningar. Art.nr 45427

studentlitteratur.se

© F Ö R F AT TA R E N O C H S T U D E N T L I T T E R AT U R


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.