


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.
Medhilsen
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
