Om Python og programmeringsoppgavene

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.

Står du fast, finner du noen hjelperesurser her.

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.

GNU/Linux og BSDer

Alle de store distribusjonene inkluderer all programvaren vi trenger i pakkesystemene sine. Noen leverer pakker både for Python 2 og Python 3, så husk å velge Python 2-pakkene dersom du ønsker å bruke matplotlib. Her er pakkenavnene for 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

OS X

Jeg har fått høre at OSX 10.6 og nyere kommer med både en tilstrekkelig ny Python og NumPy, så disse kan nok benyttes slik de er.

Windows

Hjelp

Dette er på ingen måte en liste over resurser som bør leses. Lenkene er kun ment som kilder til hjelp dersom du står fast.

2012-08-27, spreeman