Python

Noen av øvingene vil inneholde små programmeringsoppgaver, der elementer av pensum skal implementeres av studentene. For å holde fokus på matematikken er det ønskelig at det programmeringstekniske holdes til et minimum, og av den grunn har vi valgt Python som programmeringsspråk. Videre vil vi bruke NumPy for å håndtere vektorer og matriser, og muligens SciPy for noe mer avansert funksjonalitet. Plotting kan gjøres med matplotlib, men dette er bare for kosmetikk å regne, så en står fritt til å plotte på annet vis dersom en ønsker.

Hva må jeg kunne?

Det er ikke forventet at studentene skal ha erfaring med Python. Det programmeringstekniske som inngår i øvingene vil holdes minimalt, og vil stort sett være begrenset til fundamentale ting som:

  • conditionals (if/else)
  • løkker (while, for)
  • de fire regnearter
  • tilordning av variabler
  • funksjoner og funksjonskall
  • arrays

Python er valgt da språket i manges øyne er en slags største fellesnevner (på godt og vondt) for syntaks for slike grunnleggende elementer. Med andre ord: kan du punktene over i ett språk, tar det deg ikke mange minuttene å mestre dem i Python. Dette er gunstig i et fag der fokuset skal være på matematikken, ikke programmeringen.

NumPy vil hjelpe oss med å håndtere ting som arrays og matriser uten å måtte tenke på tekniske detaljer. SciPy vil bistå med mer avanserte operasjoner, om det blir nødvendig.

Et kort eksempel

Som en oppvarming kan en ta en titt på en liten kodesnutt som beregner sentrert Riemann-approksimasjon for integralet til en funksjon, og også plotter rektanglene involvert.

For å teste ut funksjonen, lagrer du filen i en katalog og kjører Python med denne som arbeidskatalog. Filen kan så importeres med

>>> import example

Vi trenger en funksjon å integrere med vår Riemann-integrator. Hva med sinus, og kanskje eksponensialfunksjonen? For å få disse tilgjengelig, må vi importere dem fra math-modulen til Python (vi tar like godt med π):

>>> from math import sin, exp, pi

Vi integrerer sinus fra 0 til π med 100 rektangler:

>>> example.riemann(sin, 0, pi, 100)
2.00008224907

Circa 2. Bra. Fra 0 til 2π:

>>> example.riemann(sin, 0, 2*pi, 100)
-1.71737624122e-16

Ganske nært 0. Bra!

Hvis alt fungerer som det skal, skal du også ha sett de involverte rektanglene da du kjørte koden over.

Hva hvis vi ønsker å integrere en egendefinert funksjon \( f \) definert ved for eksempel \( f(x)=x^2 \)? Først definerer vi funksjonen:

>>> def f(x):
...     return x**2

Så kan vi integrere:

>>> example.riemann(f, 0, 1, 100)
0.333325

Upythonsk kode i LF

Python åpner for en del elegante løsninger, men løsningsforslag og eventuelle eksempler vil ofte styre unna slike til fordel for kode som ser ut som den kunne vært skrevet i et hvilket som helst programmeringsspråk. Vi vil rett og slett være upythonsk med vilje. Studentene står selvsagt fritt til å kode så fancy eller enkelt de selv vil. Igjen: Øvingene handler om matematikk, ikke programmering.

Skaffe programvaren

Python, NumPy, SciPy og matplotlib er fri programvare og gratis tilgjengelig for alle store operativsystemer. To store versjoner av Python er for øyeblikket i bruk: versjon 2 og versjon 3. Begge kan benyttes for beregningene, men plottebiblioteket matplotlib støtter fremdeles kun Python 2. Hvis en ønsker kan en selvsagt gjøre plottingen på annet vis, men ellers anbefales det å bruke Python 2.x, med x≥6.

IMEs anbefalinger

IME foreslår følgende tre alternative muligheter for å installere den nødvendige programvaren. Det er selvsagt mulig å laste ned programvaren direkte fra Pythons og NumPys nettsider, for de som ønsker det.

(1) Full installasjon på Windows, Mac og Linux

Anaconda pakker Python med numpy/scipy/matplotlib: http://continuum.io/downloads

Last ned riktig versjon av Anaconda fra siden over. Exe-filen/pakken installerer automatisk Python med alle nødvendige pakker. Python kan kjøres fra kommandolinje/terminal eller fra Anaconda Launcher.

(2) Windows portabel installasjon via WinPython

Dette er en enkel installasjon på egen maskin eller på en (rask) minnepinne for bruk på datasal. Filendelser registreres ikke og man må kjøre Python fra katalogen man installerte til. Man trenger ikke admin-rettigheter for å installere WinPython.

Last ned 32-bit WinPython for Windows på http://code.google.com/p/winpython/downloads/list Kjør exe-filen og installer. Pass på å installere til riktig katalog. Installasjon på minnepinne tar laaang tid. Gå til installasjonskatalogen i Windows Explorer og dobbeltklikk på "WinPython Interpreter"

(3) Ny terminaltjenerpark ved NTNU

Veiledning for oppsett finnes her: https://innsida.ntnu.no/wiki/-/wiki/Norsk/Programfarm+med+Windows#section-Programfarm+med+Windows-Programfarm+via+tilkobling+til+eksternt+skrivebord

https://innsida.ntnu.no/wiki/-/wiki/Norsk/Programfarm+med+Mac

Koble til calcfarm.ntnu.no via RDP-klient og skriv python på startsiden. Kjør "Python (command line)"

Her finnes Python 1.7.3, numpy 1.7.0, matplotlib 1.1.1 og scipy 0.11.0rc2 matplotlib.test() finner ikke "node" modulen, så alt som scipy bruker er ikke installert.

På Windows er det her null installasjon, på Mac/Linux må man gjerne installere en RDP-klient først. Siden terminaltjenerne er delte ressurser kan de gjerne være tungt belastet til tider.

Direkte installasjon fra pakkesystemer i GNU/Linux og BSDer

Dersom du kjører GNU/Linux eller en BSD, finnes all nødvendig programvare sannsynligvis i ditt pakkesystem. Noen distribusjoner leverer pakkene i utgaver både for Python 2 og Python 3. Jeg anbefaler at en da velger Python 2-pakkene.

Her er noen aktuelle pakkenavn fra noen populære Linux-distribusjoner:

  • Arch: python2, python2-numpy, python2-scipy, python2-matplotlib
  • Debian/Ubuntu: python, python-numpy, python-scipy, python-matplotlib
  • Fedora: python, numpy, scipy, python-matplotlib

Diverse Python-filer brukt i forelesningene tidligere semester

Tidligere år ble det demonstrert kode i forelesningene. Den finner dere her:

Python brukes i mange kurs ved NTNU, og flere eksempel finnes blant annet i Numerical Methods for Engineers - A digital compendium.

2018-10-05, Hallvard Norheim Bø