Laboration 1 - Komma igång med Matlab

Registrering

På kurshemsidan finns anvisningar hur du ska göra för att registrera dig i vårt resultat-system, följ dem. I detta system registreras dina resultat såsom godkända labbar, projektuppgift och tenta.

Öppna terminalfönster och starta Matlab

För de som använder Java Desktop System
Öppna ett terminalfönster genom att ställa muspekaren på en tom skrivbordsyta, klicka med musens högerknapp för att öppna rullgardinsmenyn. Välj med vänster musknapp Open Terminal. Terminalfönstret är nu redo att ta emot kommando och för att öppna Matlab skriver man matlab &.

För de som använder CDE (Common Desktop Enviroment)
Öppna ett terminalfönster genom att ställa muspekaren på en tom skrivbordsyta, klicka med musens högerknapp för att öppna Workspace Menu. Välj med vänster musknapp Tools och därefter terminal. Terminalfönstret är nu redo att ta emot kommando och för att öppna Matlab skriver man matlab &.

För den som vill läsa mer om Unix finns en version att läsa på nätet Unixhäftet eller att köpa på studentexpeditionen.

Uppgift 1: Bollen

En boll släpps från höjden h_0 ovan jordytan med den vertikala hastigheten v_0. Funktionerna h(t) och v(t) nedan beskriver bollens höjd över jordytan respektive hastighet i det vertikala ledet.
h(t) = 0.5gt^2 + v_0t + h_0
v(t) = gt + v_0 
Anta att h_0 = 100 m, v_0 = 30 m/s och g = -9.81 m/s^2.

Beräkna och plotta bollens höjd och hastighet för 0 <= t <= 10.
Gör minst två plottar; en där båda kurvorna plottas i samma diagram och den andra där plotten görs i 2 separata diagram (använd gärna 2 figurfönster).

Uppgift 2: Valuta

I filen valuta.m har jag skrivit ett program som omvandlar svenska kronor till euro och vice versa. Tyvärr fungerar programmet dåligt och koden är under all kritik. Korrigera befintlig kod så att programmet blir lättläst, fungerar korrekt och då det körs är användarvänligt.

Tips: Korrigera och provkör koden i små steg så att ni är säkra på att ni har gjort rätt!
Använd Matlabs help-funktion (välj ? i menyraden) för att ta reda på hur olika funktioner fungerar.

Uppgift 3: Multiplikationstabell

Skriv program som skriver ut en godtycklig multiplikationstabell.
Nedan visas en programkörning där användaren väljer en tabell av storleken 5.
Ange storleken på multiplikationstabellen: 5

     1     2     3     4     5
     2     4     6     8    10
     3     6     9    12    15
     4     8    12    16    20
     5    10    15    20    25
Lös problemet på minst 2 sätt!

Komma igång-delen har gjorts av

namn ..................................................................persnr.............................som godkänts av .............................................................. den .................

Abstraktion

I filen abstraktion.m finns ett programskelett för att skapa och plotta olika grafiska objekt som t.ex. punkt, linje och rektangel.

I varje objekt finns information om objektets typ och form enligt tabellen

 Grafiskt objekt  typ form                   
 punkt 1   x- och y-koordinater
 linje 2  start- och slutpunkt
 rektangel  3  nedre vänstra hörnet och övre högra hörnet 

De grafiska objekten är representerade på likadant vis dvs med typ och form oavsett om det är en punkt, linje eller rektangel!
De grundläggande funktionerna makeGraph, getName och getShape definierar hur de grafiska objekten kommer att se ut i Matlab.

Uppgift 1: Skapa och rita punkter

För att skapa en punkt med koordinaterna (10,20) anropas konstruktorn makePoint med makePoint(10,20) vilket ger vektorn (1 10 20) som läggs i variabeln myPoint. Kör programmet abstraktion.m och kontrollera detta! Gå igenom hur anropen fungerar och varför vektorn ser ut som den gör!
OBS! Matlab skriver vektorn som: 1 10 20 och notera att objektet representeras med typ följt av form.

Med selektorerna getType, getData och getX kan man få reda på objektets typ, form och punktens x-koordinat. Prova de olika selektorerna och förstå hur de fungerar.

Din uppgift är nu att skapa selektorn getY och därefter plotta punkten myPoint.

Uppgift 2: Skapa och rita linjer

Det grafiska objektet linje kan skapas på liknande sätt som punkt.

Skapa en konstruktor för linje, kalla den för makeLine. Indata till makeLine är: startpunktens x- och y-koordinat samt slutpunktens x- och y-koordinat.
För linjen som går från punkten (11,21) till (31,41) kommer objektet att bli: 2 1 11 21 1 31 41

Skapa därefter konstruktorerna getStartPoint och getEndPoint. Kontrollera att de fungerar som tänkt, dvs att de returnerar linjens startpunkt respektive slutpunkt.

Slutligen skriver ni plotfunktionen drawLine som ritar ut en linje. Anropa den och kontrollera plotten.

Uppgift 3: Skapa och rita rektanglar

Upprepa förfarandet i uppgift 2 men för rektanglar istället. Konstruktorn kallas makeRectangle och indata till makeRectangle är koordinaterna för det nedre vänstra hörnet och det övre högra hörnet i rektangeln.
Selektorerna LowerLeftCorner, LowerRightCorner, UpperLeftCorner och UpperRightCorner returnerar punkten för det nedre vänstra hörnet, nedre högra hörnet, övre vänstra hörnet respektive övre högra hörnet.
Slutligen skapar ni plotfunktionen drawRectangle som ritar ut en rektangel. Anropa den och kontrollera plotten.

Uppgift 4: Rita de olika figurerna som anges i programskelettet.

Avkommentera figurpaketet och kör programmet.

Uppgift 5: Ändra representation

Istället för att representera ett objekt med typ och form ändras nu representationen till form och typ. Genomför nödvändiga ändringar i koden! Ger figurpaketet i uppgift 4 samma bild med denna representation?

Om du är tvungen att ändra på många ställen i koden har du gjort abstraktionsuppgifterna fel och måste göra om!

Tänk noga igenom fördelar och nackdelar med abstraktion, konstruktorer och selektorer.

Abstraktions-delen har gjorts av

namn ..................................................................persnr.............................som godkänts av .............................................................. den .................


^ Upp till kurssidan.


Sidansvarig: carina snabela nada.kth.se
Senast ändrad 1 september 2008
Tekniskt stöd: <webmaster@nada.kth.se>