Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen
Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen i 10 trin Nye koncepter Variable Logiske betingelser Løkker Strukturer Funktioner
Undervisningen Tirsdagsforelæsningerne Screencasts Computerfysik.dk Multiple Choice Afleveringer Diskussionsforum
Hvad er programmering? En computers aksiomer Instruktioner en computer kan forstå. Computerens CPU forstår kun aksiomer. Programmeringsprog som MATLAB er ligesom kalkulus, en abstraktion der gør det mere bekvemt at udføre beregninger. set gem en værdi i et register i CPUen move flyt værdi fra hukommelse til register read, write læs og skriv data fra en fysisk enhed (harddisk, grafikkort, lydkort o.lign.) add, subtract, multiply, divide Med værdier fra to registre, udfør beregning og gem i et tredje register compare Sammenlign værdien i to registre branch Gå til en anden lokation i programmet og udfør instruktionerne fra dette sted
Et program Skrevet i ren tekst (MS Word dur ikke!) Kommandoer afvikles oppefra og ned, og fra venstre mod højre Løkker, betingelser og funktioner gør at dele af et program godt kan afvikles flere gange...
Programmering og fysik Teoretisk analytisk arbejde (typisk i Mathematica), test af parameter-rum, plotting, matematisk modellering. Eksperimentstyring (kontrol af måleudstyr, lasere, teleskoper, acceleratorer) Dataopsamling, distribution og lagring Simulering af teoretiske modeller (alle grene af fysik) Dataanalyse, sammenligning mellem teori, simulering og observationer Visualisering
Nobelprisen i 10 trin (Få en god ide!) Opstil en teori om et fænomen i naturen... Resultatet publiceres! (og vent 10 år på Nobelpris...) Problemet (kan måske) formuleres analytisk justering af teori... Visualisering, konklusion, artikel, falsificering af teori... Problemet oversættes til en numerisk løsbar definition Resultatet sammenlignes med eksperiment ved statistisk analyse Problemet skrives i et programmeringssprog som f.eks. MATLAB Et program læser det binære resultat og oversætter det til decimal tal Programmet fortolkes/oversættes af MATLAB/kompiler til maskinsprog Maskinkoden afvikles, resultatet gemmes i binær form
Nobelprisen i 10 trin (Få en god ide!) Opstil en teori om et fænomen i naturen Resultatet publiceres! (og vent 10 år på Nobelpris...) Problemet (kan måske) formuleres analytisk Visualisering, konklusion, artikel, falsificering af teori... Problemet oversættes til en numerisk løsbar definition Resultatet sammenlignes med eksperiment ved statistisk analyse Problemet skrives i et programmeringssprog som f.eks. MATLAB Et program læser det binære resultat og oversætter det til decimal tal Programmet fortolkes/oversættes af MATLAB/kompiler til maskinsprog Maskinkoden afvikles, resultatet gemmes i binær form
Nye koncepter Programmering introducerer specielle operationer som ikke direkte kan sammenlignes med matematik: Variable (lagring af information) Afgreninger (betingelser) Løkker Datastrukturer
Variable Variable er navngivne størrelser, man kan benytte i et program til at gemme information som kan benyttes og manipuleres under afviklingen Indeholder information af forskellige slags Heltal Komma tal Tekst Komplekse tal Vektorer, Matricer Strukturer Anonyme funktioner heltal = 1000 kommatal = 3.1415 stort_kommatal = 6.0221415e23 tekst = 'GATTCA' logisk = false kompleks = 10 + 4i et_nyt_tal = stort_kommatal * kommatal http://computerfysik.dk/programmering/variable/
Betingelser, forgreninger Betingelser tester et logisk udsagn: hvis værdien af x er mindre end y så gør... hvis udsagnet er sandt vil en blok kode blive afviklet, ellers ikke. Forgreninger (branching), flow-control http://computerfysik.dk/programmering/logik-og-betingelser-if-saetninger/
Betingelser a > b sandt hvis a er større end b a < b sandt hvis a er mindre end b f(x) = a >= b sandt hvis a er større eller lig med b a <= b sandt hvis a er mindre end eller lig med b a ~= b sandt hvis a ikke er lig med b a == b sandt hvis a er lig med b a && b sandt hvis a er sand og b er sand a b sandt hvis a er sand eller b er sand z x hvis x>0 z + x ellers if x > 0 f = z - x else f = z + x end
Betingelser Flere alternative betingelser Eksempel: if <logisk udsagn> kommando1 elseif <andet logisk udsagn> kommando2 else kommando3 end a = 10 b = -5 if a > 0 && b >= 0 c = 0 elseif b < -10 c = 1 elseif a > 0 b ~= -5 c = -1 else c = a end Hvad bliver c sat til?
Løkker (Loops) En løkke er en kommando som gentager en blok kode et antal gange. En løkke kan udføres et forudbestemt antal gange, eller indtil en logisk betingelse ikke længere er udført while <logisk udsagn> kommandoer end for i=1:100 kommandoer (udføres 100 gange) end http://computerfysik.dk/programmering/lokker-for-while--loops/
Løkker Eksempel: Matematiske summer og produkter: a = 10 X i=1 i 2 = 385 b = 4Y i=1 1 i =1 1 2 1 3... = 1 24 =0.417 a = 0 for i=1:10 a = a + i.^2 end b = 1 for i=1:4 b = b.* 1./i end
Løkker Eksempel: Legeme påvirket af tyngdeacceleration over 10 sekunder Koden i mellem while og end afvikles indtil t = 10 Eksempel på numerisk løsning af en differentialligning Vi har næsten en simulering her, der mangler kun begyndelsesbetingelser t = 0 % tid (s) dt = 0.1 % tidsskridt (s) a = [0, -9.8] % tyngde while t < 10 % afslut kl 10s t = t + dt % opdater t end % Newtons 2. lov v = v + dt.* a r = r + dt.* v
Datastrukturer Har man et objekt som skal beskrives af mere end ét tal eller én vektor, kan man lave en struktur som indeholder flere variable kat = struct(); % Ny datastruktur kat.ben = 4; % (N) kat.hale = 0.94; % (m) kat.masse = 4.5; % (kg) kat.farve = 'tabby'; kat.r = [12, 4, 4]; % (m) position kat.v = [0, 0, -2]; % (m/s) hastighed http://computerfysik.dk/programmering/datastrukturer/
Datastrukturer Strukturer kan bruges ligesom variable, man skal blot huske at sætte navnet på strukturen før navnet på den indeholdte variabel: kat.v = kat.v + dt.* g kat.r = kat.r + dt.* kat.v if kat.r(3) <= 0 && kat.v > 10 kat.lever = false else kat.lever = true end
Funktioner Funktioner minder om funktioner i matematikken, men de kan også bruges til andet end udregninger (f.eks. plotting) Der findes to slags Normale funktioner Anonyme funktioner http://computerfysik.dk/programmering/funktioner/
Funktioner Funktioner laves som særskilte filer (f.eks. idealgas.m gemmes i samme mappe som hovedprogrammet fysik_aflevering.m : idealgas.m fysik_aflevering.m function p = idealgas(n, T, rho) k = 1.38e-23; % Boltzmanns k... p = (N * k * T) / rho; end N = 10; rho = 0.055; T = 298; tryk = idealgas(n, T, rho)
Funktioner Anonyme funktioner er små funktioner som kan stå på en enkelt linje. De kan indlejres i programmer, og kræver ikke ekstra.m filer k = 1.38e-23; % Boltzmanns k... p = @(N,T,rho) (N * k * T) / rho; N = 10; rho = 0.055; T = 298; tryk = p(n, T, rho)
Næste uge Fysik simulering! Løsning af differentialligninger med Euler metoden Randbetingelser
Husk Aflevering Den første af 4 afleveringer i programmering er aktiveret i Absalon, få den afleveret i denne uge Tester basal viden om MATLAB, skulle kunne løses ved at læse opgaverne og copypaste lidt :)