Python for realfag, 3. utgave (9788245046052)

Page 1

Copyright © 2023 by

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

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