Skip to main content

Python for realfag, 3. utgave (9788245046052)

Page 1


Copyright © 2023 by Vigmostad & Bjørke AS All Rights Reserved

1. utgave 2020

2. utgave 2021

3. utgave 2023 / 1. opplag 2023

ISBN: 978-82-450-4605-2

Grafisk produksjon: John Grieg, Bergen

Omslagsdesign ved forlaget

Omslagsillustrasjon ved Paulina Mingiacchi

Sats ved Finn Aakre Haugen

Spørsmål om denne boken kan rettes til: Fagbokforlaget

Kanalveien 51

5068 Bergen

Tlf.: 55 38 88 00

e-post: fagbokforlaget@fagbokforlaget.no www.fagbokforlaget.no

Materialet er vernet etter åndsverkloven. Uten uttrykkelig samtykke er eksemplarfremstilling bare tillatt når det er hjemlet i lov eller avtale med Kopinor.

1Innledning 21

1.1Hvorforlære˚aprogrammere?.......................21

1.1.1Anvendelser.............................21

1.1.2Undervisning............................22

1.3.1Python–kortfortalt........................25

1.3.2Hvorforsatsep˚aPython?.....................25

1.3.3N˚arerPythonikkeaktuelt?....................25

1.3.4HvemtemmerPython?.......................26 1.4Skrivem˚ateriboken.............................27 1.5Ombokensinnhold.............................27 1.6Læremer?..................................28

1.6.1Nettsteder..............................28

1.6.2Nettbasertekurs..........................29

1.6.3Bøker................................29

2.3.1HvordanstarteSpyder.......................33

2.3.2Spydersbrukergrensesnitt.....................33

2.3.3Programmeringikonsollen.....................35

2.3.3.1Programmeringkunmedtallikonsollen........35 2.3.3.2Programmeringmedvariablerikonsollen........37

2.3.5InnstillingavSpyder........................43

2.4Hjelp.....................................44

2.4.1HjelpominnebygdePython-funksjoner..............45

2.4.2Hjelptil˚afinnesyntaksfeilidinprogramkode..........46

2.4.3Hjelpomfunksjonsfeil.......................46

2.4.4Hjelptil˚afinnekodesomdukanskriveidittprogram.....46

2.5JupyterNotebook..............................47

2.5.1HvordanstarteJupyterNotebook.................47

2.5.2HvordanlageogkjøreNotebook-dokumenter...........48

2.5.3HvordanlagreNotebook-dokumenter...............50

2.5.4FormateringavNotebook-dokumenter..............50

2.6Importogbrukavfunksjonspakkerog-moduler.............52

2.6.1Pakkerogpakkebehandlingmedcondaellerpip.........52

2.6.1.1Pakker...........................52

2.6.1.2Pakkebehandling.....................52

2.6.2InnebygdefunksjoneriPython(standardpakken)........54

2.6.3 ImportavpakkeriAnaconda-distribusjonen...........54

2.6.3.1TilgjengeligepakkerforPython.............54

2.6.3.2Opplistingavpakkersomerinstallertp˚aPC-en....54

2.6.3.3Hvordanimporterepakkersomerinstallertp˚aPC-en.55

2.6.3.4Hvordanimporteremodulersominng˚aripakker...56

2.6.4InstalleringogimportavpakkersomikkefølgermedAnacondadistribusjonen............................57

2.7Oppgavertilkapittel2...........................57

2.8Løsningertilkapittel2...........................59

3Variablerogdatatyper 65 3.1Innledning..................................65 3.2Variabler...................................65

3.2.1Hvaerenvariabel?.........................65

3.2.2Hvorforbrukevariablern˚arvikunnebruktverdierdirekte?...66

3.2.3Hvordanvelgevariabelnavn....................67

3.3Littomfunksjoner.............................68

3.4Talloggrunnleggendematematiskeoperasjoner.............70

3.4.1Talltyper...............................70

3.4.2Hvordanformateretalliprint-funksjonen.............72

3.4.3Matematiskeoperatorer......................73

3.5Tekststrenger(strings)...........................75

3.6Fratalltiltekstogfrateksttiltall....................76

3.7Boolskevariabler,logiskeoperatorerogsammenlikningsoperatorer...78

3.7.1Innledning..............................78

3.7.2Boolskevariabler..........................79

