UMEÅ UNIVERSITET Datavetenskap. Praktiska uppgifter. Metoder och verktyg för datavetare Ht04

Relevanta dokument
Legorobot. Lär dig programmera en legorobot. Teknikåttan Ola Ringdahl Lena Kallin Westin

UMEÅ UNIVERSITET Datavetenskap. Praktiska uppgifter. Metoder och verktyg för datavetare Ht07

Laboration: Grunderna i MATLAB

Om NXTprogrammering. Vad är MINDSTORMS NXT? Vad är MINDSTORMS NXT? Vad är MINDSTORMS NXT? Vad är MINDSTORMS NXT? Vad är MINDSTORMS NXT?

Introduktion till Matlab

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Introduktion till Matlab

Roboten. Sida 1 av 11

EV3 Roboten. Sida 1 av 13

Programmering. Den första datorn hette ENIAC.

TAIU07 Matematiska beräkningar med Matlab

Laboration: Grunderna i Matlab

Sphero SPRK+ Appen som används är Sphero Edu. När appen öppnas kommer man till denna bild.

Lego Robot [ ] [ ] [ ]

Aktivitetsbank. Matematikundervisning med digitala verktyg II, åk 1-3. Maria Johansson, Ulrica Dahlberg

Studio 6: Dubbelintegral.

3. Välj den sprajt (bild) ni vill ha som fallande objekt, t ex en tårta, Cake. Klicka därefter på OK.

Laboration 1 Introduktion till Visual Basic 6.0

Introduktion till programmering och Python Grundkurs i programmering med Python

Strukturerad problemlösning. Metoder och verktyg för datavetare Ht09

Newtons metod och arsenik på lekplatser

Programmering eller Datalogiskt tänkande

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS Konsolfönstret

Laboration 3. Funktioner, vektorer, integraler och felskattning

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

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

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

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning

Instruktion för laboration 1

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

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

Datorövning 1 Calc i OpenOffice 1

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

Laboration 3. Funktioner, vektorer, integraler och felskattning

MMA132: Laboration 2 Matriser i MATLAB

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Manual för banläggning i OCAD IF ÅLAND

TANA17 Matematiska beräkningar med Matlab

Inledning till OpenOffice Calculator Datorlära 2 FK2005

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Matlabövning 1 Funktioner och grafer i Matlab

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

Extramaterial till Matematik X

ENKEL Programmering 3

INNEHÅLLSFÖRTECKNING... 2 FÖRORD... 3 INLEDNING... 4 ATT ANVÄNDA MOTORERNA... 9 LOOP (UPPREPANDE) FUNKTIONEN SKAPA EN EGEN KLOSS...

3 Man kan derivera i Matlab genom att approximera derivator med differenskvoter. Funktionen cosinus deriveras för x-värdena på följande sätt.

Vilken version av Dreamweaver använder du?

Introduktion till MATLAB

Word Grunderna 1. Om du kan det allra enklaste i Word, hoppa över uppgifterna A-E.

NetBeans 5.5. Avsikt. Projektfönster

Konvexa höljet Laboration 6 GruDat, DD1344

Linjär algebra med tillämpningar, lab 1

Extramaterial till Matematik Y

Här hittar du ett exempel på ritprogrammet:

Blockly är en av apparna som används för att styra roboten Dash. Den är väldigt enkel i sin utformning och kan med fördel användas av yngre barn.

Laboration 2: 1 Syfte. 2 Väntevärde och varians hos en s.v. X med fördelningen F X (x) MATEMATISK STATISTIK, AK FÖR BYGG, FMS 601, HT-08

Lär dig programmera för dig mellan 6 och 100 år...

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

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

diverse egenskapspaletter

Kort introduktion till POV-Ray, del 1

Matlabövning 1 Funktioner och grafer i Matlab

PROGRAMMERING ÅK 9 INTRODUKTION

Matriser och Inbyggda funktioner i Matlab

Välj bort om du vill. 96 Internet och e-post. 2. Mail-programmet finns i datorn. 1. Skriv mail i sökrutan. Windows Live Mail i Aktivitetsfältet.

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Instruktion för laboration 1

TSBB14 Laboration: Intro till Matlab 1D

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Extramaterial till Matematik Y

Introduktion till Matlab

Föreläsning 5-6 Innehåll

kl Tentaupplägg

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Regression med Genetiska Algoritmer

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

Manual. till. Cantor Madison Medri

Datorövning 2 Matlab/Simulink. Styr- och Reglerteknik för U3/EI2

Guide till att använda Audacity för uttalsövningar

Laborationer i SME094 Informationsteknologi I för

Programmering. Scratch - grundövningar

Laboration Fuzzy Logic

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

Användarhandledning Version 1.2

STOCKHOLMS UNIVERSITET VT 2011 Avd. Matematisk statistik GB DATORLABORATION 1: TIDSSERIER.

Träff 1 Skissa & Extrudera

f(x + h) f(x) h f(x) f(x h) h

Vilken skillnad gör det var du placerar det? Prova båda.

Hur ser Blue-Bot ut i aktion?

Department of Physics Umeå University 27 augusti Matlab för Nybörjare. Charlie Pelland

Micro:bit. Börja skapa egna program

Programmeringspalett. Pr o gr a mvar a

Laboration 1. Grafisk teknik (TNM059) Introduktion till Matlab. R. Lenz och S. Gooran (VT2007)

Introduktion till Matlab

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tynker gratisapp på AppStore

Introduktion till Matlab

GeoGebra i matematikundervisningen - Inspirationsdagar för gymnasielärare. Karlstads universitet april. Liten introduktionsguide för nybörjare

Transkript:

UMEÅ UNIVERSITET Praktiska uppgifter Metoder och verktyg för datavetare Ht04

