Mittuniversitetet                                                                  Reviderad: 2007-09-25

Magnus Eriksson

 

 

Ingenjörsvetenskap
Laborationsuppgift:

MATLAB och regressionsanalys

 

Laborationsuppgiften kan utföras i grupper om högst två.

 

Labbtillfälle 2 är enbart tänkt som reservtillfälle för dem som missat tillfälle 1, men kan användas för muntlig redovisning.

 

Förberedelse

Läs avsnitt 8.2 – 8.3 i läroboken (Etter, et. al, “Introduction to MATLAB 7”).

 

För tillträde till laborationen krävs avklarad dugga.

 

 

Redovisning:

Skriv ned varje MATLAB-kommando, och besvara frågorna, förslagsvis i en handskriven 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).

 

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.

 

Redovisa muntligen för handledaren I slutet av labbtillfället, eller i början av vid labbtillfälle 2 (som egentligen är tänkt som reservtillfälle för dem som missade tillfälle 1).

 

Håll högt tempo, i synnerhet på de inledande mer 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å det diagnostiska provet kan en väl genomförd laborationsrapport och visad förståelse av MATLAB-programmering och lärobokstexten 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 hjälp med hjälp-kommandot.

 

b) Försök förstå hjälptext-strukturen. Om man vill ha hjälp om t.ex. elementvis division (./) eller mindre än (<), var hittar man hjälp med ”help” respective ”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 en 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 med ett par ord.

 

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  

 

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 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

                     

(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 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 MATLABfunktion med kommandot which kommando, skriv ut dess innehåll på skärmen med kommandot type kommando och försök redigera den med edit kommando. 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 MATLAB-kommando 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.

 

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 i ett programmeringsspråk. Använd t.ex. kommandot disp. 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 (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 kommandona who och whos?

 

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 startar med

 

  function [y1 y2]= myfunction (x1, x2)

  % This is a function with two input parameters

  % and two output parameters

 

  y1 = … ;

  y2 = … ;

 

b) Spara funktionsfilen, 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 argument.

 

Om du bara ska använda det första utargumentet skriver du

 

u= myfunction (x1, x2)

 

eller myfunction(…)+myfunction(…)

 

Om du ska använda båda utargumenten skriver du

[u v]= myfunction(…)

 

c) Lägg in kommandot who eller whos inne i 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 tilll 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 vektor summa så att summan är inom intervallet summa(1) +/- summa(2). Testa att funktionens resultat stämmer med förväntat resultat, t.ex. genom huvudräkning.

 

Tips: Du kan använda funktionen sum.

 

b) Gör nu en funktion som beräknar produkten av värdena i Y, med tolerans. Produkt(1) är det nominella värdet, mitt emellan max- och minvärdena, så att resultatet hamnar mellan Produkt(1) – Produkt(2) och Produkt(1) + Produkt(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 intervallet. 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 funktion legend. Ett annat sätt är att använda funktionen 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 Y(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.

 

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 du vara approximative 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) L borde nu vara linjär. 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.

 

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 förstagradsfunktionen i samma diagram. Beräkna dess kvadratiska fel, och kontrollera att det har minskat.

 

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) 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) Rita nu återigen endast den ursprungliga kurvan. I graf-fö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) Använd funktionen polytool för att analysera den ursprungliga kurvan. (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?

 

 

APPENDIX: Mätserier som approximativt är 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

Årtal för max användande

4K

1977

16K

1981

64K

1984

256K

1988

1M

1992

4M

1995

16M

1998

64M

2001

128M

2003

256M

2005

Notes:

 

Exempel 4 : Avtagande CD-fö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];

 

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.