Varför program? F1: Introduktion, Matlab (kap. 1 2)



Relevanta dokument
Motivering för programmering. F1: Introduktion, Matlabrepetition (kap. 1 2) Att kunna programmera. Interpreterat/kompilerat

F1: Introduktion, Matlabrepetition (kap. 1 2)

Motivering för programmering. F1: Introduktion, Matlabrepetition (kap. 1 2) Att kunna programmera. Interpreterat/kompilerat

Kursuppläggning. F1: Introduktion, Matlabrepetition (kap. 1 2) Motivering för programmering. Att kunna programmera

F1: Introduktion, Matlab (kap. 1 2)

F1: Introduktion, Matlab (kap. 1 2)

Kursinnehåll. Introduktion till kursen. Hederskodex. Programmering

Introduktion & MATLABrepetition. (Kap. 1 2 i MATLAB Programming for Engineers, S. Chapman)

Tentamen i Programmering grundkurs och Programmering C

Snabbslumpade uppgifter från flera moment.

Matematisk programvara. Föreläsning 7 Matlab. Användning av Matlab. Matlab

Algebra, polynom & andragradsekvationer en pampig rubrik på ett annars relativt obetydligt dokument

Laboration 1. I. Matlabs fönster, hjälp, variabler och enkla beräkningar. Introduktion

Programmering A. Johan Eliasson

Funktioner forts. F3: Funktioner (kap. 5) Parametrar. findgear.m forts

Ekvationssystem, Matriser och Eliminationsmetoden

Lathund, procent med bråk, åk 8

Individuellt Mjukvaruutvecklingsprojekt

TAIU07 Matematiska beräkningar med Matlab

Avsikt På ett lekfullt sätt färdighetsträna, utveckla elevers känsla för hur vårt talsystem är uppbyggt samt hitta mönster som uppkommer.

FRÅN A TILL Ö LäraMera Ab / och Allemansdata Ab / FRÅN A TILL Ö

Introduktion till MATLAB

Att komma igång. Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program

Du ska nu skapa ett litet program som skriver ut Hello World.

Tillämpad UNIX. Laborations-PM Christian von Schultz, Programpaket och processhantering