Umeå universitet Praktisk uppgift 1 Legoprogrammering L1 - ROBOTLEGO Syfte Syftet med denna praktiska uppgift är att man ska få en insikt i hur en robot kan styras med hjälp av enkel programmering med ikoner. Uppgiften kommer också ge tillfälle till reflektion kring hur man ger en robot ett beteende och vilka beteenden som är enkla att programmera och vilka som är svårare. Uppgiften löses i mindre grupper som utses under övningstillfället. Robolab Robolab är en miljö som i huvudsak består av följande komponenter: RCX-modul 1, en styrenhet som innehåller en mikrodator som kan lagra program. Denna del ser ut som en stor legobit och kan byggas in i färdiga konstruktioner som till exempel den robot som finns uppbyggd i labsalen. Robolab, är programvaran där man skriver sina program. Det bygger på ett programmeringsspråk som heter LabVIEW 2. All programmering sker med hjälp av ikoner och man kan själv skapa nya ikoner och återanvända sina program. En kortare manual över de vanligaste ikonerna finns längre bak i detta häfte. IR-sändaren 3, när man skrivit sitt program klart på datorn kan det överföras med hjälp av IR-sändaren till mikrodatorn som finns i RCX-modulen. + en massa legobitar förstås! (men ni kommer tyvärr inte hinna bygga något själva denna gång) En introduktion till systemet och hur man programmerar finns längre fram i detta häfte men läs igenom uppgiften först så att ni har sammanhanget klart för er. Uppgift När ni kommer till laborationssalen finns det en robot och början på ett program som styr roboten där. Ni ska under uppgiftens gång öka på robotens förmåga att röra sig i en omgivning och målet är att den ska kunna följa en snitslad bana obehindrat. (Eller ni kanske formulerar ännu större/svårare mål?) När uppgiften startar finns två ljussensorer kopplade på roboten, dessa är kopplade till ingång 1 och 3 på RCX-modulen. Det finns också en trycksensor kopplad till ingång 2. Det finns två motorer på roboten som styr vänster respektive högre hjulpar. Motorerna är kopplade till utgångarna A och C. Deluppgift ett och två ska programmeras av alla medan det i deluppgift tre räcker med att man funderar kring tillvägagångssätt och skissar på en lösning av problemet om man inte hinner med den. 1 RCX = Robotic Commander explorer 2 Fordonet som landsattes på planeten Mars 1997 hade sin programvara utvecklad i LabVIEW. 3 IR = InfraRed (infrarött ljus) 3(27)

Umeå universitet Praktisk uppgift 1 Legoprogrammering Deluppgift 1 Arbeta med utdata - styr roboten Det kodavsnitt som ni laddat in (se introduktionen) består av en oändlig loop som avslutas genom att man trycker på trycksensorn. Ni ska nu skapa olika beståndsdelar för att styra roboten. Ni börjar med att utveckla delarna inuti den oändliga loopen för att sedan flytta över dem till egna rutiner (och därmed egna ikoner). Detta gör att det blir enkelt för er att återanvända koden i senare deluppgifter. Skriv kod som gör att roboten åker framåt (se också bild i introduktionen!) roboten åker bakåt roboten svänger vänster roboten svänger höger Notera att vänster- och högersvängarna kan göras på tre olika sätt. Två sätt där roboten står stilla och svänger och ett sätt där roboten kör framåt samtidigt som den svänger (det bli en liten större svängradie). Implementera alla tre sätten och undersök vad som skiljer dem åt. Deluppgift 2 Gör ett rörelseschema Låt er robot dansa genom att programmera en sekvens av rörelser. Roboten bör röra sig på olika sätt under minst 15 sekunder. Det är helt valfritt hur roboten rör sig bara det är varierat. Här bör ni använda er av de små delprogrammen som ni gjorde i deluppgift 1. Deluppgift 3 Gör en robot som kan följa en snitslad bana I laborationssalen finns en vit bana upptejpad på golvet. Skriv ett program till roboten som med hjälp av ljussensorerna gör att roboten automatiskt rör sig längs den vita banan. Är det enkelt att ändra så att man istället får roboten att röra sig på området innanför den vita banan? Frivilliga extrauppgifter Ge roboten ett beteende som beror på omgivningen. Välj en eller flera av de sensorer som finns (trycksensorer eller ljussensorer) och skriv ett program där roboten på något sätt reagerar på sin omgivning. Räkna antalet varv i banan, när roboten kört tre varv så ska den göra en segerdans. Tejpa upp banor i olika färger. Se till att roboten bara följer tex den svarta banan. Redovisning Arbetet ska redovisas i en skriftlig rapport. Redogör utförligt för varje genomfört steg, om ni inte hunnit lösa deluppgift 3 så redogör för hur långt ni kommit och beskriv hur ni skulle gått vidare om mer tid funnits. Tänk på att en icke initierad läsare skall kunna återupprepa det ni gjort. Vid val av parametrar måste ni övertyga läsaren om att det inte finns andra val av parametrar som skulle lösa uppgiften avsevärt mycket bättre. Detta kan till exempel göras genom att redovisa tabeller med olika parameterval och redovisning av uppvisat beteende hos legoroboten. I ett separat avsnitt redogör ni för vilka slutsatser som man kan dra av experimentet. 4(27)

