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