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.
Innhold I GrunnleggendePython-programmering 19 1Innledning 21 1.1Hvorforlære˚aprogrammere?.......................21 1.1.1Anvendelser.............................21 1.1.2Undervisning............................22 1.2Programmedinndataogutdata......................23 1.3OmPython.................................25 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 1.7Oppgavertilkapittel1...........................29 1.8Løsningertilkapittel1...........................29 3
PYTHON FORREALFAG
2 Programmeringsmiljøer 31 2.1Innledning..................................31 2.2Anaconda..................................31 2.3Spyder....................................33 2.3.1HvordanstarteSpyder.......................33 2.3.2Spydersbrukergrensesnitt.....................33 2.3.3Programmeringikonsollen.....................35 2.3.3.1Programmeringkunmedtallikonsollen........35 2.3.3.2Programmeringmedvariablerikonsollen........37 2.3.4Programmeringmedskript.....................39 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 4
INNHOLD 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 5
3.7.4 Sammenlikningsoperatorer.....................81 3.8Lister(lists).................................82 3.8.1Hvaerlister?............................82 3.8.2Operasjonerp˚alister........................83 3.8.2.1Leselisteelementer....................83 3.8.2.2Hvordanoppdaterelisteelementermednyeverdier..86 3.8.2.3Utvidelistermednyeelementer.............87 3.8.2.4Fjernelisteelementer...................88 3.8.2.5Listemanipuleringmed+og*..............89 3.9Tupler....................................90 3.10Dictionary..................................92 3.11Arrayer...................................93 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 6
PYTHON FORREALFAG
INNHOLD 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 139 4.1Innledning..................................139 4.2Kurveplott..................................140 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 7
PYTHON FORREALFAG
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 7If-else 205 7.1if-else.....................................205 8
INNHOLD 7.2 Etlivutenelse...............................207 7.3elif......................................208 7.4Oppgavertilkapittel7...........................209 7.5Løsningertilkapittel7...........................210 8Løkker 217 8.1Innledning..................................217 8.2For-løkker..................................218 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 9Leseogskrivefildata 251 9.1Innledning..................................251 9.2Filformater.................................251 9.2.1Tekstbasertedatafiler........................251 9.2.2Binærdatafiler............................253 9.3Lesedataserierfrafil............................254 9.4Skrivedataseriertilfil...........................255 9.5Excel-fileriPython.............................257 9.5.1Innledning..............................257 9.5.2LesedatafraExcel-filerinntilPython..............257 9.5.3SkrivedatafraPythontilExcel..................259 9
9.6 Oppgavertilkapittel9...........................260 9.7Løsningertilkapittel9...........................265 10DatabehandlingmedPandas 277 10.1Innledning..................................277 10.2ByggeklosseneiPandas...........................277 10.3Manipuleringavdataframes........................281 10.4Dataanalyseavdataframes.........................284 10.5Plottingavdataidataframes.......................286 10.6Oppgavertilkapittel10..........................287 10.7Løsningertilkapittel10..........................289 11SymbolskeberegningermedSympy 295 11.1Innledning..................................295 11.2Lynkursisymbolskeberegninger.....................296 11.3Hvordanberegnetallverdieravsymbolskeuttrykk............297 11.3.1evalf.................................298 11.3.2subs.................................298 11.3.3lambdify...............................299 11.4Løsingavlikninger.............................301 11.4.1Løsingavlikningermed´enukjent.................301 11.4.2Løsingavlikningermedflereukjente...............303 11.4.3Løsingavdifferensiallikninger...................304 11.5Manipuleringeravsymbolskeuttrykk...................306 11.6Symbolskderivasjon............................307 11.7Symbolskintegrasjon............................308 11.8Matriseregning...............................309 10
PYTHON FORREALFAG
INNHOLD 11.9 Jacobimatrise(partiellderivasjonavvektorfunksjon)...........311 11.10Oppgavertilkapittel11..........................313 11.11Løsningertilkapittel11..........................314 12Objektorientertprogrammering 317 12.1Innledning..................................317 12.2Klasse,objekter,instanser,typer.....................317 12.3Hvordanlageenklasseogbrukeinstanseravklassen..........319 12.4Hvordanleggedefinisjonenavenklasseienmodul...........322 12.5Hvordanlagenyeklassermedarvfraeksisterendeklasser........324 12.6Oppgavertilkapittel12..........................327 12.7Løsningertilkapittel12..........................328 13Blandadrops(oppgavesamling) 333 13.1Oppgaver..................................333 13.2Løsninger..................................344 IIAnvendelseravPython-programmering 373 14Numeriskderivasjonogintegrasjon 375 14.1Innledning..................................375 14.2Numeriskderivasjon............................376 14.2.1Innledning..............................376 14.2.2Foroverderivasjon..........................376 14.2.3Bakoverderivasjon..........................381 14.2.4Senterderivasjon...........................382 14.2.5Valgavskrittlengde.........................384 14.3Numeriskintegrasjon............................384 11
PYTHON FORREALFAG
14.3.1 Innledning..............................384 14.3.2Foroverintegrasjon.........................385 14.3.3Bakoverintegrasjon.........................389 14.3.4Trapesintegrasjon..........................391 14.3.5Negativtareal?...........................393 14.4Oppgavertilkapittel14..........................394 14.5Løsningertilkapittel14..........................397 15Løsingavlikninger 403 15.1Innledning..................................403 15.2Likningensform...............................403 15.3Engodstart:Plott!.............................404 15.4Bruteforce-metoden............................406 15.5Newtonsmetode..............................409 15.6Oppgavertilkapittel15..........................414 15.7Løsningertilkapittel15..........................415 16Simuleringavdynamiskesystemer 421 16.1Innledning..................................421 16.2Hvaerdynamiskesystemer?........................422 16.3Framgangsm˚ateforutviklingavsimulatorer...............423 16.4Simulatorforettermisksystem......................424 16.4.1Systembeskrivelse..........................424 16.4.2Modellering.............................425 16.4.3Diskretisering(simulatoralgoritmen)...............427 16.4.4Programmering...........................431 16.4.5Simulering..............................434 12
INNHOLD 16.4.6 Testing................................435 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 17Optimering 485 17.1Innledning..................................485 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 13
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 14
INNHOLD 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 Referanser 595 Register 597 15
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.
17
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 18
Del I Grunnleggende Python-programmering
19
Kapittel 1 Innledning
1.1Hvorforlære˚aprogrammere?
Detkanværegodegrunnerfor˚alære˚aprogrammere,entenduerstudent,elev,lærer, forsker,systemutvikler,ingeniør,kunstnero.a.Nedenforgirvinoenstikkordmed anvendelserogundervisningsomperspektiv.
1.1.1Anvendelser
Herernoenanvendelsesomr˚aderavprogrammering:
• Informasjonsdeling
• Kommunikasjon
• Underholdning
• Datalagringogdatabehandling
• Spill
• Løsingavmatematiskeproblemer
• Simulering,inkl.prediksjon
• Optimering
• Matematiskmodellering
• Monitorering
• Automatiskstyring
• Signalbehandling,f.eks.støyfiltrering
21
PYTHON FORREALFAG
• Eksperimenteringmedpraktiskutstyr
• m.m.
N˚aerdeterganskeopplagtatprogrammeringerviktigforanvendelseravprogrammering. Spørsm˚aleterhelleromanvendelsene,somovenfor,ernyttigeforenkeltmenneskerog samfunnet?Hvamenerdu?
1.1.2Undervisning
Vi(forfattere)erfagfolkinnenteknologiogbrukerprogrammeringtil˚aløsefaglige problemer.Vierogs˚aundervisereogsl˚argjerneetslagforprogrammeringsomverktøyfor ˚afremmelæring.Slikviserdet,støtterprogrammeringsentraleundervisningsprinsipper, nemligmotivering,konkretisering,aktivisering,individualiseringogsamarbeid1:
• Motivering:Programmeringmotivererforteoriimatematikkogrealfagfordielever ogstudenterseratprogrammeringernyttigfor˚aanvendeogkonkretisereteori.Deter ogs˚amotiverende˚aseatprogrammeringeretsværtviktigverktøyfor˚aløsepraktiske problemstillingerinnenulikefagfelt,somdataanalyse,matematiskmodellering, simulering,automatiseringm.m.medanvendelserinnenteknologiogindustrio.a.
• Aktivisering:Gjennomprogrammeringvileleverogstudenterarbeideaktivtmed teorien,ogforst˚aelseoglæringavteorienutvikles.Programmeringgirogs˚aøkt mulighettileksperimentering.Enkanhamyenytteavferdiglagedeprogrammer,men deterv˚arerfaringatdetermerlærerikt˚aprogrammereløsningerselvenn˚abruke ferdiglagdeprogrammer,somillustrertifigur1.1.
1 = MAKIS 22
Figur 1.1:Gjennomprogrammeringvileleverogstudenterarbeide aktivt medteorien,og forst˚aelseoglæringutvikles.
• Konkretisering:Programmeringerenbromellomteorioganvendelser,sefigur1.2. Medprogrammeringkanteorioganvendelserknyttessammengjennomarbeidmed konkreteproblemstillinger.Detteutviklerforst˚aelseoglæringavteorien,ogenkan ogs˚aseihvilkengradteoriendugeripraksis.
• Individualisering:Programmeringgirgodemulighetertilindividuelltilpasningav undervisningensidenenkanarbeideellerprøvesegframiegettempo.
• Samarbeid:Programmeringgirogs˚agodemuligheterforsamarbeidvedatelever ellerstudenterdiskutererløsningerog/ellerbidrarifellesprogrammeringsoppgaver.
1.2Programmedinndataogutdata
Vibeskriverherprogrammeringogdatamedetoverordnetperspektiv.
Et(Python-)programerenabstrakt ≪ting≫.Dukanikketap˚aetprogram,ogderforkalles gjerneprogramvareforbløtvare,ellersoftwarep˚agodtnorsk.N˚ardatamaskinens mikroprosessorutførerinstruksjonenesomeruttryktiprogramkoden, kjører (engelsk:run) programmet.Detern˚ardetkjøreratdetgjørnoe,ogdetkandabetraktessomen ≪prosess≫.Dettekapitletskalutvikleenforst˚aelseavdefundamentaleaspekteneveddenne prosessen,alts˚adetkjørendeprogrammet.
EtPython-programsomkjører,produsererutdata(engelsk:output)frainndata(engelsk: input).Programmetharetarbeidsomr˚ade(pythonsk:workspace)somfungerersometslags arbeidsbordforprogrammet.Figur1.3illustrererprogrammetmedinndataogutdata. TypiskePython-funksjonersombrukesfor˚ah˚andteredataeneerangitt,f.eks. loadtxt-funksjonenfor˚alesedatafrafil.Dumøterdisseogmangeandrefunksjonerutoveri boken.
Herfølgerenbeskrivelseavfigur1.3:
• Arbeidsomr˚adet (pythonsk:workspace)inneholderallevariablenemedsineverdier. Arbeidsomr˚adetsinnholdbeholdesetteratprogrammeterstoppetogeksisterer
KAPITTEL 1.INNLEDNING
Figur 1.2:Programmeringerenbromellomteorioganvendelser.
23
fremdelesn˚ardetsammeelleretannetprogramstartes.Arbeidsomr˚adetslettes automatiskn˚ardug˚arutavprogrammeringsverktøyet(f.eks.Spyder).
• Inndata (engelsk:input)ertypisktall-ellertekstdatasomprogrammetbrukerisin databehandling.Inndateneeksistereriarbeidsomr˚adet.Inndatenekanhaflerekilder:
Variabler medverdierdefinertiselveprogrammet,f.eks.array-variablenemnd ogtempiprogrammetvistifigur4.2.Detteernokdenvanligsteinndatakilden tilprogrammer.
Tastaturet derviharskrevettekstellertall.Dataenekanlesesinntil arbeidsomr˚adetmedPythonsinput-funksjon,somernærmerebeskrevetikap. 3.6.
Fil medtekst-ellertalldata.Dataenekanlesesinnfrafilentilarbeidsomr˚adet meddengenerelleopen-funksjonen.Hvisdataeneertalldataiformav ≪tekst≫ somvikanlesemeddetblotteøye,erloadtxt-funksjoneni numpy-pakkenmerhensiktsmessigennopen-funksjonen.Brukav loadtxt-funksjonenbeskrivesikap.9.3.
Port,dvs.enkommunikasjonsportp˚adatamaskinen.Entypiskanvendelseer kontinuerliginnlesingavm˚aledatafram˚aleelementer(sensorer)somgenererer spenningsverdiersom,etteratdeeromdannettildigitaleverdier,lesesinnviaen USB-port.
• Utdata (engelsk:output)ertypisktall-ellertekstdatasomprogrammetgenererern˚ar detkjører.Utdataeneeksistereriarbeidsomr˚adet.Utdataenekanhafleremottakere:
Arbeidsomr˚adetselv.Variablersomf˚arsineverdiersomresultatav programkjøringen,ertilgjengeligeforbrukiprogramkodensomkjører.
Konsollen e.l.idetaktuelleprogrammeringsverktøyet,f.eks.konsolleniSpyder, senedetilhøyreifigur4.2.print-funksjonen,somvimøtergjennomheleboken, brukestil˚askrivetall-ellertekstverdiertilkonsollen.plot-funksjoneni
PYTHON FORREALFAG
Figur 1.3:Etprogrammedinndataogutdata.
–
–
–
–
–
–
24
numpy-pakkenkanbrukestil˚aplottedataifigurerikonsollen(ev.ieksterne figurer).
Fil.Dataiarbeidsomr˚adetkanskrivestilfilvha.dengenerelleopen-funksjonen. Hvisdataeneertalldataiformav ≪tekst≫,ersavetxt-funksjoneni numpy-pakkenmerhensiktsmessigennopen-funksjonen.Brukav savetxt-funksjonenbeskrivesikap.9.4.
Port.Entypiskanvendelseerkontinuerligskrivingavstyresignalersomv˚art Python-programharberegnet,tils˚akaltep˚adragsorganersommotorer,pumper, ventiler,varmeelementer,lamper,brytereosv.viaenUSB-port.
1.3OmPython
1.3.1Python–kortfortalt
Pythoneretprogrammeringsspr˚akutvikletavGuidovanRossum.Pythonblelanserti 1991ogutvikleskontinuerlig.Gjennomdennebokenvildulæregrunnleggende Python-programmeringog˚abrukePythontil˚afinnenumeriskeløsningerp˚amatematiske problemer.Pythonkanogs˚abrukestilmangeandreanvendelserennberegninger,bl.a. tekstprosessering,filbehandlingogdatakommunikasjon,mendennebokenfokusereralts˚ap˚a brukavPythontilberegninger.
1.3.2Hvorforsatsep˚aPython?
Detfinsmangealternativeprogrammeringsspr˚ak.Hvorforsatsep˚aPython?Noengrunner:
• Pythonergratis.
• Pythonkankjøresp˚aulikeplattformer:Windows,MacogLinux.
• Pythoneretkraftigspr˚akforberegninger(p˚aniv˚amedMATLAB).
• Pythonf˚ar(egentlig:tvinger)programmererentil˚alageprogramkodemedgodvisuell struktur.
• Pythonerpopulærtogutbredt.(Hvisbrukavetprogrammeringsspr˚akp˚aeneller annenm˚ateerp˚atvunget,kanutbredelsenværestørreennpopulariteten,mensiden Pythoneretfritttilgjengeligspr˚aksomhareksistertisnart30˚ar,kanviregnemed atpopularitetogutbredelseg˚arh˚and-i-h˚and.)
• Sværtmyemateriellerfritttilgjengeligp˚anettet.
1.3.3N˚arerPythonikkeaktuelt?
Pythonerettekstbasertprogrammeringsspr˚ak.Pythonerikkeaktuelthvisduvil programmeregrafisk.Medgrafiskprogrammeringmenerviheratfunksjonsblokker
KAPITTEL 1.INNLEDNING
–
–
25
PYTHON FORREALFAG
sammenkoplesviasignallinjerietdigitalt ≪tegneark≫,dvs.atenblokksutgangkoplestil enannenblokksinngangrentgrafisk.LabVIEWogSIMULINKereksemplerp˚agrafiske programmeringssspr˚ak.Idissespr˚akenekanduimidlertidinkluderetekstbasertkode.For eksempelkanduinkludereC-,Python-ellerMATLAB-kodeiLabVIEW.
1.3.4HvemtemmerPython?
HvemsørgerforatPythonertamogtil˚astolep˚a?DetgjørThePythonSoftware Foundation(PSF).PSFholderitr˚adenen˚ardetgjelderutviklingogutgivelseavPython. PSFharhjemmesidep˚ahttp://python.org.
Figur1.4viserPSFshjemmeside.
FraPSFshjemmeside: ≪ThePythonSoftwareFoundationisanorganizationdevotedto advancingopensourcetechnologyrelatedtothePythonprogramminglanguage.≫ P˚aPSFs hjemmesidefinsinstalleringsfilerforPython,dokumentasjon,veiledninger(tutorials), oversiktoverPython-pakkerm.m.
DukaninstallerePythonfraeninstalleringsfilp˚aPSFshjemmeside,mendeflestevelgeri stedet˚ainstallerePythongjennomens˚akaltPython-distribusjon,somerensamlingav selvePython-kompilatoren(≪Python-maskinen≫ somkjørerPythonkode)ogmangeslags verktøytilPython-programmering.DenmestpopulæredistribusjonenerAnaconda,som blirnærmerebeskrevetikap.2.2.
Figur 1.4:HjemmesidenforPythonSoftwareFoundation(PSF)p˚ahttp://python.org.
26
1.4 Skrivem˚ateriboken
Hererinformasjonomskrivem˚ateriboken:
• Desimalkommaogdesimalpunktum: P˚anorskgjelderdesimalkomma,f.eks.3,14. IPythonkodeM ˚ Avibrukedesimalpunktum,f.eks.3.14.Ibokenbrukervisom hovedregeldesimalkomma,mendesimalpunktumderdeternødvendigfor˚aunng˚a misforst˚aelser.
• Norsk/engelskiprogrameksempler: Iht.des˚akaltePEP8-reglene-regleneforgod kode-stilskalkommentarersomhovedregelskrivesp˚aengelsk.(PEPerforkortelsefor PythonEnhancementProposal.PEP8:StyleGuideforPythonCode,se https://www.python.org/dev/peps/pep-0008/.)Ja,deterklartatvim˚askrive engelskdersomviantaratprogrammeneskalkunnelesesogbrukesavfolksomikke beherskernorsk.Menhvisviersikrep˚aatkunfolksomforst˚arnorskskalleseog brukeprogrammene,menerviatnorskerok.Viharikkeværtkonsekventep˚anorsk ellerengelskiprogrameksempleneiboken.Duvilalts˚afinneatnoenavprogrammene er ≪engelske≫,mensandreer ≪norske≫.
• Norsketegn: Viharvalgt˚aunng˚asærnorsketegneib˚adeprogramkodeog kommentarerinnbaktiprogramkoden.NoenprogrammeringsmiljøerforPython,og dokumentverktøyderprogrammetskalvises,kanhaproblemermeddissetegnene.Vi harderforvalgterstattedesærnorsketegneneslik:
aafor˚a
• ≪Skrivut≫,somviskriverimangeoppgaver.Vimenerdaatduskalbruke print-funksjonentil˚aviseverdienikonsollen(ogs˚akaltkommandolinjen)i programmeringsmiljøetSpyder.VipresentererSpyderikap.2.3.
1.5Ombokensinnhold
Viharvalgt˚astrukturerebokenitodelersomillustrertifigur1.5.Strukturenuttrykkerat fundamentetfor˚ajobbemedanvendelseravPython-programmeringersolidekunnskaper omogferdigheterigrunnleggendePython-programmering.
Littmerinformasjonomdetodelene:
• DelI–GrunnleggendePython-programmering,sominneholderbl.a.:
KAPITTEL 1.INNLEDNING
–
–
–
aeforæ
oeforø
– datatyper – plotting – funksjoner 27
iterasjonerprogramkodemedfor-løkkerogwhile-løkker
betingedeprogramløpmedif-else-strukturer
skrivingoglesingavfildata
databehandlingmedPandas – symbolskeberegninger
– objektorientertprogrammering
– blandadrops-ensamlingavsammensatteoppgaver
• DelII–AnvendelseravPython-programmering.Dennedelenviserhvordanvi kanbrukePython-programmeringenfradelIiuliketyperanvendelser,nemlig:
numeriskderivasjonogintegrasjon
løsingavlikninger
simulering
optimering
modelltilpassingtildata
statistikkogsannsynlighetsregning
1.6Læremer?
NedenforernoentipsomhvordukanlæreomPython-programmering.Ogdukanselvsagt finnemangeandreressursermedetnettsøk.
1.6.1Nettsteder
• https://www.python.org/
PYTHON FORREALFAG
–
Figur 1.5:Anvendelser(delIIiboken)byggerp˚agrunnleggendekunnskaperomPythonprogrammering(delI).
–
–
–
–
–
–
–
–
–
28
• https://www.datacamp.com/
• https://www.w3schools.com/python/
• https://realpython.com/
1.6.2Nettbasertekurs
• http://coursera.com
• http://udemy.com
1.6.3Bøker
Taentittp˚areferanselistenbakiboken.
1.7Oppgavertilkapittel1
Oppgave1.1 Innkanalogutkanal
Antaatduharlagetetprogramsomlesertemperaturm˚alingersomerlagretsomtallien fil,ogplotterm˚alingeneietdiagramsomvisesp˚aPC-skjermen.Hvaerinnkanalen,oghva erutkanalen?
1.8Løsningertilkapittel1
Løsningtiloppgave1.1
Innkanalen:Datafilen.Utkanalen:Skjermensomviserdiagrammet.
KAPITTEL 1. INNLEDNING
29
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