Umeå universitet Praktisk uppgift 1 Legoprogrammering Introduktion till systemet RCX-modulen De svarta platserna märkta A, B och C är utenheter. Dit kopplar man till exempel en motor som ska styras av roboten. Platserna märkta 1, 2 och 3 är inenheter dit man kopplar tex ljussensorer De fyra knapparna har följande funktioner: On-off slår av och på modulen, stäng av den medan ni programmerar så sparar ni på batteriet! Run när man laddat ned ett program till modulen så kör man det genom att trycka på run. Man stänger programmet genom att trycka på run igen. Prgm här väljer man vilket program som ska köras (1-5) eller var programmet ska laddas ned. View visar värdet på sensorn. En liten pil på displayen visar vilken sensor man just läst av. IR-sändaren IR-sändaren är redan kopplad till den dator du ska jobba med. Det är den som flyttar över programmet från datorn till RCX-modulen. Så här gör du för att ladda ned ett program: 1. Ställ roboten på 10-30cm avstånd från IR-sändaren. (Robotens IR-portar ser ut som svarta ögon fram på RCX-modulen.). 2. Slå på roboten (On-off på RCX-modulen) 3. Välj var programmet ska lagras (plats 3-5) 4. Tryck på knappen för laddning (en vit pil längst till vänster under menyraden) i Robolab (beskrivs mer nedan). Robolab Du startar programmet genom att välja Robolab i menyn Start All Programs Programming och sedan klicka på Run ROBOLAB och sedan Programmer. Då har du fått upp ett fönster som ser ut som till höger. Här väljer man vilken svårighetsnivå man vill ha på sina program. Dubbelklicka på Inventor 4. Då öppnas två fönster tätt intill varandra som bilden på nästa sida. 5(27)

Umeå universitet Praktisk uppgift 1 Legoprogrammering Detta är ett tomt program där det gröna trafikljuset symboliserar starten av programmet och det röda slutet av programmet. Ni ska dock utgå från en stomme som ni sen ska utöka. 1. Ladda ned filen tom_loop.vi från kurshemsidan och spara den i din hemkatalog. 2. Öppna sedan filen i ROBOLAB. Nu får du upp ett nytt smalt fönster. I detta fönster väljer du Window Show Diagram. Då kommer följande program upp: Den rosa tråden som förbinder alla symboler är själva programmets gång. Det startar i det gröna trafikljuset och går fram till det röda. och är början och slutet på en loop, dvs programmet gör det som finns däremellan upprepade gånger. betyder att loopen upprepas tills dess att knappen på trycksensorn trycks in. betyder att trycksensorn är kopplad till input 2 på RCX-modulen och betyder att alla motorer stängs av (eller rättare sagt att allt som skickas ut till output A, B och C stoppas). 6(27)

Umeå universitet Praktisk uppgift 1 Legoprogrammering Att lägga till ikoner att programmera I nuläget gör programmet ingenting. För att få programmet att göra något måste du lägga till egna kommandoikoner, dvs du måste skapa ett program. Detta gör du genom att välja Show Functions Palette i menyn Window. Då kommer en palett som ser ut som till vänster upp. Det kommer att finnas en översikt över kommandoikonerna i labsalen och man får också en kort beskrivning av ikonen på engelska om man för musen över den. Man kan lägga till en kommandoikon på två sätt. Det ena är när man som nu har ett färdigt program som man vill utöka. Då högerklickar man på den rosa tråden där man vill placera en ikon och väljer Insert. Då kommer funktionspaletten upp och man kan välja vilken ikon man vill lägga in. 1. Prova att stoppa in kommandoikonen Kör motor A framåt mellan och. Man kan också dra från funktionspaletten och släppa ikonen på skrivytan. 2. Dra Kör motor C framåt och släpp den på skrivytan någonstans nära symbolerna och Nu måste man länka in den nya symbolen genom att dra om programtråden. För att kunna hantera symbolerna (flytta dem, förbinda dem med varandra etc) måste du öppna en verktygspalett. I menyn Window välj Show Tools Palette. Då kommer paletten nere till vänster upp. 3. Klicka på i Tools-paletten. Markera sedan tråden mellan och och radera den genom och trycka på Delete-knappen. Klicka sedan på i Tools paletten. Nu kan du dra en ny tråd mellan och samt och. Detta gör du genom att föra musen över tills dess att hjälptexten säger End. Klicka. För sedan musen över tills hjälptexten säger Begin. Klicka igen och en rosa tråd har dragits mellan ikonerna. Gör likadant för den andra förbindelsen. Blir det för tätt mellan ikonerna kan du flytta dem med hjälp av pilen i Tools-paletten. Nu har du ett program som ser ut ungefär så här: 7(27)

Umeå universitet Praktisk uppgift 1 Legoprogrammering 4. Spara ditt program och överför det till RCX-modulen med hjälp av IR-sändaren (se ovan). 5. Starta roboten (PÅ GOLVET!!!!) vad händer? Stanna programmet genom att trycka på trycksensorn. Nu har du gjort ditt första robotprogram. Gå nu tillbaka och fortsätt med deluppgift 1. 8(27)