3.7.3Logiskeoperatorer.........................80

3.8.2.2Hvordanoppdaterelisteelementermednyeverdier..86

3.11.1Innledning..............................93

3.11.2Hvordankonverterelistertilarrayerogmotsatt.........93

3.11.2.1Konverteringfralistetilarray..............93

3.11.2.2Konverteringfraarraytilliste..............94

3.11.3Lagearrayermedspesiellutforming................95

3.11.3.1Arrayermedlikeelementverdier.............95

3.11.3.2Arraymedfastinkrementmellomelementene.....97

3.11.3.3Flerdimensjonaleellern-dimensjonalearrayer.....98

3.11.4Operasjonerp˚aarrayer.......................99

3.11.4.1Innledning.........................99

3.11.4.2Størrelsenavenarray..................100

3.11.4.3Leseelementverdierienarray..............101

3.11.4.4Oppdatereelementerienarray.............102

3.11.4.5Utvidearrayermednyeelementer............103

3.11.4.6 Fjerneelementerfraarrayer...............104

3.11.4.7Finnemaksimumogminimumiarrayer........104

3.11.5Matematiskeoperasjonerp˚aarrayer,inkl.matriser.......105

3.11.5.1Addisjonmedskalarogmultiplikasjonmedskalar...105

3.11.5.2Hvordanlageradvektorerogkolonnevektorerogmatriser106

3.11.5.3Vektor-ogmatrisemultiplikasjoner...........109

3.11.6Matrisefunksjonerforlineæralgebra................112

3.11.7Vektoriserteberegninger......................113

3.12Oppgavertilkapittel3...........................117

3.13Løsningertilkapittel3...........................122

4Plotting

4.2.1Etsuper-enkeltkurveplott.....................140

4.2.2Etskikkeligplott..........................141

4.2.3Flereennettfigurvindu?......................144

4.2.4ViseplottiPlots-faneniHelp-vinduetellerieksterntvindu?..145

4.2.4.1PlottfigurervistiPlots-faneniHelp-vinduet......145

4.2.4.2Plottfigurvistieteksterntvindu............146

4.2.5Hvordanlagrefigurp˚afilautomatisk...............147

4.2.6Subplott...............................147

4.2.7Hvordansettestørrelsenavfigurvinduet.............148

4.2.8Matematiskesymboleridiagramtittelo.l..............149

4.3Stolpediagram................................151

4.4Kakediagram................................152

4.5Histogram..................................154

4.6 Objektorientertplottekoding........................155

4.7Oppgavertilkapittel4...........................155

4.8Løsningertilkapittel4...........................158

5Funksjoner 165

5.1Innledning..................................165

5.2Hvordanprogrammerefunksjoner.....................166

5.2.1Grunnleggendefunksjonsdefinisjon................166

5.2.2Hvordanreturnereflereenn´enverdi...............168

5.2.3Funksjonsargumentermedstandardverdi.............169

5.2.4Funksjonskallmedbrukavkeyword-argument..........170

5.2.5*argsog**kwargs..........................171

5.2.6Dokumentasjonstekst(docstring).................172

5.2.7Navnerom(namespace).......................174

5.3Programmeringavmoduler........................176

5.4Lambda-funksjoner.............................178

5.5Oppgavertilkapittel5...........................179

5.6Løsningertilkapittel5...........................182

6Testingavkode 193

6.1Innledning..................................193

6.2Hvordantesteforfunksjonsfeil?......................194

6.3Hvordankjørekunendelavprogrammet?................198

6.4Oppgavertilkapittel6...........................198

6.5Løsningertilkapittel6...........................202

7.2

7.5Løsningertilkapittel7...........................210

8Løkker

8.2.1Grunnleggendeprogrammeringavfor-løkker...........218

8.2.2Hvordanskrivetilarray-elementerienfor-løkke.........220

8.2.3Nøstedeløkker...........................221

8.2.4Preallokeringavarrayerforsparingavkjøretid..........222

8.3While-løkker.................................225

8.4Oppgavertilkapittel8...........................228

8.5Løsningertilkapittel8...........................233

9.2.1Tekstbasertedatafiler........................251

9.5Excel-fileriPython.............................257

9.5.1Innledning..............................257

9.5.2LesedatafraExcel-filerinntilPython..............257

9.5.3SkrivedatafraPythontilExcel..................259

