Magnus Eriksson Sid 1 av 9 FY021G Ingenjörsvetenskap Laborationsuppgift: MATLAB och regressionsanalys Fig 1: Regressionsanalys Förberedelse Läs avsnitt 8.2 8.3 i läroboken (Etter, et. al, Introduction to MATLAB 7 ), som handlar om regressionsanalys eller curve fitting. Se illustrationen i figur 1. För tillträde till laborationen krävs avklarad dugga. Redovisning: Laborationsuppgiften kan utföras i grupper om högst två. Skriv ned varje MATLAB-kommando, och besvara frågorna, i en handskriven laborationsrapport eller journal. Även om man arbetar i grupper om två måste båda skriva ned detta, i syfte att båda gruppdeltagarna ska komma ihåg MATLAB:s syntax. Skriv ut samtliga plottar (en kopia per grupp räcker).
Magnus Eriksson Sid 2 av 9 Spara samtliga MATLAB-funktioner och script som du skapat på ditt hemkonto (H:\ eller Mina dokument), t.ex. under filnamn av typen uppg5a.m, och var beredd att demonstrera dem för handledaren. Skriv av eller skriv ut dem. Presentera labbraporten muntligen för handledaren under labbtillfälle 2, eller i handledarens arbetsrum. Samtliga gruppdeltagare måste vara med vid redovisningen. Läs igenom de frivilliga uppgifterna, även om du väljer att inte göra dem. Du har nytta av att känna till dem på den kommande projektuppgiften, men de är frivilliga för att bespara labbtiden. Tips: Håll högt tempo och fastna inte på detaljer på de inledande uppgifterna av mer orienterande karaktär. Betygssättning: I normalfallet påverkar inte laborationsresultatet betyget. Om någon hamnade strax under VG-gränsen på duggan kan en väl genomförd laborationsrapport och visad förståelse vid svar på muntliga frågor kompensera. 1. Hjälpkommandon Logga in i MS Windows med din studentportalsidentitet. Starta MATLAB. (Välj Startmenyn-> Program-> MATLAB-> MATLAB.) a) Testa följande MATLAB-kommandon: Help, helpwin, doc, lookfor, whatsnew. Beskriv skillnaden mellan dem med några få ord. Tips: Skriv helpwin help för att å hjälp med hjälp-kommandot. b) Försök förstå hjälptext-strukturen. Skriver man bara help får man en lista över hur kommandona är grupperade. Sista i varje hjälpavsnitt finns länkar till besläktade kommandon. Om man vill ha hjälp om aritmetiska operatorer såsom elementvis division (./), eller relationsoperatorer såsom mindre än (<), var hittar man då hjälp med help respektive doc? Tag i fortsättningen för vana att läsa hjälptexten för de kommandon du använder så fort det finns frågetecken. 2. Toolboxar och blockset Ta reda på vilka MATLAB-toolboxar och SIMULINK-blockset som har installerats, med hjälp av kommandot ver och hjälptexterna. (SIMULINK är ett grafiskt programmerat dataflödesorienterat verktyg som ingår i MATLAB, som är bra för att studera tidsvarierande signaler och system, t.ex. beskrivna med s.k. differentialekvationer. Blocksets är tillbehör till SIMULINK). a) Nämn två toolboxar eller blockset som du tror att du kan få nytta av under din utbildning eller framtida arbete, eller som du tycker verkar intressanta, och beskriv dem mycket kort.
Magnus Eriksson Sid 3 av 9 b) Nämn en kommersiell toolbox eller ett blockset som Mittuniversitetet inte har köpt, men som kan vara användbar eller intressant, och beskriv den med några få ord. Se webbsidan www.mathworks.com -> Produkter. c) Nämn en gratis MATLABfil, toolbox, SIMULINK-modell eller blockset som någon användare laddat upp till www.mathworks.com ->> User Community -> File exchange, och beskriv den mycket kort. 3. Demo Skriv MATLABkommandot demo. Bläddra i fönstret help navigator/demos till vänster. Testa åtminstone en M-file demo och en M-GUI (graphical user interface, dvs interaktivt verktyg med menyer, radioknappar och textfält där användaren kan mata in egna värden). Beskriv deras syfte med några få ord. 4. Undersökning av filstrukturen a) Skapa en mapp på ditt hemkonto för kursens MATLAB-filer, och ställ dig där. Du kan t.ex. skriva följande MATLAB-kommandon i Command Window : mkdir h:\ingvet\matlab cd h:\ingvet\matlab dir (Glöm inte att alla MATLAB-kommandon ska redovisas.) Kontrollera att mappens namn står i fältet Current directory längst upp till höger. b) För att kunna köra en MATLAB-fil måste den antingen finnas i Current directory, eller i MATLAB:s sökväg för filer. Sökvägen får man reda på genom att skriva kommandot path, som i normalfallet pekar på samtliga toolboxar. Var på hårddisken ligger samtliga toolboxar lagrade? Ange den minsta gemensamma sökvägen. (Man kan lägga in sin egen mapp med verktyget pathtool, eller från kommandoprompten eller.m-filer med kommandot addpath.) c) Ta reda på sökvägen en.m-fil för valfri MATLAB-funktion med kommandot which funktionsnamn, skriv ut dess innehåll på skärmen med kommandot type funktionsnamn.m och försök redigera den med edit funktionsnamn.m. Om du får fram meddelandet Built-in function, byt till ett annat kommando. OBS! Du får naturligtvis inte spara ned en modifierad version av något MATLABkommando på hårddisken, det kan drabba andra användare av din dator, men om du vill kan du spara ned m-filen i mappen på ditt hemkonto.
Magnus Eriksson Sid 4 av 9 5. Skapa ett enkelt MATLAB-script a) Skapa ett enkelt MATLAB-script med hjälp av kommandot edit. Scriptet ska skriva ut Hello world på skärmen, vilket traditionsenligt är det första program man brukar skriva när man lär sig ett programmeringsspråk. Använd t.ex. kommandot disp (som du alltså måste söka hjälp om). Spara scriptet i din mapp. Kör det dels genom att anropa det från kommandoprompten, dels genom att klicka på Run i editorn. b) Scriptet ska även spara något i en variabel (en variabel kallas också array). Efter att du har kört scriptet, ligger variabeln då i Base workspace, dvs dyker den upp i fönstret Workspace? c) Dyker variabeln upp när du listar samtliga variabler i aktuellt workspace med genom att skriva kommandona who och whos i kommandofönstret? 5. Skapa en enkelt MATLAB-funktion a) Skapa en enkel MATLAB-funktion (dvs en.m-fil där första raden startar med ordet function). Funktionen bör ta ett eller flera inargument, beräkna någonting, och ge ett eller flera utargument. En typisk MATLAB-funktion kan ha följande struktur function [y1 y2]= myfunction (x) % This is a function with one input parameter % and two output parameters y1 = ; y2 = ; eller function y = myfunction (x1, x2) % This is a function with two input parameters % and one output parameter y = ; Den sparas i filen myfunction.m. b) Spara funktionsfilen i en.m-fil med samma namn som funktionen (myfunction.m i ovanstående fall), och anropa den från kommandoprompten genom att sätta in funktionen i ett funktionsuttryck, och tilldela resultatet till en variabel i base workspace. Se till så att det går att anropa din funktion både med en vektor och en skalär som inargument. Om du bara ska använda det första utargumentet kan du t.ex. skriva u= myfunction (x1, x2) eller myfunction( )+myfunction( )
Magnus Eriksson Sid 5 av 9 Om du ska använda båda utargumenten skriver du [u v]= myfunction( ) c) Lägg in kommandot who eller whos inne i funktionen, i slutet av funktionen. Vilka variabler finns i funktionens workspace? d) Skriv clear i kommandofönstret för att radera samtliga variabler. Anropa din funktion från kommandoprompten och tilldela resultatet till resultatvariabler (som du gjorde i b). Vilka variabler finns i base workspace, dvs synliga från kommandoprompten? Är funktionens variabler synliga där? (Använd who och whos från kommandoprompten.) e) Lägg till en beskrivande kommentartext efter %-tecknet i funktionens andra rad, under funktionsdeklarationen, men innan resten av funktion. Lägg även in en kommentartext senare i funktionen, t.ex. efter första beräkningsraden. Skriv help function_name. Vilken del av kommentartexten kommer fram som hjälptext? 6. Felanalys a) Skapa en matris Y med två kolumner och valfritt antal rader. Hitta på lämpliga siffror, så att värdena i vänster kolumn succesivt ökar. Vänster kolumn anger mätvärden som vi antas har erhållit. Höger kolumn anger tolerans, dvs högsta möjliga mätfel. Alltså är värde nummer k inom intervallet Y(k,1) +/- Y(k,2), dvs mellan Y(k,1) Y(k,2) och Y(k,1) + Y(k,2). Skriv nu en funktion som summerar mätvärdena och sparar resultatet i en radvektor, som vi kan kalla Z, bestående av två element, där summan är inom intervallet Z(1) och Z(2). Testa att funktionens resultat stämmer med förväntat resultat, t.ex. genom huvudräkning. Använd inte for- eller while-loopar, utan försök utnyttja MATLAB:s vektor- och matrisoperationer, t.ex.med hjälp av kolon-indexering. Tips: Du kan använda funktionen sum. b) Gör nu en funktion som beräknar produkten av värdena i Y, med tolerans. Produkten av värdena ska ligga i intervallet Z(1) till Z(2). Tips: Du kan använda funktionen prod. c) Plotta de nominella mätvärdena i Y:s vänstra kolumn som funktion av mätvärdesnumret k (1 till och med län antal rader i Y). Lägg in både en ring vid varje värde, och ett streck mellan värdena, med kommandot plot(k,y, o- ), där K är en heltalsvektor. Lägg in titel, samt namn på X-axeln och Y-axeln. (Använd kommandona plot, title, xlabel, ylabel och gärna legend.) d) Plotta även felintervallet. Ett sätt är att rita en kurva för nominella värdet, en för maxvärdet och en för minvärdet, och förklara kurvorna med hjälp av
Magnus Eriksson Sid 6 av 9 funktion legend. Ett snyggare sätt är att använda funktionen errorbar, som ger följande typ av diagram: Fig 2: Errorbar d) Frivillig uppgift: (Ni har förmodligen inte hunnit gå igenom detta på föreläsningarna ännu). Anta nu att den högra kolumnen anger uppskattad standardavvikelse. Gör om uppgift a) så att resultatet Z består av två element, och Z(2) nu anger summans standardavvikelse. 7. Regressionsanalys av exponentiellt växande eller avtagande funktion Många tidvarierande värden antas växa eller avta approximative exponentiellt med tiden, t.ex. befolkning, ekonomi och datorernas komplexitet. Enligt Moore s lag lär datorernas hastighet (t.ex. klockfrekvens) och komplexitet (t.ex. antal transistorer per chip, arbetsminnes eller hårddiskens storlek) fördubblas var 18:e månad. a) Välj en mätserie som kan antas växa eller avta exponentiellt. Du kan söka själv på nätet efter data, eller utgå från något av exemplen i Bilagan av detta kompendium. Skapa en vektor av mätvärdena, och en annan av tidpunkterna. Plotta värdena, dels med funktionen plot, dels med semilogy. Lägg in titel och axelbeskrivning med kommandona title, xlabel och ylabel. b) Eftersom tidsserien kan antas förändras exponentiellt, bör du beräkna logaritmen av värdena, och spara dem i en vektor som vi kan kalla L. Plotta L. L borde nu approximativt vara en linjär funktion av tiden. I fortsättningen kommer vi därför att utgå från kapitel 8.2 8.3 steg för steg. c) Gissa en lutning och ett värde vid tiden 0. Beskriv gissningen med ett förstagradspolynom. Rita gissningen i samma diagram som L. d) Beräkna summan av det kvadratiska felet. Se läroboken. e) Använd funktionen polyfit, för att identifiera det förstagradspolynom som minierar det kvadratiska felet, dvs så kallad linjär regression. Rita den nya förstagradsfunktionen i samma diagram. Beräkna dess kvadratiska fel, och kontrollera att det har minskat jämfört med din gissning. f) Använd polyfit för att identifiera ett lämpligt högregradspolynom, t.ex. andra eller tredje ordningen. Rita den nya högregradskurvan i samma diagram.namnge kurvorna med legend. Beräkna dess kvadratiska fel, och kontrollera att det har minskat.
Magnus Eriksson Sid 7 av 9 g) För att omvandla dessa polynom till exponentiella funktioner, beräkna nu exponenten av förstagrads- och högregradspolynomet. (Förutsatt att du använde naturliga logaritmen i uppgift b. Använd 10-potens om du använde 10-loggen) Plotta den ursprungliga kurvan tillsammans med motsvarande logaritmerade polynom. Skriv ned ett matematiskt uttryck för de logatimerade polynomen. j) Frivillig uppgift: Vad är halverings/dubbleringstakten, dvs vilket tidsintervall krävs för att funktionen ska halveras eller dubbleras enligt den linjära regressionen av L? h) Frivillig uppgift: Rita nu återigen endast den ursprungliga kurvan. I graffönstret, gå in på Tools -> Basic fitting. Ev. kan man även applicera detta verktyg på den logaritmerade funktionen. Vad kan denna funktion användas till? Vilka slutsatser drar du om vilken metod som ger bäst kurvanpassning? i) Frivillig uppgift: Använd funktionen polytool för att analysera de ursprungliga mätvärdena. (I läroboken kallas den felaktigt för gftool). Ev. kan man även applicera detta verktyg på den logaritmerade funktionen. Vad kan denna funktion användas till? Vilka slutsatser drar du om vilken metod som ger bäst kurvanpassning?
Magnus Eriksson Sid 8 av 9 Notes: APPENDIX: Mätserier som approximativt är exponentiellt växande eller avtagande Exempel 1 : Dina egna datorer Gör en tabell som visar ett prestandamått för de datorer ni har ägt eller använt under årens lopp, t.ex. gällande hårddiskstorlek, mängd arbetsminne eller klockfrekvens. Tabellen bör också visa vilket år de var ny köpta. Ni bör ha 5-10 olika datorer med i tabellen. Exempel 2: Internetaccess till hemmen Gör en tabell som visar hur snabba modem som har funnits på marknaden telefonnät, ISDN, ADSL, etc), eller hur snabb bredbandsaccess du har haft tillgång till i hemmet under årens lopp. Tabellen bör innehålla 5-10 olika tekniker eller abonnemangsformer. Exempel 3 : Dynamiska RAM-minnen Antal bit/kibibit /Mibibit per chip 4K 1977 16K 1981 64K 1984 256K 1988 1M 1992 4M 1995 16M 1998 64M 2001 128M 2003 256M 2005 Årtal för max användande Exempel 4 : Avtagande vinylförsäljning While CD sales increased greatly in the late 1980 s and early 1990 s, record sales decreased greatly. The following table gives the number of single record sales in millions. Year 1985 1987 1988 1989 1990 1991 1992 1993 1994 Single record sales (in millions) 120.7 82.0 65.6 36.6 27.6 22.0 19.8 15.1 11.7 Exempel 5: Befolkningsutveckling Leta rätt på befolkningsstatistik på nätet. Du kan t.ex. utgå från vektorn p nedan, som beskriver USA:s befolkning vid årtal enligt vektorn t: t = 1900:10:1990; p = [75.995 91.972 105.711 123.203 131.669... 150.697 179.323 203.212 226.505 249.633];
Magnus Eriksson Sid 9 av 9 Exempel 6: Mobiltelefoners datatakt Ev. får ni kolla upp nedanstående siffror lite, t.ex. på wikipedia.org. År 1981 kom NMT-systemet (första generationens mobiler), som kunde fungera som 1200 bit/s-modem. År 1992 kom GSM-systemet, som kunde fungera som 9600 bit/s-modem. Cirka år 2000 kom vidareutveckling GPRS; som möjliggjorde cirka 9600 bit/s. Edge (EGPRS) Möjliggör cirka 200 kbit/s, och kom runt år 2003. 3G-systemet WCDMA kom runt år 2004, och möjliggjorde också 200 kbit/s på landsbygden, och 2Mbit/s inomhus. Vidareutvecklingen HSDPA/HSUPA kommer kring år 2008, och möjligör i storleksordningen 8 Mbit/s.