Umeå universitet Praktisk uppgift 2 MDI L2 - MDI Syftet med denna uppgift är att du kritiskt ska granska olika datorbaserade tjänster och se vilka för/nackdelar de har. I detta fall har jag valt två webbaserade tjänster som vem som helst kan använda från en internetansluten dator. Uppgift Du ska utvärdera websajterna för två biltillverkare: Ford, http://www.ford. se/, och SAAB, http://www.saabsverige.com/. Båda tillverkarna erbjuder sina kunder möjligheten att bygga den bil som man själv vill ha. Du ska utvärdera dessa tjänster utgående från de kriterier, tumregler, etc, som nämndes under MDI föreläsningen. Du kan också finna användbar information på de websajter som finns listade i slutet av uppgiften. Här nedanför finns några exempel på olika kunder som kan tänkas besöka dessa sajter. Familjen Anders Andersson är en 37 årig tre-barns familjefader som efter 3 år i en Fiat 127 har beslutat köpa sig en ny bil. Familjen använder bilen för tre saker: Åka de 15-16 milen till Åsele, inte kul i en Fiat 127, för att hälsa på släkten. Detta sker ca 5-6 gånger per år. Åka fram och tillbaka till jobbet, ca 2 mil. Eftersom familjen inte bor inne i själva Umeå så funkar det inte med kollektivtrafik utan det är tvunget att minst en av föräldrarna tar bilen för att skjutsa barnen till dagis och skola, den som inte tar bilen kan ta bussen till jobbet. Det är alltså nödvändigt att bilen fungerar oavsett väderlek etc. Familjen veckohandlar och därför åker en av föräldrarna in till ett köpcentrum varje vecka för att fylla på förråden. Bägge föräldrarna arbetar och tjänar 18 000 resp 21 000 per månad, de bor i ett hus ca 2 mil från Umeå Den ensamstående Lisa Larsson är 24 år gammal och ensamstående. Hennes nuvarande bil är en Volvo 434 årsmodell -87, men det funkar inte att ha denna 1 20 augusti 2004 bil längre utan hon har beslutat sig för att köpa en ny bil. Lisa är en relativt aktiv person med många vänner och bekanta, hon lägger också ner mycket tid på fysisk träning och sysslar med flera olika sporter: aerobics, snowboard, terränglöpning, fotboll och simning. Hon bor i en tvåa på Mariehem och arbetar på sjukhuset, på grund av detta är hennes lön inte så hög utan ligger omkring 14 500 per månad. Hon har dock fått lite pengar av äldre släktingar och har beslutat lägga största delen på en ny bil. Lisa kommer inte från Umeå utan från Örnsköldsvik och åker dit någon gång per månad för att hälsa på släkt och vänner. Det äldre Paret Athena och Kristos Papandreos är i 65-70 års åldern och bor på Ersboda. De är både ålderspensionärer och passar nu på att njuta av att inte behöva gå till arbetet. De har bott i Sverige i ca 20-25 år och har tre vuxna barn som är bosatta i Umeå, Stockholm och Östersund. Deras fritidsintressen är varierande: stavgång, skidåkning, handarbete, biljard och trädgårdsskötsel (de har en kolonilott ute vid Nydalasjön) men framför allt så umgås de med olika vänner i Umeå-trakten. 9(27)

Umeå universitet Praktisk uppgift 2 MDI De har också många vänner i Grekland och försöker därför att hälsa på två - tre gånger per år. Eftersom Kristos är flygrädd så föredrar de att ta bilen till Grekland. Redovisning Resultatet av utvärderingen ska redovisas i en rapport som beskriver systemen och din utvärdering av dem. Rapporten ska vara klar och tydligt skriven där ditt resonemang ska framgå tydligt. Glöm inte att skilja på förutsättningar, fakta och din värdering/slutsats. Websajter om MDI Notera att det finns flera olika websajter som handlar om MDI, jag har valt att bara lista tre stycken (som inte nödvändigtvis är de bästa) som tillhör tre personligheter inom MDI området. http://www.useit.com/ http://www.jnd.org/ http://www.asktog.com/ 10(27)

Umeå universitet Praktisk uppgift 3 Beräkningsbekymmer L3 - BERÄKNINGSBEKYMMER Syfte Syftet med denna praktiska uppgift är att man ska få stifta bekantskap med programmet MATLAB, men också se hur viktigt det är att reflektera över om de resultat man får är rimliga när man gör beräkningar med hjälp av datorer. MATLAB MATLAB är ett program för att göra matematiska beräkningar och visualiseringar av data, namnet är en förkortning av Matrix laboratory. När man startar MATLAB ska ett kommandofönster med en prompt som ser ut som ett dubbelt olikhetstecken» öppnas. Efter prompten ges instruktioner till MATLAB. Bland det enklaste man kan göra är att addera två tal, skriv följande och tryck sedan på returtangenten:» 23 + För multiplikation använder man * och för division / precis som i de flesta programmerings-språk. Man kan spara uträknade värden i variabler som i detta exempel. 42» A = 3*5» B = 76 11» C = A/ B 15 65 0.2308 Den sista raden, C = A/B, betyder att man delar A (dvs. 15) med B (dvs. 65) och sparar svaret i variabeln C. Om man enbart skriver C och trycker på returtangenten i MATLAB kommer den att svara med värdet som är sparat i C, dvs. 0.2308. Uppgift Uppgiften är indelad i två delar. I den första kommer du att titta på hur ändlig precision i en dator kan påverka resultatet. I den andra delen ska du se hur man kan beräkna en integral med hjälp av en dator. Du ska hela tiden redovisa dina uträkningar med hjälp av de utskrifter du får i MATLAB. Efter att du är klar så kan du skriva ned hur du tyckte att uppgiften har fungerat och om du har några andra reflexioner. 11(27)