PYTHON FORREALFAG

9.6

14.3.1

14.3.5Negativtareal?...........................393

14.4Oppgavertilkapittel14..........................394

16.4.6

16.4.6.1Statisktestavsimuleringen...............435

16.4.6.2Dynamisktestavsimuleringen.............436

16.4.7Valgavsimulatoralgoritmenstidsskritt..............437

16.5Simulatoralgoritmeformengdesystemer..................440

16.6Simulatoralgoritmeforbevegelsessystemer................447

16.7Simulatorfortidsforsinkelse........................452

16.8Simuleringisanntidellerskalertsanntid................457

16.8.1Realiseringavsimuleringi(skalert)sanntid...........457

16.8.2Kontinuerligoppdatertplott....................459

16.8.3Justeringavparametremenssimulatorenkjører.........463

16.9Oppgavertilkapittel16..........................465

16.10Løsningertilkapittel16..........................473

17.2Formuleringavoptimeringsproblemer...................485

17.3Noentypisketrekkvedobjektfunksjonen.................488

17.4Hvordanløseoptimeringsproblemer....................490

17.4.1Oversiktoverløsningsmetoder...................490

17.4.1.1Analytiskmetode.....................490

17.4.1.2Bruteforce-metoden...................490

17.4.1.3Iterativmetode......................491

17.4.1.4Kombinasjonavbruteforce-metodenogeniterativmetode............................492

17.4.2Analytiskløsning..........................492

17.4.3Bruteforce-metoden........................493

PYTHON FORREALFAG

17.4.3.1 Prinsippogimplementeringavbruteforce-metoden..493

17.4.3.2Optimeringmed´enoptimeringsvariabel........496

17.4.3.3Optimeringmedtooptimeringsvariablerutenulikhetsbegrensning........................498

17.4.3.4Optimeringmedtooptimeringsvariablermedulikhetsbegrensning........................500

17.4.3.5Lineærobjektfunksjonmedulikhetsbegrensninger...502

17.4.4Harduvirkeligfunnetminimum?.................505

17.5Oppgavertilkapittel17..........................508

17.6Løsningertilkapittel17..........................511

18Modelltilpassingtildata 519

18.1Innledning..................................519

18.2Prinsippetformodelltilpassing.......................519

18.3Modelltilpassingavstatiskemodeller...................521

18.3.1Modelltilpassingmedbruteforce-optimeringmedelementærPythonkode.................................522

18.3.2Modelltilpassingmedbrute-funksjoneniscipy.optimize-pakken.532

18.4Modelltilpassingavdynamiskemodeller..................535

18.5Oppgavertilkapittel18..........................540

18.6Løsningertilkapittel18..........................543

19Statistikkogsannsynlighetsregning 549

19.1Innledning..................................549

19.2Utfallsromogpopulasjon..........................549

19.3Simuleringavstokastiskeforsøk......................550

19.3.1Hvorforsimulere?..........................550

19.3.2Simuleringmedchoice-funksjonen.................551

19.3.3Repeteresammetilfeldigeuttrekk?................555

19.4 Statistiskem˚al...............................556

19.4.1Innledning..............................556

19.4.2Middelverdi,variansogstandardavvik..............557

19.4.2.1Middelverdi........................557

19.4.2.2Varians..........................557

19.4.2.3Standardavvik......................558

19.4.3Forventningsverdi..........................561

19.5Sannsynlighetsfordelinger..........................563

19.5.1Innledning..............................563

19.5.2Noensannsynligedefinisjoner...................563

19.5.3Diskretsannsynlighetsfordeling..................564

19.5.4Hyppighetsfordeling.........................566

19.5.5Kontinueligfordeling:Normalfordelingen.............570

19.5.5.1Innledning.........................570

19.5.5.2Teoretisknormalfordeling................572

19.5.5.3Simuleringavnormalfordeling..............573

19.5.6Kontinueligfordeling:Uniformfordeling.............576

19.5.6.1Teoretiskuniformfordeling...............576

19.5.6.2Simuleringavuniformfordeling.............577

19.6Hvordanestimeresannsynlighetenforhendelseristokastiskeforsøk?..580

19.7Oppgavertilkapittel19..........................585

19.8Løsningertilkapittel19..........................589

Forord

