====== Python ====== Noen av [[probsets|ø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 [[https://en.wikipedia.org/wiki/Python_%28programming_language%29|Python]] som programmeringsspråk. Videre vil vi bruke [[http://numpy.org/|NumPy]] for å håndtere vektorer og matriser, og muligens [[http://www.scipy.org/|SciPy]] for noe mer avansert funksjonalitet. Plotting kan gjøres med [[http://matplotlib.sourceforge.net/|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å {{ :tma4135:2017h:example.py |en liten kodesnutt}} som beregner sentrert Riemann-approksimasjon for integralet til en funksjon, og også plotter rektanglene involvert. For å teste ut funksjonen, lagrer du [[http://www.math.ntnu.no/emner/TMA4135/2013h/python-eksempel/example.py|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 [[http://python.org|Pythons]] og [[http://numpy.org|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: * [[http://www.math.ntnu.no/emner/TMA4135/2013h/python-forelesning/difflign.py|difflign.py]] * [[http://www.math.ntnu.no/emner/TMA4135/2013h/python-forelesning/fikspunkt.py|fikspunkt.py]] * [[http://www.math.ntnu.no/emner/TMA4135/2013h/python-forelesning/gauss_seidel.py|gauss_seidel.py]] * [[http://www.math.ntnu.no/emner/TMA4135/2013h/python-forelesning/integrasjon.py|integrasjon.py]] * [[http://www.math.ntnu.no/emner/TMA4135/2013h/python-forelesning/newton.py|newton.py]] Python brukes i mange kurs ved NTNU, og flere eksempel finnes blant annet i [[http://lrhgit.github.io/tkt4140/allfiles/digital_compendium/main.html|Numerical Methods for Engineers - A digital compendium]].