a n = A2 n + B4 n. { 2 = A + B 6 = 2A + 4B, S(5, 2) = S(4, 1) + 2S(4, 2) = 1 + 2(S(3, 1) + 2S(3, 2)) = 3 + 4(S(2, 1) + 2S(2, 2)) = = 15.

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

Boken om Teknik. Boken om Teknik är en grundbok i Teknik för åk 4 6.

Erfarenheter från ett pilotprojekt med barn i åldrarna 1 5 år och deras lärare

Föreläsning 8: Räkning. Duvhålsprincipen. Kombinatorik

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

Sammanfatta era aktiviteter och effekten av dem i rutorna under punkt 1 på arbetsbladet.

Exempel på tentamensuppgifter i LMA100, del 1

Beräkningsvetenskap föreläsning 2

konstanterna a och b så att ekvationssystemet x 2y = 1 2x + ay = b 2 a b

Svenska Du kan med flyt läsa texter som handlar om saker du känner till. Du använder metoder som fungerar. Du kan förstå vad du läser.

L(9/G)MA10 Kombinatorik och geometri Gruppövning 1

Vi skall skriva uppsats

Programmera en NXT Robot

Väga paket och jämföra priser

Datorövning 2 Statistik med Excel (Office 2007, svenska)

Handledning för digitala verktyg Talsyntes och rättstavningsprogram. Vital, StavaRex och SpellRight

Från min. klass INGER BJÖRNELOO

Kommunikationspolicy i korthet för Lidingö stad

SMD 134 Objektorienterad programmering

Skriva B gammalt nationellt prov

Hävarmen. Peter Kock

Träning i bevisföring

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Programexempel: tärningsspel

Manual för BPSD registret. Version 6 /

Beräkningsverktyg HT07

Menys webbaserade kurser manual för kursdeltagare. Utbildningsplattform: Fronter

Mål Blå kurs Röd kurs

Programmeringsteknik med C och Matlab

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

Föreningen Nordens lokala hemsidor

Introduktion till Matlab

( ostream ) << ( annan datatyp ) : ostream

Övningshäfte i matematik för. Kemistuderande BL 05

Statsbidrag för läxhjälp till huvudmän 2016

TDIU01 - Programmering i C++, grundkurs

729G04 - Hemuppgift, Diskret matematik

Modul 6: Integraler och tillämpningar

Något om permutationer

Manual fö r kursspecifika ansö kningsförmula r Fölkhö gsköla.nu

Föreläsning 5: Rekursion

Instruktioner för beställning och kontoadministration för abonnenter av inlästa läromedel

1. Frekvensfunktionen nedan är given. (3p)

F2 Datarepresentation talbaser, dataformat och teckenkodning

Antal grodor i varje familj Antal hopp tills alla bytt plats Ökning

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Denna talesmannapolicy gäller tillsammans med AcadeMedias kommunikationspolicy. I kommuniaktionspolicyn finns följande formulering:

Utveckla arbetsmiljö och verksamhet genom samverkan

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

PROGRAMMERING A VB6 UTVECKLINGSVERKTYGET VISUAL BASIC

Kursplan i svenska. Därför tränar vi följande färdigheter under elevens skoltid i ämnet svenska: Tala, lyssna och samtala. År 1

ATT KUNNA TILL. MA1050 Matte Grund Vuxenutbildningen Dennis Jonsson

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Kapitel 6. f(x) = sin x. Figur 6.1: Funktionen sin x. 1 Oinas-Kukkonen m.fl. Kurs 6 kapitel 1

Instruktion för laboration 1

DATASAMORDNING NYHETERNA I CHAOS Utbildning Chaos/Handledning - Nyheterna i Chaos 3/

Hur du arbetar med VFU-portfölj i Mondo. en lathund för student

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Föreläsning 1 & 2 INTRODUKTION

Objektorienterad Programmering (TDDC77)

Datorövning 2 Statistik med Excel (Office 2003, engelska)

Lokal pedagogisk planering i matematik för årskurs 8

Idag: Dataabstraktion

Guide till Wordpress text- och bildredskap

Syftet med en personlig handlingsplan

Hjälp för digital röst. Mikro Værkstedet A/S

Gemensam problemlösning. Per Berggren och Maria Lindroth

Volymer av n dimensionella klot

Tränarguide del 1. Mattelek.

Konsten att multiplicera (stora) heltal

Linjära system av differentialekvationer

VÄRDERINGSÖVNINGAR. Vad är Svenskt?

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Kängurutävlingen Matematikens hopp 2009 Cadet för gymnasiet för elever på kurs A

Transkript:

F1: Introduktion, Matlab (kap. 1 2) Varför programmera? Egenskaper hos Matlab Kommando-, redigerings-, arbetsplats-, tabell-, guide- och hjälpfönster, kommando-, funktions-, m- och loggfil Tabeller, storlek, dimension, variabel, identifierare, sökväg Uttryck, tilldelning, tysta kommandon, radindelning, litteraler Operatorer, aritmetiska, jämförande, logiska, komponentvisa Skapa tabell, indexera Datatyper Resten av kursen Varför program? Civilingenjören och teknologen behöver: göra egna kalkyler, visa kalkyler som övertygar uppdragsgivare/kund, producera program som uppdragsgivare/kund kan använda, ingår i produkter hon själv använder Varför programmera? För att man inte hittar något färdigt som gör det man vill. man får kontroll på vad programmet gör och hur. man vill träna logiskt tänkande och problemlösning. det är roligt p 1(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 2(28) Staffan Romberger, CSC, KTH, 2009-10-30 MATLAB: kan användas interaktivt, som kalkylator, innehåller många inbyggda funktioner och kan byggas ut med egna kommandofiler och funktioner och extra verktygslådor (toolbox), kan relativt lätt skapa diagram och annan grafik Teknik: Interpreterat/kompilerat Man skriver Matlabkommandon i kommandofönstret och i m-filer (kommandofiler eller funktionsfiler). Kommandona översätts till p-kod (pseudokod). P-kod är maskinoberoende. En interpretator läser p-koden och utför en p-kodsinstruktion i taget. P-koden sparas under den aktuella sessionen eller tills minnet blir fullt. Interpretering ger inte maximal effektivitet men maskinoberoende. I Matlab finns möjlighet att kompilera, dvs. att översätta till maskininstruktioner. När det är gjort kan programmet utföras maximalt effektivt. Många klassiska programspråk är kompilerade t.ex. Fortran och C. Java fungerar som Matlab, dvs. använder en sorts p-kod (byte-kod) som kan kompileras när den exekveras första gången, för att de snabbare maskininstruktionerna ska användas om programdelen exekveras igen. Perl, Applescript, Javascript m.fl. programspråk interpreteras normalt. p 3(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 4(28) Staffan Romberger, CSC, KTH, 2009-10-30

Att kunna programmera är att Behärska programspråket och programmeringsmiljön. Veta hur man hanterar vanliga delproblem. Kunna söka fel, testa, och ta hänsyn till effektivitet. Kunna skriva program och dokumentation så att de är lätta att underhålla. Känna till människans förmåga och ta hänsyn till den i designprocessen och i själva programmet. p 5(28) Staffan Romberger, CSC, KTH, 2009-10-30 Aktiviteter i programmeringskurs F Vi tittar på problem och, i stort sett, färdiga program med kommentarer. Ni får en mängd begrepp att jobba med och ska förstå programmet och kommentarerna, åtminstone översiktligt. Ö Vi startar med ett problem och följer lösningsprocessen. Ni kommer med förslag, alternativ och frågor. L Ni arbetar själva fram lösningen till ett givet problem. Ni söker hjälp i tidigare undervisningsmoment, i MATLABsystemet, Webben, läroböcker och annat undervisningsmaterial. Ni ska öva på att förstå felmeddelanden och felmekanismer, använda Matlabs felsökningshjälpmedel och andra metoder att utveckla och kontrollera program. Eget arbete Tag problem ur läroböckerna, både till denna kurs och andra kurser, eller ur egen fantasi och lös dem med datorn. Programmering är en mängdträningssport och det brukar kännas tillfredsställande när man»lätt» kan programmera datorn att göra grovjobbet med olika uppgifter. p 6(28) Staffan Romberger, CSC, KTH, 2009-10-30 Introduktion till Matlab Matlab finns för många plattformar, bl.a. Unix, Windows och Mac OS X. Det finns många viktiga fönster. Kommandofönstret är centralt. Där skriver man kommandon som utförs direkt. Matlab skriver normalt resultat i detta fönster. Mycket av det som man kan göra i andra fönster, kan man också göra med kommandon i kommandofönstret. Man kan starta kopiering (loggning) av kommandofönstret till en fil med diary filnamn. Med diary off slutar man spara. De inbyggda funktionerna och programdelar som man gör själv är normalt m-filer som innehåller Matlabkommandon och har filnamn som slutar på».m». M-filer kan redigeras med Matlabs redigeringsprogram eller med något annat redigeringsprogram, MSWord, emacs e.d. I Matlabs redigeringsfönster har man också tillgång till avlusningsfunktioner för att sätta stoppunkter, stega och inspektera variabler. I arbetsplatsfönstret kan man inspektera och i tabellfönstret kan man också ändra variabler. Hjälp Det finns mycket hjälpinformation om Matlab förutom kursen och läroböcker. Via hjälpmenyn (eller med kommandot helpbrowser) når man hjälpfönstret med massor med länkad information. Kommandot lookfor text söker efter m-filer med text i första dokumentationskommentarrad. Kommandot help filnamn skriver alla dokumentationskommentarer dvs. inledande kommentarrader i m-filen filnamn.m. Det är lämpligt att förbereda egna m-filer så att de fungerar bra för lookfor och help. p 7(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 8(28) Staffan Romberger, CSC, KTH, 2009-10-30

Variabler En tabell som man vill spara till senare under räkningarna lagrar man i en variabel. En variabel har ett namn (identifierare) och man kan se variabeln som en namngiven plats i datorns minne där man kan spara/lagra en tabell. Identifierare kan innehålla A Z, a z, siffror och _ (understreck) och måste börja med bokstav. Versaler och gemena (stora och små bokstäver) anses olika och identifierare har en maximalt tillåten längd (vanligen 19 tecken, MATLAB skiljer på 64). Normalt använder man gemena. För s.k. globala variabler använder man versaler. Det är viktigt att välja bra identifierare. De variabler som man använder i kommandofiler ingår i arbetsplatsen. Man kan se vilka det är med who, få mer information, bl.a. storlek, minnesutrymme och elementtyp, med whos och radera med clear. Det finns några fördefinierade variabler såsom ans, eps, realmax, realmin, pi, Inf, NaN, i, j. Variabeln eps påverkas inte av clear. Tabeller Matlab står ju för matrix laboratrory (matrislabb). Med matris menar man ju normalt en tabell med rader och kolumner. Vi kommer att använda termen»tabell» för Matlabs mer generella matriser. Man kan se praktiskt taget allt som Matlab kan hantera som tabeller. En tabell har en storlek (size) som är en vektor med antalet komponenter i de olika riktningarna/dimensionerna. Antalet komponenter i storleken är tabellens dimension. En matris är en tabell med dimension 2. Vektorer hanteras som matriser med endast en komponent i den ena dimensionen. En radvektor har en komponent i första dimensionen (en rad) och en kolumnvektor har en komponent i andra dimensionen (en kolumn). Skalärer (tal) hanteras som matriser med storleken [1 1]. Tabeller med dimension 3 eller större finns men används sällan. Alla element i normala tabeller har samma typ. Det finns andra sorters tabeller. p 9(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 10(28) Staffan Romberger, CSC, KTH, 2009-10-30 Sökväg m.m. Matlab har en aktuell sökväg en lista av kataloger, som söks igenom i tur och ordning. När Matlab ska tolka en identifierare prövas tolkningar i denna ordning: variabel, inbyggd funktion eller inbyggt kommando, m-fil längs aktuell sökväg. Om Matlab verkar ha hängt sig, pröva med Ctrl-C. På vissa plattformar kan man skicka kommandon till OS med!kommando, t ex!dir (Windows) Det finns särskilda fönster (guidefönster) för att skapa användargränssnitt och hantera grafiska objekt. p 11(28) Staffan Romberger, CSC, KTH, 2009-10-30 Uttryck och tilldelning När man skriver en formel/ett uttryck i kommandofönstret beräknas uttryckets värde, värdet tilldelas variabeln ans och variabeln skrivs ut. Man kan istället lagra uttryckets värde i en annan variabel med ett tilldelningskommando. Man kan undertrycka utskriften genom att skriva»;» (semikolon) efter kommandot. Man kan styra hur mycket plats utskrifterna tar med format compact/format loose. Man kan skriva mer än ett kommando på en rad med»,» (kommatecken) eller»;» mellan kommandona. Ett kommando kan fortsättas på nästa rad om man avslutar raden med»» (tre punkter). Uttryck byggs upp, ungefär som matematikens formler, av tallitteraler, variabler, parenteser, operatorer, [] (hakparenteser),, (kommatecken), ; (semikolon) (för att sätta ihop tabeller) och funktionsanrop. Litteral är beteckning för ett värde. Litteraler kallas ibland för konstanter, men i programmeringssammanhang är en konstant en variabel vars värde inte kan ändras, när den har fått sitt första värde (write once). p 12(28) Staffan Romberger, CSC, KTH, 2009-10-30

Operatorer Matlab har många operatorer: +, addition, subtraktion * multiplikation / division (högerdivision) 10/5 är 2 \ vänsterdivision 10\5 är 5/10 är 0,5 ^ exponentiering (upphöjt till) 2^3 är 8 För tabeller finns det elementvisa operationer. För att A op B ska vara tillåtet måste A och B ha samma storlek eller åtminstone den ena vara skalär: +, elementvis addition, subtraktion.* elementvis multiplikation./ elementvis division.\ elementvis vänsterdivision.^ elementvis exponentiering A = [1 2;3 4]; B = [2 4;8 16]; C = 5; A+B ans = 3 6 11 20 A./B ans = 0.5000 0.5000 0.3750 0.2500 C.\B ans = 0.4000 0.8000 1.6000 3.2000 p 13(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 14(28) Staffan Romberger, CSC, KTH, 2009-10-30 Icke elementvisa operatorer När den ena operanden är skalär fungerar dessa operatorer elementvis. C = A*B matrismultiplikation, A och B har högst dimension 2 och sista dimensionens storlek i A är lika första dimensionens storlek i B C = A/B matrisdivision, lösning av linjärt ekvationssystem F = E\D C = A*inv(B) resp. F = inv(e)*d C = A' komplexkonjugering, c ij =conj(a ji ) C = A.' transponat, c ij = a ji C = A^p A är kvadratisk, p är skalär C = A* *A (p ggr) Logiska operationer Värdet 0 betraktas som falskt (false), alla andra värden betraktas som sant (true). Resultatet sant lagras som 1. < elementvis mindre än <= elementvis mindre än eller lika med > elementvis större än >= elementvis större än eller lika med == elementvis lika med ~= elementvis skilt från & elementvis och elementvis eller ~ elementvis icke && genvägsoch genvägseller p 15(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 16(28) Staffan Romberger, CSC, KTH, 2009-10-30

Prioritet 1 ^,.^, ',.' 2 +, -, ~ (med en operand, unära) 3 *,.*, /,./, \,.\ 4 +, (binära) 5 : 6 ==, ~=, <, <=, >, >= 7 & 8 9 && 10 Ordningen kan förbigås med parenteser. Operatorer med samma prioritet utförs från vänster till höger, utom de unära som utförs från höger till vänster. v = ~17 ans = 0 a = [1]; b = 1>3 & a(2); b = 1>3 && a(2); c = 1>3 & 6==10+--7 5/2/2\10 p 17(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 18(28) Staffan Romberger, CSC, KTH, 2009-10-30 Skapa tabell I en tabellitteral räknar man, mellan»[» och»]», upp elementen med»;» eller radbyte mellan raderna och»,» eller blanktecken mellan kolumnerna. Om tabellen ska ha dimension 3 eller mer skapar man ett lager i taget. Man kan också sammanfoga befintliga tabeller: A = [1 2;3 4]; B = [5 6;7 8]; x = [9 10]; y = [11;12]; z = [13 14]; Tre sätt att skapa xnew som [9 10 0 15]: xnew = x; xnew(3) = 0; xnew(4) = 15; xnew = [x 0 15]; temp = [0 15]; xnew = [x temp]; Skapa tabell forts. Man kan lägga en ny rad eller en ny kolumn till A: Anew = [A;z]; Anew = [A;[13 14]]; Anew = [A y]; Anew = [A [11;12]]; p 19(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 20(28) Staffan Romberger, CSC, KTH, 2009-10-30

Indexering, omformning Man kan nå enstaka element eller subtabeller med indexering. Elementen lagras i följd motsvarande att tidiga index varierar fortare än senare index. Man kan skriva ut elementen i denna ordning med A(1:numel(A)) eller A(:). Man kan ange en subtabell som vänsterled i en tilldelning. A = reshape(1:9,3,3) A = [1 4 7 2 5 8 3 6 9] A(:)' ans = [1 2 3 4 5 6 7 8 9] Indexering forts. A(1:4:9) = 1; A([3 5 7]) = [1 2 3] A = [1 4 3 2 2 8 1 6 1] A([1 3],[1 3]) = 0 A = [0 4 0 2 2 8 0 6 0] p 21(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 22(28) Staffan Romberger, CSC, KTH, 2009-10-30 Skapa speciella tabeller b:s:e en radvektor med elementen b b+s b+2*s b+3*s b+n*s så att n är det största heltal som gör b+n*s<=e linspace(a,b,n) a:(b-a)/(n-1):b linspace(0,12,6) [0 2.4 4.8 7.2 9.6 12] linspace(a,b) linspace(a,b,100) ones(n), matris med storlek [n n] resp. [m n p] med ettor ones(m, n,, p) zeros(n), matris med storlek [n n] resp. [m n p] med nollor zeros(m, n,, p) eye(n), matris med storlek [n n] resp. [m n] med ettor i eye(m, n) diagonalen och nollor f.ö. Datatyper En datatyp kan vi i Matlab se som ett sätt att lagra data som bitmönster/tolka en variabels bitmönster som ett värde. I många programspråk anger programmeraren för varje variabel vilken sorts data (datatyp) den ska innehålla. I Matlab kan en variabel ha olika datatyp vid olika tillfällen. Data (värden) lagras som bitföljder i datorns minne. Det finns ju oändligt många tal. Egentligen skulle man därför reservera oändligt mycket plats för varje variabel. Istället har man olika datatyper, med olika minnesutrymme, för olika behov. int8 heltal 8 bitar 128..127 int16 heltal 16 bitar 32 768..32 767 int32 heltal 32 bitar 2 147 483 648..2 147 483 647 single flyttal 32 bitar ung. 3,4E 38..3,4E38 med 7 siffror double flyttal 64 bitar ung. 1,7E 308..1,7E308 med 15 siffror char tecken 16 bitar teckenkod (räcker till Unicode) p 23(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 24(28) Staffan Romberger, CSC, KTH, 2009-10-30

Datatyper forts. uint8 heltal utan tecken 8 bitar 0..255 uint16 heltal utan tecken 16 bitar 0..65 535 uint32 heltal utan tecken 32 bitar 0..4 294 967 295 logical inte egen datatyp Numeriska data lagras normalt som double. Man kan själv välja datatyp. d1 = 32; d2 = uint8(32); whos d1 d2 Name Size Bytes Class d1 1x1 8 double array d2 1x1 1 uint8 array Eval Formler kan lagras som text. En aritmetisk följd a, a+s, a+2*s,, a+(n 1)*s kan vi summera med (a = 1, s = 1) f = 1:99; summa = sum(f) summa = 4950 Summan är ju (a+a+(n-1)*s)*n/2 så vi lagrar formeln som text i variabeln str. str = '(2*a+(n-1)*s)*n/2'; a = 1; s = 1; n = 99; eval(str) ans = 4950 p 25(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 26(28) Staffan Romberger, CSC, KTH, 2009-10-30 Polynom Matlab lagrar polynom som en koefficientvektor med högstagradskoefficienten först. Med p(x)=x 4 +5x 3 2x 2 +7x 11 kan vi beräkna: p = [1 5-2 7-11]; polyval(p,1) p = 0 val = polyval(p,[2 3 5 7 9]) val = 51 208 1224 4056 10096 Det finns många andra funktioner för att skapa speciella tabeller. Resten av kursen Programmeringsdelen med 3 laborationer. Villkorssatser, slingor, egna funktioner, diagram och grafiskt användargränssnitt ska vi behandla. Numerikdelen sköter Beatrice. Den handlar om metoder för att lösa ingenjörens beräkningsproblem. Kursen avslutas med ett projekt som ger möjlighet att fördjupa delarna i kombination och få betygshöjning. Titta ofta på kursens webbplats. Övning 1 Ö1: 2.1, 2.6, 2.10, 2.16 (2.14) p 27(28) Staffan Romberger, CSC, KTH, 2009-10-30 p 28(28) Staffan Romberger, CSC, KTH, 2009-10-30