Viharskrevetdennebokenforallesomvillære˚aprogrammereløsningerp˚arealfagligeproblemeri Python.Vitroratbokenvilværenyttigforstudenterogansatteveduniversiteteroghøgskoler, eleveroglærereividereg˚aendeskolerogfagfolkiforskning,utviklingogindustri.

Littomv˚arbakgrunn:

• Finn:JegerdosentvedUniversitetetiSørøst-Norge(USN),campusPorsgrunn.Min utdanningersivilingeniørielektro/tekniskkybernetikkfratidligereNorgestekniskehøgskole (NTH)i1986ogdoktorgrad(ph.d.)fratidligereHøgskoleniTelemark.Jegharlangerfaring fraundervisningvedflereuniversiteteroghøgskolerogfrakursvirksomhetforindustrienog harogs˚aarrangertfagdagerforelevervedvidereg˚aendeskoleriGrenland.Jegharbrukt programmeringtilproblemløsingitekniskkybernetikksiden80-tallet.

• Marius:Jegerprofessorimatematikkmedsimuleringogmodelleringsomhovedomr˚aderved USN,campusPorsgrunn.Siden2010harjegundervistimatematikk,algoritmisktenkningog programmeringiPythonvedingeniørstudiet.Iperioden2004–2012jobbetjegmed matematiskemodellerogutviklingavalgoritmervedSimulaResearchLaboratoryiOslo.Jeg hargjennomflere˚arværtpartnerisenteretforfremragendeundervisning–Centerfor ComputinginScienceEducation,UniversitetetiOslo.Jegharendoktorgrad(ph.d.)ianvendt matematikkfraUniversitetiBergen(2004).

ProgrammeringiPythoninng˚ariemnene(fagene)viunderviservedUSN,ogvibrukerPythoni forskningsprosjekter.ViharsamarbeidetommangekursiPython-programmeringdesiste˚arene; kursforrealfagslærereividereg˚aendeskolerogkursrettetmotindustriansattep˚aoppdragfra Direktoratetforhøyreutdanningogkompetanse(HK-dir).

Vikanmedh˚andenp˚ahjertetsiatprogrammeringberikerv˚arundervisningogforskninginnen kybernetikkogmatematikk.Medprogrammeringf˚arvitattibrukteoretiskemetodertil˚aløse teoretiskeogpraktiskeproblemerp˚aeneffektivm˚ate.Detfascinereross.Ogviharstorgledeav˚a prøve˚agistudenternoeavdensammeopplevelsen.Utendissepositiveopplevelsenesomviharav programmering,haddedetnokikkeblittnoenbok.

Pythonerblittetavdemestpopulæreprogrammeringsspr˚akeneiverden.DetskyldesatPythoner brukervennlig,kraftigogfritttilgjengelig!

Pythoneretengelskspr˚akligprogrammeringsspr˚akidenforstandatterminologieni programmeringsmiljøeneogidokumentasjonenerp˚aengelsk.Etterv˚armeningerdetfornuftig˚a brukedenopprinneligeengelsketerminologienogikkefinneoppnorskPython-terminologi,med mindredetfallerheltnaturlig.Enalternativ ≪skyggeterminologi≫ kanskapemisforst˚aelser.Ellers brukerviselvsagtnorskeordoguttrykkderdeternaturlig.

I bokenviservihvordandukanprogrammerealgoritmerfragrunnenav,f.eks.algoritmerfor numeriskintegrasjonogsimulering.Vitroratdudermedvilutvikleengrunnleggendeforst˚aelseav matematiskproblemløsingmedalgoritmersamtidigsomdulærerprogrammering.

Bokenerihovedsakbasertp˚as˚akaltprosedyreorientert(engelsk:proceduralprogramming),somkan betraktessom ≪tradisjonell≫ programmering.Pythongirogs˚amulighetforobjektorientert programmering(engelsk:object-orientedprogramming–OOP),ogvigirenintroduksjontil objektorientertprogrammeringietegetkapittel.

Bokenhartodeler.Del1–GrunnleggendePython-programmeringomfatterbl.a.plottingmed Matplotlib-pakkenognumeriskdatabehandlingmedNumpy-pakkenbasertp˚asinarray-datatype, ellerstrengttatt:numpy.ndarray1,ogsinefunksjonerforeffektivmatematiskprogrammering.Del2 –AnvendtPython-programmeringdekkerviktigeogspennenderealfagligeanvendelser.