Umeå universitet Praktisk uppgift 3 Beräkningsbekymmer Del 1 - Ändlig precision I exemplet ovan beräknades följande division: 15/65= 0.2308. I själva verket är detta en approximation av den oändliga decimaluvecklingen 15 / 65 = 0. 230769230769230769K MATLAB visar bara de fyra första decimalerna men man kan få se fler genom att skriva följande:» format long» C = A/ B 0.23076923076923 På vissa datorer kan det till och med vara så att MATLAB använder fler siffror men detta är vad som är vanligast. Oavsett vilken dator man använder så innebär det att ett litet fel införs när man lagrar decimaltal i en dator. Detta gäller alltid när man använder så kallade flyttal som görs här. Decimalerna efter den 14:e saknas i exemplet ovan så det är en approximation av det egentliga värdet. Detta fel är mycket litet men det kan ge upphov till ganska allvarliga fel under vissa omständigheter. Fundera över vilket typ av fel som kan uppstå och vad det kan få för konsekvenser? Testa följande» sqrt(1e14 + 1) - sqrt(1e14) Kommandot sqrt(x) betyder x och 1e14 är en förkortning för 14 1 *10. Vi beräknar alltså 100000000000001 100000000000000 Eftersom en differens av två nästan lika stora tal beräknas så blir resultatet mycket litet. Testa nu att beräkna» sqrt(1e18 + 1) - sqrt(1e18) Vad blir ditt resultat? Är det rimligt? Varför får du detta resultat? Reflektera över de resultat du får. Låt oss nu använda konjugatregeln för att skriva om uttrycket ovan ( x + x) x + 1 x = 1/ 1 +. Samma beräkning som ovan kan göras på följande sätt. ( sqrt(1e18 + 1) sqrt(1e18) )» 1/ + Detta borde ge ett svar som är mer rimligt, vilket? Varför ger i detta fall två matematiskt ekvivalenta uttryck olika resultat? För att få en uppfattning om hur noggrant MATLAB räknar på en maskin så kan man använda kommandot eps. Detta är definierat som avståndet mellan 1 och det närmast större representerbara talet. Vilket värde har eps? Försök att motivera resultaten ovan med hjälp av storleken på eps. 12(27)

Umeå universitet Praktisk uppgift 3 Beräkningsbekymmer Del 2 - Integralapproximation Matematiskt kan en integral b a f ( x) dx beräknas exakt med hjälp av den så kallade primitiva funktionen till f(x). Vi visar detta med ett exempel. 1 0 e x dx = x 1 1 0 1 [ e ] = e e = e 1 = 1.71828182845905K 0 Du behöver inte fundera på hur man gör utan det är resultatet som är viktigt. Grafiskt så ser ovanstående integral ut som y e x 0 1 1 x där det är arean av den streckade ytan som har beräknats. Ett numeriskt (ej exakt) sätt att beräkna denna integral är att använda sig av Trapetsmetoden. En sådan metod blir man tvungen att använda då f(x) saknar primitiv funktion eller om den är för komplicerad för att ta fram. Trapetsmetoden går ut på att man delar in funktionen f(x) i n stycken delintervall mellan a och b. Varje delintervall får nu längden h=(b-a)/n. På varje delintervall approximeras f(x) med en rät linje. Detta gör att man kan approximera en intregral på följande sätt: där f 1 =f(a), f 2 =f(a+h), f 3 =f(a+2h),, f n+1 =f(b). b f ( + 1 a 1 1 x) dx h f1 + f 2 + f 3 + L + f n + f n = T ( h) 2 2 13(27)

Umeå universitet Praktisk uppgift 3 Beräkningsbekymmer h h h h h h h Det man ser i ovanstående figurer (för integralen av e x ) är att desto fler intervall man väljer desto bättre kommer den linjära approximation att approximera funktionen f(x). I första figuren har n = 2 (h = 0.5) valts och i den andra n = 5 (h = 0.2). Du ska nu beräkna integralen i exemplet ovan med hjälp av Trapetsmetoden. Testa med två och fem delintervall och se hur nära du kommer det exakta svaret, e 1-1 = 1.71828182845905. I MATLAB heter funktionen för att beräkna e x, exp(x). Börja med två delintervall. Beräkna först funktionsvärdet i de olika punkterna:» x =» f 0 : 0.5 :1 = exp( x) Här har vi först skapat en vektor från 0 till 1 med stegen 0.5, dvs. x = [0 0.5 1]. Därefter har e x beräknats för de olika värdena i x. Sen tar vi och beräknar approximationen T(0.5):» T = 0.5* (0.5*f(1) + f(2) + 0.5* f(3)) Ta reda på hur mycket detta svar skiljer sig mot det exakta genom att beräkna differensen T - ( e 1-1) =?. Gör nu samma sak fast med fem delintervall. Tips: x = 0:0.2:1. Hur stort blev felet nu? Man kan fortsätta att göra intervallen mindre och mindre vilket ger en mer exakt lösning. Dock finns det en nackdel med att göra intervallen för små när man ska beräkna integralen på en dator. Kan du komma på vad? Om du får tid över så kan du testa med att rita upp funktionen f(x) och Trapetsfunktionen (så som i figuren ovan). För detta kan du använda dig av funktionen plot, skriv help plot för att få information om plot. Testa gärna att skriva en funktion som approximerar integralen för olika intervallstorlekar. I MATLAB finns det två typer av textfiler, kommandofiler som endast består av kommandon och funktionsfiler som kan ha en eller flera parametrar. Båda dessa typer av filer har samma suffix,.m, och kallas ofta m-filer. Kommandofilen består av en 14(27)

Umeå universitet Praktisk uppgift 3 Beräkningsbekymmer serie kommandon som exekveras när man skriver filens namn i MATLAB. Funktionsfiler har oftast in- och utdata. 4 En m-fil kan skapas med hjälp av MATLABs inbyggda editor som öppnas med hjälp av kommandot edit. Ett exempel på en kommandofil kan vara: %Beräknar variationsbredden för en vektor x xmax = max(x); %max-värde xmin = min(x); %min-värde xmax-xmin Om filen sparas som range.m kan den användas på följande sätt: >> x = [3 8 6 2 4]; >> range Resultatet blir då ans = 6 Kommandofilen ovan kan göras om till en funktionsfil: function r = range(x) %Beräknar variationsbredden för en vektor x xmax = max(x); %max-värde xmin = min(x); %min-värde r = xmax-xmin; Nu kan funktionen range anropas på följande sätt: >> y = [9 3 7 1 8]; >> range(y) Svaret blir då ans = 8 Första raden i en funktionsfil måste innehålla ordet function, funktionsnamnet samt eventuella in- och utparametrar. När man anropar en m-fil måste man ändra sökvägen för aktuell arbetskatalog så att MATLAB kan hitta den. Ett tips för att se några av möjligheterna med MATLAB är att ange kommandot demo och utforska lite själv. Redovisning Redovisa lösningen i varje steg med hjälp av utskrifter från MATLAB. I ett separat avsnitt redogörs för vilka slutsatser som kan dras av övningarna. Diskutera utförligt hur den ändliga precisionen påverkar beräkningarna i första delen samt hur storleken på intervallen påverkar integralberäkningen i andra delen. Använd data från testkörningar för att presentera en förklaringsmodell för något av fenomenen och redovisa denna. 4 Detta och följande stycke är hämtat ur Användarhandledning för MATLAB 6 av Eva Pärt-Enander och Anders Sjöberg, FÖRLAG, 2001. 15(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering L4 - POSTSCRIPTPROGRAMMERING Inledning Programmering handlar om att styra ett beteende hos något, vanligtvis någon teknisk utrustning. Programmering kan ske på flera olika sätt. Det som kommer till minnes först kan vara att programmera en video eller skriva mjukvara till en dator. Mjukvara till datorer är vanligtvis så kallad källkod, som är vanlig text, denna översätts sedan till något som kan förstås av datorn, eller vad det är som skall styras. Källkoden följer vissa regler, som sammanfattas i ett programmeringsspråk, och är ofta uppbyggt på liknande sätt som mänskliga språk. Syftet med laborationen Syftet med denna laboration är att ge ett exempel på ett textbaserat programmeringsspråk och hur vi med hjälp av det kan styra ett visst beteende, denna gång hos en skrivare. Du skall få bekanta dig med begrepp som källkod, syntax, stack, kommando, procedur, variabel, parameter och repetition. Stack Vad associeras ordet stack till? Kanske en myrstack? Begreppet stack är vanligt inom datavetenskapen och beskriver ett sätt att lagra saker som liknar en trave med tallrikar. När någon vill ta bort en tallrik ur en stapel är det sällan den 5:e tallriken, det enklaste är istället att ta den översta. En ny tallrik läggs överst. I en stack kan vi bara lägga till och ta bort element (t.ex tallrik, siffra, instruktion) från ena änden, toppen. 17(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering Syntax I såväl skriftliga som muntliga språk är det viktigt att använda sig av ord och grammatik som andra förstår. Samma gäller när vi försöker tala med en maskin eller dator. Ett problem är att de är inte speciellt intelligenta och att vi därför måste uttrycka oss väldigt tydlig för att de skall förstå. När vi programmerar är det därför väldigt viktigt att följa syntaxen för språket, dvs att vi använder sig av ord som datorn förstår och skriver dem i den ordning som den förväntar sig. PostScript PostScript är ett programmeringsspråk som många kommit i kontakt med utan att veta om det. PostScript används för att beskriva sidor och dess innehåll som sedan kan skrivas ut av en skrivare. Med språket kan vi bestämma hur linjer, text och bilder skall placeras på en sida med hjälp av ett koordinatsystem. Varje punkt på sidan har en horisontell koordinat (x) och en vertikal koordinat (y), på samma sätt som ett x-y-diagram. Enheten för koordinatsystemet kallas punkt och är 1/72-dels tum stor, dvs ca 1/3 mm. Origo (0, 0) finns längst ned i vänstra hörnet. Figur 1: Beskrivning av koordinatsystemet med en linje dragen från punkten (210, 260) till punkten (470, 520). 18(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering Syntaxen i PostScript I figuren ovan ritades en linje över papperet mellan två positioner. Hur skulle detta beskrivas i språket PostScript? Jo, %!PS-Adobe-3.0 210 260 moveto 470 520 lineto stroke showpage %EOF Första raden är en instruktion till skrivaren som säger vilken version som används. Denna rad måste alltid finnas med. Skrivaren har något som kallas aktuell position, ungefär som att den vet var pennan är placerad på papperet. Andra raden talar om att den skall flytta aktuell position till punkten (210, 260). moveto är alltså ett kommando till skrivaren. Där står den nu kvar och väntar på vad som skall hända. Tredje raden säger att den skall dra en linje från aktuell position till (470, 520). lineto kan läsas ungefär som draw a line to. Kommandot stroke talar om att linjen vi dragit ovan också skall ritas på papperet och showpage säger åt skrivaren att skriva ut sidan. Inget syns på papperet förrän dessa två kommandon ges. Sista raden talar om att programmet är slut och är inte helt nödvändig. Den är en instruktion till skrivaren att programmet är slut, men det förstår den själv eftersom det inte finns mer text. Kommentarer kan läggas in i koden, de ignoreras av skrivaren och är till för att det skall vara lättare att förstå vad programmet gör. Allt som följer till höger om tecknen % till radens slut är en kommentar. Hur fungerar det? PostScript är ett programmeringsspråk som använder en stack. De flesta programmeringsspråk använder en stack, men många av dem döljer den för programmeraren och använder den under huven, så att säga. 19(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering Hur fungerar i PostScript fungerar beskrivs i figuren ovan. Först läggs talet 210 till, och därefter talet 260. Därefter kommer ett kommando (i detta fall moveto). Detta kommando behöver två värden för att veta var det aktuella positionen skall flyttas. Det indata som ett kommando behöver kalls ofta parametrar. Kommandot plockar dessa värden från, först det som ligger överst, dvs 260. När kommandot har tagit sitt värde så försvinner det från, och nu finns bara värdet 210 kvar. Därefter tar kommandot detta värde, och är tom. Nu har kommandot fått de värden det behöver för att utföra sin uppgift, och är tillbaka till utgångsläget. Observera att det kan ligga andra värden under 210 resp 260 på, men de berörs inte av denna operation. Därefter läggs två nya värden till, och lineto plockar bort dem för att kunna dra strecket. Uppgift 1 Rita en kvadrat Du skall nu skriva en bit kod (ett program) i PostScript som ritar en kvadrat på ett papper. Till din hjälp har du två olika kommandon, nämligen: Tas från Kommandona Läggs till Förklaring mn x y moveto - Plockar två värden från och flyttar aktuell position till (x, y) dx dy rlineto - Plockar två värden från och drar ett streck från aktuell position (x, y) till en position relativt den aktuella, dvs till (x + dx, y+ dy). (En del kommandon lämnar värden efter sig på, men inte några av de vi stött på hittills. Därav kolumnen Läggs till ). Skapa en ny textfil. Kalla den uppgift1.ps. Skriv först in översta raden enligt det första exemplet. Låt sedan kommandot moveto flytta aktuell position till en punkt på papperet där du vill att kvadratens nedre vänstra hörn skall ligga. Använd sedan rlineto för att bilda kvadratens sidor. Observera att aktuell position också flyttas av kommandon som lineto och rlineto, dvs till änden på de linjer de ritar. I vårt fall är det ju startpunkten för nästa linje, så vi behöver alltså bara använda moveto en gång. Glöm inte stroke och showpage på slutet och se upp så att du får en kvadrat, inte en rektangel. Till slut är det dags att skicka ditt program till skrivaren så att den kan börja rita. Detta görs på olika sätt för olika datorer och skrivare, så fråga handledaren om hur det fungerar på just ditt system. 20(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering Uppgift 2 Skapa en variabel På hur många ställen i koden måste vi ändra för att ändra kvadraten storlek? Ganska många. En variabel är ett namngivet värde som kan används flera gånger. Om vi först definierar en variabel som anger kvadratens storlek så kan vi sedan använda oss av den när vi ritar kvadraten. På detta sätt behöver vi bara ändra variabelns värde en gång för att ändra kvadratens storlek istället för på alla ställen storleken används. För att definiera en variabel används kommandot def Tas från Kommandona Läggs till Förklaring mn key value def - Associerar key med value, dvs definierar en variabel med namnet i key och värdet i value. Ett exempel: /sida 50 def I exemplet ovan skapar vi en variabel som heter sida och har värdet 50. Snedstrecken framför d:et ingår inte i namnet utan säger bara att vi vill skapa ett nytt namn. Om vi skall vara riktigt noga så gör / så att namnet läggs på, därefter kommer 50 och sedan def som tar namn och värde och skapar en variabel. För att använda variabeln, dvs få ut dess värde, så skriver vi bara dess namn. Vi har faktiskt skapat ett nytt kommando i PostScript, som heter sida och lämnar ett värde efter sig på. Tas från Kommandona Läggs till Förklaring mn - sida value Lägger sitt värde på Skapa en ny textfil, med namnet uppgift2.ps. Skriv ett program som skapar en variabel enligt exemplet ovan. Använd sedan variabeln för att rita kvadraten med hjälp av rlineto. 21(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering Uppgift 3 Skapa en procedur Om vi skulle vilja skapa flera kvadrater med olika storlek blir det väldigt mycket skrivande, där vi upprepar kod som är nästan lika förutom några siffror som skiljer. Dett borde nog kunna göras effektivare. Vi kan skapa så kallade procedurer. En procedur är vanligtvis ett kort program som kan anropas som en enhet. Målet med uppgiften är att vi skall kunna skriva enligt exemplet nedan för att enkelt kunna rita en kvadrat. 150 150 moveto 67 square stroke showpage Detta stycke kod skall rita en kvadrat med sitt nedre vänstra hörn i punkten (150, 150) och där dess sidlängd är 67 punkter. För att detta skall fungera måste vi först skapa en procedur som vi kallar square. Detta görs på samma sätt som när vi gjorde en variabel, med den skillnaden att vi måste omgärda vår kod med krullparenteser, { och }. I själva verket så är en procedur samma sak som ett kommando i PostScript, och när PostScript tolkar ett program och hittar ordet square så letar den i sitt minne efter en procedur som har ett passande namn. Detta betyder att proceduren square måste vara definierad före den används, annars hittar PostScript den inte. Här nedan ser du ett enkelt exempel på hur proceduren kan skapas. Allt du sedan skriver mellan krullparenteserna kommer att utföras när vi använder kommandot. /square { } def Men hur kan vi i vår procedur veta hur stor kvadraten skall vara? Vi vill ju kunna läsa in 67 och använda det som sidlängd. Nu måste vi tänka på hur PostScript fungerar. När vi skrev 67 före square lades detta värde till. Vi vill alltså att proceduren hämtar översta värdet på (67) och skapar en variabel som har detta värde. Sedan kan koden som ritar kvadraten utnyttja variabeln. Vi har dock ett problem. Om vi återigen tittar på hur kommandot def fungerar: Tas från Kommandona Läggs till Förklaring mn key value def - Associerar key med value, dvs definierar en variabel med namnet i key och värdet i value. Vi måste alltså först lägga till namnet på den variabel vi vill skapa till innan vi lägger dit värdet. Men värdet ligger ju redan på, i vägen så att säga. Hur gör vi då? Jo, vi lägger till namnet och låter sedan elementen på byta plats med varandra. Detta gör vi med ett kommando som heter exch, och som helt enkelt byter plats på de två översta elementen på. 22(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering Tas från Kommandona Läggs till Förklaring mn v1 v2 exch v2 v1 Byter plats på de två översta elementen på. Vi skriver alltså I proceduren: /square { /side exch def mera kod. } def Om du tycker att det är svårt att hålla reda på vad som finns på kan du skriva varje kommando på en egen rad, och lägga till en kommentar som visar vad som ligger på. Det är vanligt att skriva hur ser ut efter det att radens procedur utförts. Stacken visas enklast med toppen åt höger: /square { % 67 /side % side 67 exch % 67 side def % - (side har definierats) mera kod. } def Anledningen till att square inte finns på någonstans är lite mer komplicerad men har att göra med att /square exekveras medans PostScript tolkar din procedur, däremot exekveras /def först när square anropas, dvs senare i programmet. Kod som skrivs mellan krullparenteser lagras bara i proceduren, den körs inte förrän proceduren anropas. PostScripts kommandon har alltså egentligen två beteenden, ett under tolkning och ett under körning, men det behöver du egentligen inte bry dig om. När vi skriver stack-kommentarer så menar vi hur ser ut när proceduren körs. Variabeln sida kan sedan användas när vi ritar kvadratens sidor. Observera att vi inte behöver använda moveto eller stroke i proceduren. Procedurens uppgift är bara att rita en kvadrat just där den aktuella positionen är. När du har skrivit proceduren så att du kan använda den som tänkt enligt exemplet, kan du testa att rita flera kvadrater och även se vad som händer om du byter ut ordet stroke mot fill. %!PS-Adobe-3.0 150 150 moveto 67 square 200 200 moveto 80 square stroke 100 300 moveto 60 square 23(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering fill showpage %EOF Uppgift 4 Upprepning I föregående uppgift såg vi hur enkelt det ofta blir när vissa uppgifter samlas i en procedur. Detta gör det mycket enklare att upprepa likartade uppgifter, speciellt om det dessutom är möjlighet att skicka med parametrar. Om vi däremot vill upprepa en viss uppgift flera gånger blir det ju också jobbigt och mycket kod att skriva. Därför finns i de flesta programmeringsspråk olika sätt att repetera viss kod. I PostScript ser det ut som följer: n {... } repeat n anger hur många gånger koden mellan krullparenteserna { och } skall upprepas. Ett exempel kan alltså vara: %!PS-Adobe-3.0 100 100 moveto 10 {20 0 rlineto 20 5 rmoveto} repeat stroke showpage %EOF Vad gör koden ovan? Skapa en ny fil som heter uppgift4.ps. Kopiera proceduren du skrev i uppgift 3 till filen och använd dig av upprepningskommandot för att rita flera kvadrater som bildar ett mönster på papperet. Uppgift 5 Rita en egen figur Skapa en ny fil uppgift5.ps och hitta på en egen figur som du ritar. Kolla gärna nästkommande sida för att hitta fler kommandon du kan använda till att skapa figurer. Koden skall innehålla på variabler och minst en procedur. Redovisning Följ de allmänna anvisningarna för laborationerna. Var noga med att redovisa den källkod du skrivit. Den skall alltid vara redovisad med ett fixt typsnitt, till exempel courier. Redovisa också de utskrifter du gör som bilagor. Reflektera vidare över de lärdomar du drar kring skapandet av variabler och procedurer och hur dessa konstruktioner underlättar ditt programmerande. 24(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering Vanliga kommandon Observera att toppen på (översta värdet) ligger till höger i beskrivningen. Tas från Kommandonamn Läggs till Förklaring num1 num2 exch num2 num1 Byter plats på de två översta elementen på. num dup num num Duplicerar översta värdet på num1 num2 pop num1 Tar bort översta värdet på num1 num2... clear - Tar bort alla element från. num1 num2 add num1+num2 Summerar de två översta värdena på och lägger dit resultatet num1 num2 div num1/num2 Dividerar de två översta värdena på, och lägger dit resultatet. num1 num2 sub num1-num2 Subtraherar översta värdet från det näst översta värdet, lägger resultatet på num1 num2 mul num1*num2 Multiplicerar de två översta värden på, lägger resultatet på num abs abs Tar absolutbeloppet av översta värdet, lägger resultatet på. num sqrt num Tar kvadratroten ur översta värdet på, lägger tillbaka resultatet. num sin sin(num) Beräknar sinus för översta värdet på, lägger tillbaka resultatet num cos cos(num) Beräknar cosinus för översta värdet på, lägger tillbaka resultatet num setlinewidth - Sätter linjebredden (i punkter) num setgray - Sätter färgen till en grå nyans där 0.0 är svart och 1.0 är vitt. - currentpoint x y Returnerar aktuell position som två värden på x y moveto - Sätter aktuell position till (x, y) dx dy rmoveto - Flyttar aktuell position relativt den föregående. x y lineto - Drar en linje från aktuell position till (x, y). 25(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering Tas från Kommandonamn Läggs till Förklaring dx dy rlineto - drar en linje från aktuell position till en position relativt den aktuella, dvs till (x+dx, y+dy) om aktuell position är (x, y). x y r ang1 ang2 arc - Drar en circelbåge med centrum i (x, y), med radien r, från vinkel ang1 till ang2, moturs. x y r ang1 ang2 arcn - Samma som ovan men går medurs. 26(27)

Umeå universitet Praktisk uppgift 4 Postscriptprogrammering Tas från x1 y1 x2 y2 x3 y3 Kommandonamn Läggs till Förklaring curveto - Ritar en sk Bezierkurva. dx1 dy2 dx2 dy2 dx3 dy3 rcurveto - Samma som ovan men med relativa koordinater. - fill - Fyller de dragna figurerna. - stroke - Ritar streck längs de dragna figurerna. - showpage - Säger åt skrivaren att visa sidan. 27(27)