Bokeninneholdermangeeksempler.Noenaveksemplene illustrerer enmetodeellerframgangsm˚ate ogfølgeretteratdenaktuellemetodenerforklart.Iandreeksempler introduserer vienmetode.

EtundervisningsoppleggforlæringavPython-programmeringm˚aselvsagtinkludereøvingsoppgaver. Viharlagtinnoppgavermeddetaljerteløsningerisluttenavhvertkapittel.Iløsningenetil oppgaveneidel1avbokenerprogramkodengjengitt.Iløsningeneidel2harvivalgtkun˚aangi lenkertilprogrammenefordiprogrammeneidel2gjerneerrelativtstore.

Bokeninneholderetstortantallkompletteprogrammer,ieksemplerogiløsningsforslagtiloppgaver. Lenkertilprogrammeneerangittiboken.Programmeneerogs˚atilgjengeligeviabokenshjemmeside p˚ahttp://techteach.no/python.

Viharvalgt˚abrukesammefonttypeogfontstørrelsep˚ab˚adevanligtekstogpythonske (Python-spesifikke)navnogbegreper.Detframg˚aravkontekstenhvasomernorskoghvasomer pythonsk.

Bokenerbasertp˚aPython3.10somkjørerp˚aenPCmedWindows11.

Dulesern˚a3.utgaveavboken.Deviktigstenyheteneidenneutgaveniforholdtil2.utgaveer: Kapittel2omprogrammeringsmiljøereromarbeidetogforenklet.Deteretnyttkapittel(kap.13) kaltBlandadropssominneholderensamlingavsammensatteoppgavermedløsninger(ellerserdet somtidligereoppgavermedmedløsningerisluttenavhvertkapittel).Ikapitletomløsingav likninger(kap.15)harvitattmedbruteforce-metodensomutnytterPythonsenorme regnekapasitettil˚aløselikninger.For˚abegrensebokensomfangharvitattutkapitlerom signalfiltrering,automatiseringogprogrammeringavfysiskutstyrogistedetgjortdissekapitlene tilgjengeligeviabokenshjemmesidep˚atechteach.no.Ogselvsagtharvirettetkjentefeil.

Takktilallesomharbidrattmedkommentareroginnspilltilboken!Takkogs˚atilalledepositive folkeneiFagbokforlaget,spesieltfagredaktørLassePostmyrforsinimøtekommenhetoverfoross forfattere.

Vih˚aperbokenerlærerikoglett˚alese.Dersomduharkommentarertilboken,kandugjernesende demtilenavv˚aree-postadresserangittnedenfor.

FinnAakreHaugenMariusLysaker finn.haugen@usn.nomarius.lysaker@usn.no

1n-dimensjonal array

Vil du lære å programmere i Python for å løse numeriske problemer innen realfag? Da har du funnet rett bok!

Boken er skrevet for studenter og ansatte ved universiteter og høgskoler, elever og lærere i videregående skoler, samt fagfolk i forskning, utvikling og industri.

Denne 3. utgaven av boken inneholder enda flere øvingsoppgaver og et helt nytt kapittel med sammensatte oppgaver. Flere av kapitlene er omarbeidet med bl.a. nye eksempler. Enkelte kapitler i tidligere utgaver er tatt ut av boken, men er tilgjengelige på bokens hjemmeside på techteach.no.

Boken har to deler:

Grunnleggende Python-programmering: Gir en trinn-for-trinn-innføring i Python-programmering, inkludert effektive beregninger med Numpy-pakken og plotting med Matplotlib-pakken.

Del 2 Anvendt Python-programmering: Dekker spennende og viktige realfaglige anvendelser.

Boken inneholder oppgaver med detaljerte løsninger. Alle programmene som inngår i eksempler og løsninger, er tilgjengelige via lenker angitt i boken.

ph.d., dosent i automatiseringsteknikk (teknisk kybernetikk)

ph.d., professor i matematikk med simulering og modellering som hovedområder

Begge er ansatt i faglige stillinger ved Universitetet i Sørøst-Norge (campus Porsgrunn) og underviser emner ved OsloMet.

ISBN 978-82-450-4605-2

Turn static files into dynamic content formats.

Create a flipbook
Python for realfag, 3. utgave (9788245046052) by Fagbokforlaget - Issuu