ComsolScript 1.2 i kursen experimentella metoder

Storlek: px
Starta visningen från sidan:

Download "ComsolScript 1.2 i kursen experimentella metoder"

Transkript

1 ComsolScript 1.2 i kursen experimentella metoder av Sten Hellman Övningsuppgifter av Elin Bergeås, Sten Hellman, Max Karlovini, Teresia Månson, Jonas Strandberg & Linda Östman

2 ii 3:e upplagan, Stockholm c Sten Hellman, Stockholms universitet.

3 Innehåll 1 Inledning Vad är ComsolScript? Konventioner Att komma igång Börja jobba med datorn Logga in på datorn Logga ut från datorn Att navigera på datorn Minne och hårddisk på en dator Skaffa mer diskutrymme Filnamn och Sökvägar Fullständiga filnamn Aktuell katalog Var skall jag spara filer Komma igång med ComsolScript ComsolScripts kommandofönster De första stegen - Hello World ComsolScripts hjälpfunktion Avsluta ComsolScript Börja Räkna ComsolScript som en räknedosa Operatorer Variabler Konstanter Miljön i ComsolScript Städa upp kommandofönstret: tyst input, fortsättningsrader Format och avrundning ComsolScripts Workspace Play it again Sam - att upprepa kommandon Att återkalla kommandon Var söker ComsolScript efter filer M-filer Editera m-filer ComsolScripts inbyggda editor Att spara en m-fil på disk Läsa in och köra en m-fil Kommentarer In- och utmatning av data till M-filer Paus i utskriften Namngivning av M-filer iii

4 iv INNEHÅLL 2.7 Övningsuppgifter Vektorer och matriser Inbyggda funktioner Litet om vektorer Skapa vektorer Räkna med vektorer Elementvisa operationer Litet om matriser Räkna med matriser Matrisdivision Inbyggda funktioner Operationer på skalärer Operationer på vektorer Operationer på matriser Övningsuppgifter Börja programmera Villkorssatser Slingor for-slingor while-slingor Att hoppa ut ur en slinga - kommandot break Funktioner Syntaxen för funktioner help för en funktion Testa antalet argument Övningsuppgifter Ordbehandling med OpenOffice writer OpenOffice Allmänna kommentarer Textbehandling Typsnitt Storlek på texten Fet, kursiv och understruken text Att justera texten Att göra en rubrik Egna formatmallar Lägga till knappar till verktygsfältet Sidbrytning Sidnumrering Fotnoter Numrerade listor Tabeller Tabelltext Omvandla värden från ComsolScript till en tabell i OpenOffice Figurer Ankra bilder Figurtext Infoga figur från OpenOffice Draw Speciella symboler

5 INNEHÅLL v 5.13 Ekvationer Text i formler Spara dokument Spara i pdf-format Övningsuppgifter När det blir fel D-Grafik Kurvor i två dimensioner Att växla mellan fönster, och städa i fönster plot-kommandot Styra utseendet på grafiken Koordinataxlar Text Plotta punkter med fel Histogram Kommandot bar - stapeldiagram Kommandot hist - histogram Kommandot stairs - konturdiagram Kommandot stem - stolpdiagram Utskrifter av grafik Spara grafer och flytta till andra program Lägga in bilder i OpenOffice dokument Fler Kurvor i samma graf - kommandot hold Fler grafer i samma fönster - kommandot subplot Rita i grafer Logaritm-skalor Övningsuppgifter Text-strängar, formattera text, mer om grafik Text-strängar Manipulera textsträngar Delsträngar Formaterad in- och utmatning Läs data och strängar från kommandofönstret - kommandot input Formatera strängar för utmatning - Formatkoder och kommandot sprintf Avancerad grafik Fler grafikfönster - kommandot figure Att redigera en graf interaktivt Handtags-grafik D grafik Kurvor i rymden - plot Funktionsytor - mesh och surf Att styra utseendet av en 3D-graf Konturplottar och projektioner Övningsuppgifter

6 vi INNEHÅLL 9 Beräkningar och anpassningar Enkel statistik Polynom Hitta rötter till polynom Finn polynomuttryck för givna rötter Värden på polynom Derivator av polynom Produkter och kvoter av polynom Matrisekvationer Minsta kvadratanpassning Minsta kvadratanpassning med matrismetod Övningsuppgifter Programmering Att programmera Design av programmet Dokumentation av programmet Goda vanor Mer om programmering och funktioner Linjär korrelationskoefficient Viktad anpassning till rät linje Viktad anpassning och plottning av rät linje Övningsuppgifter A Syntax för formler i OpenOffice 103 A.1 Unary and binary operators A.2 Relations A.3 Set symbols A.4 Functions A.5 Operators A.6 Attributes A.7 Others A.8 Brackets A.9 Formatting B ComsolScripts Debugger 113 B.1 Debuggning med breakpoints B.2 Övningsuppgifter C Svar och lösningar 119 C.2 Svar till kapitel C.3 Svar till kapitel C.4 Svar till kapitel C.7 Svar till kapitel C.9 Svar till kapitel C.10 Svar till kapitel C.11 Svar till Appendix B

7 Kapitel 1 Inledning Det här kompendiet är avsett att användas i kursen Experimentella metoder i fysiken som ingår i första årskursen i kandidatprogrammet i fysik vid Stockholms Universitet. Kompendiet är inte avsett att vara en komplett kurs i ComsolScript utan strävar efter att ge en introduktion till programmet, och mer detaljerade kunskaper inom de områden som är nödvändiga för kursen Experimentella metoder. Tonvikten ligger inom två områden: beräkningar för att behandla mätvärden från laborationer och grafisk presentation av mätdata och resultat, främst då 2D-grafik. Detta upplägg innebär att en del områden nästan inte alls kommer att beröras, som till exempel komplexa tal, 3D-grafik, mer avancerade matematiktillämpningar och modellering. Vi är dock förvissade om att man efter att ha följt kursen har så goda kunskaper i att använda ComsolScript att det skall vara relativt enkelt att på egen hand läsa in andra områden vartefter behov av det uppstår. Programmet ComsolScript har en mycket väl utvecklad hjälpfunktion, men som med alla andra program kan det vara svårt att veta vad man skall be om hjälp med innan man har nått en viss kunskapsnivå. Dessutom kan det ibland vara besvärligt att vara hänvisad till engelska termer. För att träna upp det interaktiva hjälpsökandet använder kompendiet flitigt hänvisningar till ComsolScripts egen dokumentation. Kompendiet är skrivet i avsikt att läsas i en följd, många avsnitt bygger direkt på tidigare avsnitt, en hel del av de exempel som ges förutsätter att föregående exempel har körts. Kompendiet har vid det här laget en lång historia. Tidigare har vi på fysikum använt Matlab istället för ComsolScript. ComsolScript är ett nyutvecklat program som använder samma syntax som Matlab. Har man lärt sig ComsolScript är det alltså mycket enkelt att använda också Matlab, och vice versa. Detta kompendium är därför i stort sett bara en översättning av den fjärde upplagan av motsvarande kompendium för Matlab. Det går i sin tur tillbaka till ett kompendium av Hans Mühlen - MATLAB - som kom i flera upplagor under åren Sedan den första versionen av Matlab-kompendiet producerades har många fel rensats ut och många förbättringar gjorts med hjälp av de doktorander som arbetat som assistenter på kursen: Elin Bergeås, Annelie Ehlerding, Attila Hidvégi, Max Karlovini, Teresia Månsson, Jonas Strandberg och Linda Östman. Björn Selldén har bidragit med en mängd korrigeringar och förbättringar. Tack för hjälpen! Avsnittet om ordbehandling skrevs ursprungligen av Jonas Strandberg för Microsoft Word. När vi vårterminen 2006 bytte ordbehandlingsprogram till OpenOffice så har detta kapitel skrivits om av mig, men strukturen går tillbaks på det ursprungliga kapitlet av Jonas. Elin Bergeås och Linda Östman har bidragit med flera tips till detta avsnitt. 1

8 2 KAPITEL 1. INLEDNING 1.1 Vad är ComsolScript? ComsolScript är ett kommersiellt program, eller snarare programpaket, för matematiska beräkningar och grafisk presentation. ComsolScript-paketet har en mängd utbyggnadsmöjligheter med färdiga moduler och kan användas för ett stort antal mer eller mindre specialiserade beräknings- och simuleringsuppgifter. I den här kursen, och även i övrigt här på fysikum, använder vi oss av ComsolScript dels för att skriva program för att genomföra beräkningar, till exempel för att bearbeta lab-resultat, dels för att presentera resultat i grafisk form. Som alla andra program har ComsolScript sina styrkor och svagheter. Namnet MATLAB stod ursrpungligen för MATrix LABoratory, och även om MATLAB-familjen (dit vi räknar ComsolScript) har utvecklats enormt sedan det döptes så är matrishanteringen fortfarande en av de starka sidorna hos ComsolScript, något som kommer att komma till stor användning under den här kursen. Rent allmänt är ComsolScript väldigt förlåtande, man behöver till exempel inte - som i de flesta högnivåspråken för programmering - göra skillnad mellan heltal och decimaltal. Man behöver inte heller i förväg tala om hur stora vektorer skall vara. Det finns gott stöd för att producera grafik, men det kan i början kännas litet avigt att man inte enkelt kan plotta sin(x) mot x, utan först måste man konstruera en vektor med x-värden och en annan vektor med y-värden och sedan plotta dem mot varandra. Vi skall också komma ihåg att ComsolScript är ett matematikprogram, inte ett ordbehandlingsprogram. Vi kommer alltså att behöva komplettera vår arsenal med ett program som hanterar text och figurer för att kunna producera dokumentationen av våra experiment. 1.2 Konventioner I detta kompendium används endast ett fåtal typografiska konventioner. En är när vi visar exakt hur det ser ut när man skriver in kommandon i ComsolScripts kommandofönster och får output tillbaks till det fönstret. Sådana exempel visas inom en ram: Kommandot som skrivs in Respons från ComsolScript Ibland refererar vi till kommandon och variabler i löpande text, och markerar då detta genom att skriva variabelnamnet med särskilt typsnitt a = sin(x). Referenser till ComsolScripts hjälp-dokument skrivs med initialt? och särskilt typsnitt, t.ex.?/comsol Script Basics/Using COMSOL Script/Starting COMSOL Script Hur man använder en sådan referens för att söka ett avsnitt i dokumentationen beskrivs i avsnitt Notera också att ComsolScript använder den anglosaxiska konventionen där decimalkommat inte skrivs med komma utan med punkt. Således är 2,3 ett talpar medan 2.3 är ett decimaltal.

9 Kapitel 2 Att komma igång 2.1 Börja jobba med datorn Efter det första dataövningspasset skall du kunna: Logga in på ditt studentkonto på Fysikums datorer Starta ComsolScript Använda ComsolScript som en enkel mini-räknare använda M-filer och spara dessa på disk Logga in på datorn. Hur man loggar in på datorerna på övningslabbet kommer troligen att variera med tiden. Det beror också på vilket operativsystem den dator du skall arbeta vid använder. Här beskrivs hur det går till att logga in på en dator som kör operativsystemet Windows under vårterminen Skulle du misslyckas att komma in på det sätt som beskrivs här kan det bero på att förhållandena ändrats, så fråga en assistent om du är tveksam. I normalfallet kommer datorn att visa upp en inloggningsruta på skärmen som litet schematiskt kan se ut på de två sätt som visas till höger. Du kan växla mellan de bägge utseendena genom att klicka på options -knappen längst ned till höger. Du skall logga in med skärmen i det läge som syns till höger i bilden, med tre rader och pilarna till vänster om texten options. På den understa av de tre raderna skall du välja WINADSU. Skriv sedan in ditt användarnamn och lösenord för ditt SU-konto. Om du inte kan se inloggningsrutan på skärmen så prova Ctrl-Alt-Delete, dvs tryck samtidigt ned tangenterna Ctrl, Alt och Delete. När du loggar in på detta vis har du full tillgång till dina mappar under SU-kontot. Din huvudkatalog på ditt SU-konto kan du hitta under My Computer \ abcd1234 on win.su.se (där abcd1234 skall bytas ut mot ditt användarnamn på SU-kontot) Logga ut från datorn När du har jobbat klart och skall lämna datorn trycker du på Windows-symbolen längst ned till vänster. Längst ned i den meny som kommer upp står Shutdown.... Klicka där. I det 3

10 4 KAPITEL 2. ATT KOMMA IGÅNG nya fönster som kommer upp skall du inte klicka direkt, utan istället ändra rullningslisten från Shutdown till Log off abcd Att navigera på datorn Att hålla ordning på alla filer som skapas under ett projekt, som till exempel en laboration eller en ComsolScript övning kräver litet disciplin. Det är naturligtvis extra viktigt att man tänker sig för i en miljö som den på övningslab, där många användare använder samma dator. Innan vi går igenom hur man bör arbeta gör vi först en allmän genomgång över hur program på en dator hanterar disk och minne Minne och hårddisk på en dator Ett program som kör på en dator hanterar två typer av information, dels instruktioner - det vi i dagligt tal kallar programmet, som styr datorn och på lägsta nivån talar om för datorn hur den skall utföra olika kommandon, dels data som är vad programmet opererar på. Sett ur det här perspektivet håller ett program som t.ex. ComsolScript reda på två saker när vi till exempel skriver : dels vad instruktionen x + y innebär och hur programmet skall genomföra den operationen, denna information är det vi kallar instruktioner. Sedan måste programmet också hålla reda på vad x och y är i just den aktuella beräkningen, och spara svaret någonstans, den typen av information kallas data. Den här informationslagringen kan ske på två ställen, antingen på hårddisken eller i datorns internminne. Det finns några skillnader i egenskap hos dessa två lagringsmedia: hårddisken är permanent, i betydelsen att så länge allting fungerar som det skall så finns all information som lagras på hårddisken kvar så länge som man inte uttryckligen raderar den 1. Internminnet å andra sidan är temporärt i två avseenden, dels så överlever ingen information i internminnet att datorn stängs av, dels är det till och med så att då ett program avslutas så raderas all information som programmet sparat i minnet. En annan skillnad mellan hårddisk och internminne är att det går mycket snabbare att komma åt data som finns i minnet (oftast talar man om internminnet som bara minnet ) än på disken. Med det här som bakgrund kan vi nu förstå litet bättre vad som händer när vi kör ett program. Eftersom programmet måste finnas kvar varje gång vi startar datorn så måste själva programmet finnas lagrat på hårddisken. Eftersom det tar lång tid att hämta instruktioner som finns lagrade på hårddisken så vill man inte att programmet skall gå och hämta varje instruktion för sig från hårddisken, det skulle dels göra programmet mycket långsamt och dels skulle datorns disk stå och surra hela tiden. Ett program som startar reserverar därför ett stycke minne för instruktioner och kopierar in de mest centrala dit och läser dem direkt därifrån. Skulle programmet träffa på en instruktion som inte finns inkopierad till minnet så går den ut på hårddisken och läser in denna instruktion, men inte bara en enstaka instruktion, utan ett block med instruktioner som ofta används tillsammans. Ett välkonstruerat program behöver därför inte gå ut och läsa från den långsamma disken särskilt ofta, utan håller sig för det mesta till den kopia av instruktionerna som finns i minnet. 2 Samtidigt reserverar programmet en annan del av minnet för att lagra data. 1 Kom ihåg dock att datorerna på övningslabb regelbundet städas och att alla användarfiler tas bort. Det enda ställe där du kan vara säker på att spara dina filer är på ditt afs-konto. 2 När vi lärt oss det här om hur datorer fungerar kan vi förstå två saker: Dels varför vissa program ibland kan gå så sagolikt långsamt. Om minnet börjar ta slut, det vill säga om det inte finns något ledigt minne kvar att reservera, vilket kan hända när vi kör många program samtidigt, så kan ett program inte reservera tillräckligt stora delar av minnet för att lagra så många instruktioner så att det kan köra effektivt. Istället måste programmet ut och titt som tätt läsa instruktioner från den långsamma disken. Det här leder till sega program som svarar långsamt på våra kommandon. Vi förstår nu också varför program kraschar. I nio fall av tio (minst) beror det på att program A (ofta tillverkat av Microsoft) har skrivit till exempel data i en del av minnet som program B reserverat för sina instruktioner. I stället för instruktioner om hur programmet

11 2.2. ATT NAVIGERA PÅ DATORN 5 Eftersom instruktionerna bara är en kopia av det som finns lagrat på hårddisken så påverkas inte programmets funktion av en eventuell krasch med efterföljande omstart, det är ju bara att skapa en ny kopia av instruktionerna från hårddisken. Data däremot flyger all sin väg. När programmet avslutas, frivilligt eller ofrivilligt, så är all information som lagrats i workspace borta. Om man nu har lagrat priserna för ett stort antal olika sorters godis i ComsolScripts workspace och räknar med att behöva använda den listan igen vid ett senare tillfälle så vill man naturligtvis kunna spara listan även efter det att ComsolScript avslutats för den här gången. Det går att göra, vi kan från ComsolScript spara innehållet i workspace på hårddisken, vi kan också skapa separata filer med data och/eller ComsolScript-kommandon som sparas på hårddisk och som vi sedan läser tillbaks, sk M-filer. Detta kommer att bli det sätt vi normalt arbetar med ComsolScript. Genom att spara allt på hårddisk är det enkelt att gå tillbaks och göra smärre korrektioner och modifieringar och framför allt: vi kommer att spara mycket arbete genom att vi kan återanvända kod-snuttar från tidigare övningar Skaffa mer diskutrymme Experimentella metoder är en mycket datororienterad kurs. Ganska snabbt kommer därför ditt tillgängliga diskutrymme att ta slut. Du kan enkelt göra det större genom att logga in via webportalen Mitt Universitet. Du loggar in genom att öppna en webbläsare och i adressfältet skriva in mitt.su.se. Första gången du gör det här kan det hända att du får upp varningsrutor om säkerhetscertifikatet. Godkänn alla certifikaten. Användarnamn och lösenord är samma som för att logga in på datorn. När du loggat in klickar du på fliken Min sida i raden längst upp. I den vänstra kolumnen finns en rubrik som heter Resurser och under den står det Diskutrymme (i hemkatalog). Klicka på knappen Visa/Ändra i samma rad. Ändra ditt diskutrymme till exempelvis 200 MB Filnamn och Sökvägar Varje fil på en dator måste ha ett unikt namn som fungerar som en sorts adresslapp. Precis som när vi identifierar personer genom namn och en hierarki av adresser alltifrån gata med portnummer upp till städer och länder så har en datoradress flera nivåer. På den lägsta nivån talar vi om filnamn, som till exempel rapport2.text, laboration4.m osv. Varje fil måste vara placerad i en katalog (engelskans directory, på svenska kan vi också kalla det mapp ). Katalogen kan i sin tur vara inplacerad i en annan katalog, och så vidare. Det är klokt att försöka organisera en trädstruktur av kataloger som logiskt delar upp de filer man äger i avgränsade undergrupper som i exemplet nedan. skall hantera x + y står det någonting helt annat, som programmet helt oskyldigt försöker genomföra med resultatet att allting hänger sig. Ibland är program A och B identiska, ett program kan skriva över sina egna instruktioner.

12 6 KAPITEL 2. ATT KOMMA IGÅNG labbar lab1 lab2 lab3 Rapport Rådata Rapport utkast1 utkast1 Vi ser hur det finns en textfil som heter utkast1 i katalogen rapport. Katalogen rapport ligger i sin tur i katalogen lab1, som ligger i katalogen labbar och så vidare. I en given katalog kan det bara finnas en fil med samma namn, vilket inte är så konstigt, hur skulle datorsystemet annars förstå t ex vilken fil vi ville skriva ut när vi ger ett print-kommando. Men precis som brevbärarna inte bara kan hantera en Sven Andersson utan kan hålla isär Sven Andersson på Linnégatan från Sven Andersson på Kungsgatan, och Sven Andersson på Linnégatan i Göteborg från Sven Andersson på Linnégatan i Stockholm så kan datorn, om vi bara ger hela adressen, hålla isär en fil som heter utkast1 i katalogen rapport i katalogen lab2 från en fil som heter utkast1 i katalogen rapport i katalogen lab1. För att vara säkra på att vi och datorn förstår varandra när vi refererar till filer så måste vi reda ut två saker. Dels hur man anger att det är filen utkast1 som finns i trädet under lab1 och inte filen med samma namn i trädet under lab2, det vill säga hur bär vi oss åt för att skriva en fils fullständiga namn, inklusive katalogtillhörigheten (detta kallas på engelska path). Den andra saken vi måste förstå är något som kallas den aktuella katalogen och som avgör hur datorn tolkar våra kommandon när vi bara ger filnamnet och ingen information om katalogtillhörigheten Fullständiga filnamn Ett fullständigt filnamn i operativsystemet Windows börjar med namnet på hårddisken. Den dator du arbetar på kan nämligen ha mer än en hårddisk, och det kan också vara så att du över nätverket kan ha tillgång till hårddiskar som inte fysiskt finns på just den datorn du arbetar vid, som till exempel de filer du lagrar på ditt AFS-konto. När du loggat in på ditt AFS-konto (se intstruktioner på windows.html) så kommer det att se ut som om de filer du lagrat där ligger på en disk på den dator du jobbar vid med namnet Z. (Observera att vilken bokstav som AFS-disken får kan variera från gång till gång, beroende på historien på den dator där du jobbar). I filnamnet följs disknamnet av kolon, därefter \ ( backslash ) och sedan namnen på katalogerna, separerade med backslash. Om vi till exempel antar att katalogen Sten ligger i en katalog USERS som inte har någon katalog över sig på Z-disken så blir den fullständiga adressen till filen utkast1: Z:\USERS\Sten\Expkursen\labbar\lab1\rapport\utkast1. Även kataloger kan adresseras på detta sätt, katalogen för lab1 har adressen Z:\USERS\Sten\ Expkursen\labbar\lab1. Det kan vara klokt att inte använda de möjligheter som bjuds i Windows-systemet att t ex använda svenska bokstäver i filnamn, eftersom det kan skapa svårigheter när man vill komma

13 2.2. ATT NAVIGERA PÅ DATORN 7 åt filer via mitt.su. Håll dig till samma regler som för variabelnamn i ComsolScript, dvs inga svenska tecken och inga mellanslag Aktuell katalog Varje gång vi vill spara en fil från ett program så finns det ett förstahandsalternativ, en katalog där programmet vi arbetar i sparar filer om inte användaren aktivt väljer en annan katalog. Denna katalog kallas aktuell katalog (engelska current directory ). Det är alltså här filer hamnar om vi inte aktivt anger en annan katalog. Exakt vilken katalog som är den aktuella kan variera från fall till fall. De flesta program har en katalog någonstans i den katalogstruktur som hör till programmet som används i standardfallet. Öppnar vi Microsoft Word och skapar ett nytt textdokument så sparas det i en katalog som hör till programmet, snarare än i en katalog som hör till dig som användare. Om vi däremot öppnar ett redan existerande dokument genom att dubbelklicka på det, gör några ändringar och sparar det under ett nytt namn så hamnar det i samma katalog som det ursprungliga dokumentet låg. Oftast bereder det oss inte någon större möda att hålla rätt på detta, när vi sparar ett dokument så öppnas ju en dialogruta där vi tydligt kan se i vilken katalog dokumentet hamnar, och vi kan välja en annan katalog. Det finns ett antal kommandon som har med kataloghantering att göra. Vi kan finna vilken katalog som är aktuell genom att i kommandofönstret skriva pwd. Vi kan se vilka filer som finns i det aktuella katalogen genom att skriva ls. För att ändra aktuell katalog ger vi kommandot cd katalognamn. När vi gör det kan vi använda två konventioner, antingen ger vi katalognamn som den absoluta adressen, dvs en adress av typen Z:\Expkursen\labbar\lab1, en adress som börjar med namnet på disken och sedan fortsätter hela vägen ned till den katalog eller fil vi är intresserade av. Alternativt kan vi ge den relativa adressen, det vill säga adressen relativt det som är aktuell katalog. Om den aktuella katalogen är Z:\Expkursen så kan vi ge den relativa adressen till samma katalog som ovan genom att skriva cd labbar\lab1. Ger vi en relativ adress så måste den börja med en katalog som ligger i det som för tillfället är den aktuella katalogen. En speciell variant av en relativ adress är.. (två punkter efter varandra) som pekar på den katalog närmast högre upp i strukturen. Om den aktuella katalogen är Z:\Sten\ Expkursen\labbar så kommer kommandot cd.. att ändra den aktuella katalogen till Z:\Sten\Expkursen Var skall jag spara filer Eftersom vi arbetar på datorer som används av många personer måste vi vara noggranna med var på hårddisken vi sparar data så att vi inte lämnar efter oss en massa skräp som andra inte är intresserade av. Likaledes är det kanske inte särskilt attraktivt att behöva återvända till exakt samma dator vid nästa arbetspass. Det finns egentligen bara två areor som inte är allmänna, det vill säga som används av alla som använder datorn. Den ena är kataloger på arbetsdisken. Arbetsdisken komer normalt att vara D-disken, och de kataloger som används för temporära filer heter antingen katalogen D:\Users, D:\Users\Students eller D:\Students. För tillfälligt sparande av personliga filer kan man skapa en underkatalog till denna katalog med sitt eget namn. Men kom ihåg att denna katalog bara kan ses på just denna dator. Använd därför den katalogen bara för temporär lagring under ett arbetspass. Filer som man vill spara för längre tid och kunna komma åt oavsett vilken dator man sitter vid skall sparas på den diskarea som hör till ditt SU-konto. För att ha en rimlig chans att hitta sina sparade data bör man ha en tydlig indelning i olika kataloger som var och en hör samman med ett tydligt delprojekt. Så till exempel bör du antagligen ha en katalog för varje kurs du följer. När vi kommit igång med labbandet är det antagligen bekvämt att ha en katalog som heter Laboration1 exempelvis med underkataloger data, m-filer, rapport mm. Under övandet med ComsolScript bör man därför skaffa sig kataloger som t.ex pass1 och sedan lägga dem i en katalog som kallas

14 8 KAPITEL 2. ATT KOMMA IGÅNG ComsolScriptovningar. Namn på katalogerna är givetvis helt fritt att välja, men det bör vara en logisk struktur där alla filer i en given katalog hör ihop, och har namn som gör att man förstår vad det är för fil utan att behöva öppna den och titta efter. Vartefter som du börjar bygga upp ett bibliotek av standardfiler (t ex sådana som beräknar normalfördelningen) som du tror att du kan komma att använda i olika projekt så bör du kanske spara dessa i en bibliotekskatalog som inte är direkt associerad med en specifik kurs eller laboration. Observera att alla filer som sparas på allmänna områden riskerar att raderas, antingen av misstag av någon av dina kollegor, eller också av systemansvariga när de städar upp på datorns hårddisk. 2.3 Komma igång med ComsolScript När du är inloggad kan du se ett antal små bilder - ikoner - på skärmen. Varje ikon är en symbol för ett objekt som finns i datorn. Det kan vara en fil, en mapp (katalog) eller ett program. Vad som händer när du dubbelklickar på en ikon beror på vad ikonen är en symbol för, är det t ex en symbol för en fil skapad i programmet Microsoft Word kommer programmet Microsoft Word att starta och öppna filen. På din skärm kommer du att ha en ikon som visar ComsolScripts symbol. Den ikonen är länkad direkt till programmet ComsolScript, så genom att dubbelklicka på den startar ComsolScript. En alternativ metod att starta ComsolScript är att klicka på den lilla fyrkanten längst ned, märkt med Windows-symbolen och ordet Start. Då öppnas en meny med ett antal alternativ varav ett är Program. Klickar du på den raden så öppnas en mindre meny (det är innebörden av symbolen ), där väljer du COMSOL 3.3a och i den meny som då kommer upp väljer du åter ComsolScript 1.1a. (om ComsolScript 1.1 inte syns så klicka på symbolen i botten av menyn så öppnas fler alternativ) och på den meny som då öppnas klickar du återigen ComsolScript ComsolScripts kommandofönster När ComsolScript har startat öppnas ett nytt fönster på din dator som kan se litet olika ut beroende på vilka inställningar som har sparats, men det blir i alla fall en version av det som kallas ComsolScripts skrivbord. Skrivbordet är uppdelad i flera mindre delar, den övre delen är ComsolScripts kommandofönster (Command Prompt). Kommandofönstret är det fönster genom vilket vi och ComsolScript kommunicerar med varandra, där skriver vi in kommandon och ComsolScript skriver ut resultat De första stegen - Hello World Det finns en slags tradition inom litteraturen om datorprogram och programmeringsspråk enligt vilken den första uppgiften man skall lösa när man ger sig i kast med ett nytt program eller språk är att få programmet att skriva Hello World på skärmen. Det här kan verka litet fånigt, men det är faktiskt inte så dumt. Visserligen är det vi kräver av själva programmet tämligen trivialt, men för att det hela skall fungera måste vi kunna en hel del saker om den miljö i vilket programmet fungerar: vi måste kunna logga in på den dator där programmet skall köras, hitta och starta programmet, få programmet att acceptera våra instruktioner om vad som skall utföras, köra programmet och till sist få programmet att kommunicera ett resultat, vanligtvis via en bildskärm. Kan vi klara av alla dessa uppgifter så kan vi i fortsättningen koncentrera oss på att få programmet att lösa mer och mer komplicerade uppgifter.

15 2.3. KOMMA IGÅNG MED COMSOLSCRIPT 9 Så har vi äntligen kommit fram till den punkt då vi är redo att säga hallå världen. Det som återstår är att instruera ComsolScript att skriva ut Hello World på skärmen. Det finns fler sätt att få ComsolScript att utföra kommandon, det enklaste som vi skall använda först är att skriva in kommandot i kommandofönstret. När vi skriver ett kommando i kommandofönstret och trycker på return så kontrolleras först att kommandot har en korrekt syntax, dvs att kommandot är skrivet enligt de regler som gäller för ComsolScripts kommandospråk så att programmet kan tolka instruktionen. Om kommandot vi skrivit in är korrekt utförs det och eventuella resultat visas i kommandofönstret. Det kommando vi skall använda för att säga hallå heter disp() efter engelskans display. Kommandot betyder helt enkelt att ComsolScript skall visa det som står inom parantesen (argumentet) i kommandofönstret på skärmen. Det som står inom parantesen kan vara en mängd olika storheter, men just nu är vi intresserade av något som kallas för textsträng. En textsträng är en sträng av tecken, omgiven av enkla citationstecken: ( ). ComsolScript behandlar en textsträng som en liten låda som man inte, i alla fall inte utan en del möda, kan göra något annat med än att spara och ta fram vid behov. Genom att ge textsträngen Hello World som argument till kommandot disp instruerar vi ComsolScript att skriva ut strängen på skärmen. Det sista steget blir alltså att ge kommandot disp( Hello World ) i kommandofönstret, som svar kommer ComsolScript att skriva Hello World i kommandofönstret, och vi har klarat av vår första ComsolScript-uppgift. C disp( Hello World ) Hello World ComsolScripts hjälpfunktion ComsolScript har en mycket omfattande on-linedokumentation, och kraftfullt stöd för hjälpfunktionen. Det finns fler sätt att hitta information på, så vi kommer under kursens gång att lära oss fler olika metoder att få hjälp. Den första metoden vi skall använda är att öppna och använda on-linedokumentationen. Det gör du genom att i ComsolScripts menyer gå in i Help, och där klicka på Help Desk (HTML/PDF). När du gör det kommer huvudsidan i ComsolScripts dokumentation att öppnas i din web-browser (om du inte redan har startat en browser så görs det automatiskt). På den web-sida som kommer upp -kallad COMSOL Documentation - kan du välja dels vilken del av dokumentationen du vill titta i, dels i vilket format. Du kan antingen klicka dig fram i en web-browser, eller öppna en pdf-fil. Om du vill skriva ut något avsnitt på papper kan det vara bekvämt att använda pdf-filen (men tänk på skogen, skriv inte ut hela manualen!), men för att snabbt bara söka ett svar på något bestämt problem är i allmänhet web-browsern en snabbare och bekvämare metod. I detta kompendium kommer jag om det inte speciellt anges referera till html-metoden. För ComsolScript har vi två avdelningar av dokumentationen att välja på: User s Guide och Command Reference. Users s Guide är den sektion vi oftast kommer att hänvisa till, där finns beskrivningar av hur programmet fungerar uppdelat på ett antal olika ämnen, den andra avdelningen, Command Reference, är en lista på alla kommandon du kan ge i ComsolScript, vad de gör och vilka argument du kan ge. Denna avdelning kan vara användbar om man t ex minns vad ett kommando heter, men inte kan minnas med vilka argument man kallar det (men minns man namnet på kommandot så är det alltid snabbare att bara skriva help kommandonamn i ComsolScripts kommandofönster). Klicka nu på HTML på raden Users s Guide! Du kommer då in i ComsolScripts dokumentation. Den visas hela tiden i ett fönster uppdelat i två spalter. Den vänstra spalten används för att hitta rätt bland dokumentationen, i den högra spalten visas hjälptexten. Låt oss börja med att titta på vänstersidan. Vi kan

16 10 KAPITEL 2. ATT KOMMA IGÅNG välja tre olika sätt att leta information genom att välja en av de tre knapparna längst upp i vänsterspalten: contents ger oss en innehållsförteckning där ämnena är grupperade i kapitel och underkapitel i olika nivåer ner till enstaka sidor. index ger oss tillgång till ett alfabetiskt ämnesregister där vi kan söka om vi vet namnet på det kommando eller det begrepp vi vill veta mer om. search ger oss möjlighet att söka i den samlade dokumentationen. Sökningen kan vara efter såväl enstaka ord som hela fraser. Låt oss nu ta en närmare titt på vad som möter oss under fliken contents. Schematiskt ser spalten under contents ut så här: De små boksymbolerna betecknar avsnitt i hjälpkatalogen. Genom att klicka på någon av dem öppnas nästa nivå av innehållsförteckningen. Klicka på COMSOL Script Basics! Då öppnas nästa nivå Using COMSOL Script som även den symboliseras av en liten bok. Det betyder att vi kan klicka på den för att komma en nivå djupare ned i dokumentationen. Gör vi det ser vi i nästa nivå en symbol för en textsida. Detta visar den lägsta nivån i hjälpsystemet. Klickar vi på en av dem (eller texten brevid symbolen) så visas den hjälptext som hör till detta avsnitt i det högra fönstret. En underavdelning som är öppnad kan stängas igen: klicka bara på boksymbolen så stängs motsvarande nivå. I det här kompendiet används en speciell syntax för att beskriva hur du skall navigera fram till givna avsnitt i hjälpdokumentationen. Låt oss t ex börja med att hitta det avsnitt i dokumentationen som beskriver ComsolScripts hjälpfunktion. Till den sidan når du genom att klicka på följande titlar: COMSOL Script Basics Using COMSOL Script Getting Help För att spara utrymme kommer vi i det här kompendiet att skriva?/comsol Script Basics / Using COMSOL Script / Getting Help för klick-serien ovan. När vi har läst färdigt i hjälpfönstret så kan det vara bekvämt att göra sig av med det så att vi lättare kan se kommandofönstret.det gör vi enklast genom att använda oss av en av symbolerna som visas högst upp till höger i varje fönster (alltså inte bara ComsolScripts) som visas på datorn. De tre symbolerna används för att hantera fönster i Windowsmiljön. Symbolen till vänster används för att förminska fönstret till en ikon. Prova att klicka på den, och du ser att fönstret försvinner och att vi obehindrat kan se de fönster som tidigare var dolda bakom hjälpfönstret. Det fina i kråksången är att fönstret finns kvar i skepnad av en liten på listen längst ned på datorskärmen. Genom att klicka på den symbolen återställs fönstret genast. Det här är ett bekvämt sätt att göra det enklare att hitta bland alla sina öppna fönster, de som inte används för tillfället minimerar man bara och de finns fortfarande lätt tillgängliga. Krysset längst till höger stänger det aktuella fönstret. Om detta är toppfönstret avslutas det program som öppnat fönstret. Klickar vi där i hjälpfunktionen så avslutas webbläsaren och vi får börja om från början och gå till hjälpmenyn om vi vill ha mer hjälp. Den mittersta symbolen slutligen används för att maximera ett fönsters storlek, klickar vi på den så förstoras fönstret så att det täcker hela datorskärmen. Det här kan vara bekvämt om man till exempel vill kunna läsa en hel sida i dokumentationen på skärmen utan att behöva bläddra upp och ner på skärmen. När vi är klara klickar vi bara en gång till på

17 2.4. BÖRJA RÄKNA 11 samma symbol och fönstret återtar sin ursprungliga storlek. Ett annat sätt att få hjälp är att i kommandofönstret skriva help kommando, där kommando byts ut mot namnet på det kommando man söker hjälp om. Detta leder ofta snabbare fram till den information man söker än att söka i dokumentationen. Svårigheten är bara att man måste ha en första idé om vad det är man vill ha hjälp med så att man har något vettigt att skriva in i stället för kommando Avsluta ComsolScript Det finns tre sätt att avsluta ComsolScript. Du kan antingen gå in i menyn File och där välja Exit COMSOL eller också trycka på ctrl Q (trycker samtidigt ner tangenten ctrl i nedre vänstra hörnet av tangentbordet och tangenten Q ). Det tredje sättet att sluta är att skriva Exit i ComsolScripts kommandofönster. 2.4 Börja Räkna ComsolScript som en räknedosa Enklare matematiska operationer görs precis som på en vanlig räknedosa (med normal, dvs ej omvänd polsk notation à la HP-räknare) med den lilla skillnaden att vi trycker på return i stället för = när vi vill beräkna resultatet. Pröva t ex att beräkna 2+2: C ans = Operatorer För aritmetik har ComsolScript de vanliga operatorerna (och en litet ovanlig ): + Addition - Subtraktion Multiplikation / Division \ Vänsterdivision 3 Exponentiering, till exempel x 2 = x 2 Komplex konjugering och transponering ( ) Paranteser för att definiera prioritetsordning Prioritetsordningen mellan operatorerna är den normala så att när man till exempel skriver 3 * 4 + 3*2 3 så beräknas först, 2 3, därefter de bägge produkterna och sedan summan Variabler I ComsolScript kan man liksom i alla högnivåspråk definiera variabler, och tilldela dessa värden. Dels underlättar det arbetet genom att man inte behöver upprepa inmatning av samma värde fler gånger, dels gör det instruktionerna enklare att följa och förstå - åtminstone om man väljer namn på konstanterna som är begripliga. Antag som ett exempel att en läskeblask kostar 10 kronor, en varmkorv 12 och en kaffe 4. Om då Kalle köper en korv och 3 Vänsterdivision förklaras i avsnitt Notera att ComsolScript ignorerar mellanslag i alla uttryck. Det spelar alltså ingen roll om vi skriver 2+3+4*5 eller *5 eller * 5. För att det skall bli enklare att följa uttrycken så är det mellersta sättet att skriva (som ansluter till prioritetsordningen) att föredra.

18 12 KAPITEL 2. ATT KOMMA IGÅNG fyra kaffe, Lisa en läskeblask och två korvar och Ludde tre korvar och två läskeblask, så kan vi räkna ut vad var och en fick betala på följande sätt (minns att varje rad måste avslutas med return för att ComsolScript skall utföra kommandot): C laskeblask = 10 laskeblask = 10 C korv = 12 korv = 12 C kaffe = 4 kaffe = 4 C Kalle = 2*korv + 4*kaffe Kalle = 40 C Lisa = laskeblask + korv Lisa = 22 C Ludde = 3*korv + 2 *laskeblask Ludde = 56 I exemplet ovan är laskeblask, korv, kaffe, Kalle, Lisa och Ludde alla variabler. Variabler kan alltså tilldelas värden antingen explicit (uttryckligen) genom t ex korv = 12, eller genom en beräkning som t ex Kalle = 2*korv + 4*kaffe. Observera att man som alltid måste vara noga med syntaxen, eller programmeringsspråkets grammatik. Det går inte att skriva C Dyrt = 3 korv Prova! Du kommer att få ett prov på hur ComsolScript vänligt, men inte särskilt diskret hjälper en tillrätta när man får syntaxen fel. Glömmer man bort vad en läsk kostar kan vi fråga ComsolScript: C laskeblask laskeblask = 10 En fallgrop man får akta sig för är att variabler vars värde beräknas, som t ex Kalle ovan behåller det värde som variabeln tilldelats senaste gången den beräknas, även om en av de variabler som ingår när man beräknar variabelns värde ändras. Ett exempel: C korv = 14 korv = 14 C Ludde Ludde = 56 Värdet på variabeln Ludde ändras alltså inte när värdet på korv ändras, när värdet på Ludde beräknades gällde det gamla värdet på korv och värdet på Ludde förblir oförändrat så länge vi inte räknar om det med C Ludde = 3 * korv + 2 * laskeblask Ludde = 62 Variabelnamn i ComsolScript måste börja med en bokstav, följd av en godtycklig kombi-

19 2.4. BÖRJA RÄKNA 13 nation av bokstäver (ej å, ä eller ö), siffror eller understrykning ( ), ett variabelnamn kan alltså inte innehålla mellanslag. ComsolScript ser skillnad på stor och liten bokstav, ALLA, Alla och alla är alltså tre olika variabler. Om man vill skapa variabelnamn som är sammansättningar av mer än ett ord finns två konventioner: antingen binder man ihop med ett understrykningstecken, eller också skriver man med små bokstäver, men inleder nya ord med versal. Alltså antingen lagsta strom eller LagstaStrom. Vilket du väljer att göra är godtyckligt, men det är bra om man försöker att hålla sig till ett sätt att skriva. Det är ju enkelt att komma ihåg att variabeln är lägsta ström, men om man på vissa ställen skriver lagsta strom och på andra LagstaStrom så kommer man att hänvisa till olika variabler på olika ställen i sin kod. Man bör därför bestämma sig för en konvention och sedan hålla sig till den. Det kan också vara bra att undvika de svenska bokstäverna även om det program man arbetar med stöder dessa. När man skriver många program skaffar man sig vanor, och det är bra om vanorna fungerar i så många olika sammanhang som möjligt Konstanter ComsolScript har ett antal inbyggda konstanter: pi konstanten π = i roten ur -1. j samma som i. eps 2 52 den minsta relativa skillnaden mellan två rationella tal, eller uttryckt på annat sätt: det minsta tal man kan addera till 1 och få ett tal som är större än 1. realmin , det minsta reella talet som kan representeras på datorn. realmax , det största reella talet som kan representeras på datorn. Inf Oändligheten som resultat av en väl definierad matematisk operation, t ex 10/0. NaN Icke definierat (Not a Number), t ex resultatet av en operation där resultatet inte är definierat, t ex 0/0 eller Inf - Inf. ans Resultatet av det senaste kommandot. Av dessa kommer vi kanske inte att använda mer än pi (och möjligen ans) i den här kursen, men det är bra att veta att de finns, i vissa lägen kan ComsolScript komma att använda dem i felmeddelanden och då är det bra att veta vad till exempel NaN står för. Vi har här valt att kalla dessa tal för konstanter eftersom det är så vi betraktar och använder dem. Rent tekniskt är de dock implementerade som inbyggda funktioner vilket har som en konsekvens att man kan definiera om dem: C pi pi = C pi = 4.75 pi = De är dock litet mer stabila än vanliga variabler av typ Kalle som vi själva definierar. En variabel vi har definierat kan tas bort så att ComsolScript inte längre minns något om dem genom att ge commandot clear: C clear Kalle Gör vi samma sak med en av konstanterna i tabellen ovan så återställs värdet till det fördefinierade som visas i tabellen.

20 14 KAPITEL 2. ATT KOMMA IGÅNG 2.5 Miljön i ComsolScript Städa upp kommandofönstret: tyst input, fortsättningsrader När man börjar komma igång litet med att använda ComsolScript tycker man ofta att kommandofönstret blir litet ostrukturerat, alla kommandon man ger upprepas slaviskt, vissa värden ges utan decimaler, andra med en lång rad nollor på slutet. Det finns ett antal kommandon som hjälper en att skräddarsy vad vi ser i kommandofönstret. För att stänga av ekot, det vill säga för att få ComsolScript att avstå från att rapportera resultatet av varje kommando vi skriver in räcker det med att avsluta raden med semikolon. Egentligen är det inte raden, utan kommandot som avslutas med semikolon. Distinktionen är viktig, eftersom användandet av semikolon gör det möjligt att skriva mer än ett kommando på varje rad. Denna finess bör användas med omdöme, driver man det för långt kan det bli nästan omöjligt att se vad man gjort, men rätt använt kan det istället göra det lättare att följa med: C laskeblask = 10; korv = 12; kaffe = 4; C Kalle = 2*korv + 4*kaffe Kalle = 40 ser mycket bättre ut än förra gången vi räknade ut Kalles utgifter. Man bör försöka undvika alltför långa kommandon, men ibland kan man behöva skriva kommandon som inte får plats på en rad, som till exempel: Y = ((3.5*(laskeblask+korv)-kaffe)+sin(pi-2.75*Kalle)/korv 2 +(45-kaffe) 3 Om vi behöver dela upp ett kommando på fler rader kan vi göra det: För att tala om för ComsolScript att kommandot inte är slut när raden är slut, vilket är vad ComsolScript normalt antar, så måste den rad som har en fortsättning avslutas med tre punkter omedelbart följda av return: C Y = ((3.5*(laskeblask+korv)-kaffe)+... sin(pi-2.75*kalle)/korv 2+(45-kaffe) 3)) är alltså ett kommando även om det sträcker sig över mer än en rad. För att denna finess skall fungera måste man se till att det som står före... inte är ett korrekt, avslutat kommando: C Y = fungerar, medan C Y = inte fungerar Format och avrundning I exemplen vi sett så här långt har ComsolScript genomgående skrivit ut heltal utan decimaler och decimaltal med fyra decimaler. Det senare gäller såväl i de fall där vi har definierat en variabel genom att skriva in bara en decimal som t ex 0.5, som i de fall då ComsolScript visar ett tal med oändligt lång decimalutveckling som pi eller 1/3. När vi kommer till mycket stora eller mycket små tal slår ComsolScript om till att använda scientific notation, där tal representeras som ett decimaltal multiplicerat med en lämplig tiopotens. I denna notation skrivs till exempel som 1.602e-19. Hur ComsolScript skall formattera de tal som visas kan påverkas genom kommandot format. För att se vilka alternativ som finns kan vi gå till help fönstret och söka på

21 2.5. MILJÖN I COMSOLSCRIPT 15?/COMSOL Script Basics/Using COMSOL Script/Numbers and Arithmetics /Output Formats Eller enklare genom att bara skriva C help format Lägg särskilt märke till kommandot format compact som tar bort alla dessa blanka rader som ComsolScript spottar ur sig. I fortsättningen kommer vi att använda detta format i det här kompendiet ComsolScripts Workspace Vi har nu sett hur variabler som vi definierar, till exempel laskeblask i avsnitt 2.4.3, lever kvar. Långt efter det att vi definierat dem kan vi använda dem i nya uttryck, och vi kan se vilka värden de har genom att skriva deras namn i kommandofönstret. Det ställe där dessa variabler lever är en del av datorminnet som ComsolScript reserverar för variabler och som kallas workspace. Under långa ComsolScript-sessioner kan ComsolScripts workspace bli ganska tätbefolkad, man kan lätt samla på sig en stor mängd variabler. Som vi snart kommer att se kan ett variabelnamn beteckna inte bara tal, utan vektorer och matriser med hundratals element. Ett sätt att se vad som finns i workspace är att i kommandofönstret ge kommandot whos. Ett annat sätt att se vad som finns i ComsolScripts workspace är att i nedre delen av Desktop klicka på fliken Work Space. Du får då upp samma information, plus värdet för de variabler som är skalärer. Vi förstår nu vad kommandot clear gör: genom att skriva clear Kalle tar vi bort variabeln Kalle från ComsolScripts workspace, vilket gör att ComsolScript helt glömmer bort att Kalle existerat. Du kan prova detta genom att skriva clear xxx i kommandofönstret för någon av de variabler som syns i workspace-fönstret och se vad som händer Play it again Sam - att upprepa kommandon I Kalle Ankas Julafton finns en film som visar en husvagnstur med Kalle Anka, Musse Pigg och Långben. I en av scenerna sitter Långben och äter en majskolv. När han gör det för han munnen över majskolven, varvid det hörs ett konstigt knattrande ljud. När han kommit till slutet av majskolven hörs ett pling, varvid han flyttar huvudet till andra sidan av majskolven och proceduren börjar om. När mina barn ser det här skrattar dom, men dom har ingen aning om vad det hela anspelar på: förr i tiden fanns det skrivmaskiner! När författaren var ung var skrivmaskiner nånting ganska häftigt. Med ganska mycket möda kunde man få ett brev eller ett dokument att se jätteproffsigt ut. Kruxet var bara att skrivmaskiner var fullkomligt skoningslösa - skrev man fel var det bara att riva ut pappret och börja om (på hemma-nivå kunde man förstås backa och kryssa över med ett antal XXXX, men det förtog ganska mycket av effekten). Det fanns speciella suddgummin för skrivmaskier, stenhårda skivor som antingen rev sönder pappret i småbitar eller smetade ut skriften över hela pappret. Så småningom kom TipEx, en vit färg man kunde måla över sina misstag med, och sedan skriva ny text ovanpå. Det blev med ens möjligt att hyfsa till dokument om man gjorde något enstaka fel, men riktigt proffssnyggt blev det inte, och man kunde inte heller ändra hela stycken mitt i ett färdigt dokument. De av oss som har upplevt denna period kan till fullo uppskatta vad ankomsten av små billiga datorer betytt för ordbehandlingen: ändringar blir triviala, felstavningar korrigeras enkelt (ibland till och med automatiskt), man kan återanvända gamla dokument, byta ut stycken helt godtyckligt - aldrig tidigare har så mycket text kunnat produceras med så liten möda! Det vore naturligtvis skönt att kunna få en räknebehandlare som har alla dessa företräden. Har man väl skrivit in

22 16 KAPITEL 2. ATT KOMMA IGÅNG Y = ((3.5*(a+b)-c)+sin(phi-2.75*D)/epsil 2+(455-abba 3)/ (cos(4+pi)-2.75) bara för att komma på att det borde ha varit Y = ((3.5*(a+b)-c)+sin(phi-2.75*B)/epsil 2+(455-abba 3)/ (cos(4+pi)-2.75) så kan man bli litet trött, och önska sig att ComsolScript bar sig åt som en ordbehandlare. Om man sedan kommer tillbaks en vecka senare för att räkna om något på en lab-rapport man fått åter på så önskar man verkligen att man kunde trolla tillbaks vad man gjorde förra veckan. ComsolScript, och andra moderna beräkningsprogram, svarar upp till dessa förväntningar. Dels kan man kan återkalla sina tidigare kommandon och redigera dessa i kommandofönstret innan man exekverar dem igen. Dessutom kan man spara hela sekvenser av kommandon i så kallade M-filer som man sedan kan återkalla, eventuellt redigera, och köra igen Att återkalla kommandon Det enklaste sättet att få chansen att göra om något vi gjort nyligen är att trycka på upp-pilen på tangentbordet. När vi gör det visas det senast utförda kommandot i kommandofönstret. Trycker vi på pilen en gång till kommer kommandot innan dess och så vidare. När vi knappat oss fram till det kommando vi vill göra om så är det bara att trycka på return så utförs kommandot en gång till. Oftast så återkallar man ju ett kommando för att man gjort något smärre fel som man vill korrigera, vilket är lätt gjort. När man bläddrat fram det kommando man vill göra om kan man flytta sig in i raden genom att trycka på vänster-pil. När man gör det rör sig pekaren in över raden, när den står till höger om det man vill ändra kan man radera ut delar av kommandot genom att trycka på delete-knappen. När man suddat det som är fel är det bara att skriva in vad som skall stå i stället. När man är nöjd är det sedan bara att trycka på return. Oavsett om pekaren står mitt i raden så kommer ComsolScript att utföra kommandot som står på hela raden. Man kan också ta sig in i raden genom att bara flytta pekaren till något ställe i raden genom att klicka. Prova genom att t ex skriva C y = sin (2 * pi) och sedan återkalla kommandot och till exempel ändra 2 till 3 eller sin till cos Var söker ComsolScript efter filer ComsolScript har ett antal kommandon som innebär att programmet skall ladda in innehållet i en fil till workspace. Man kan till exempel genom att skriva load filnamn läsa in hela innehållet i filen med namn filnamn in i ComsolScripts workspace, man kan också genom att bara skriva filnamn instruera ComsolScript att läsa in och utföra de kommandon som finns sparade i filen filnamn.m. För att detta skall fungera krävs givetvis att ComsolScript hittar filen i fråga. Det fungerar om den fil vi anger ligger i den aktuella katalogen, men dessutom har ComsolScript en lista med kataloger där den söker efter de filer vi anger i våra kommandon. En sådan lista kallas sökväg (eng. search path). När vi skriver in ett filnamn så kommer ComsolScript att först leta efter filen i den aktuella katalogen, därefter söks filen i alla kataloger som finns med i sökvägen, i den ordning som katalogerna står i sökvägen. Det kan alltså vara viktigt i vilken ordning katalogerna är listade i sökvägen, om det finns flera filer med samma namn. För att arbeta med sökvägen använder vi kommandot path. Om vi bara ger kommandot path listas vilka kataloger som för närvarande ingår i sökvägen. Skriver vi ett filnamn kommer ComsolScript att söka efter filnamn.m i de kataloger som listas i sökvägen i den ordning de listas där. Vi kan förändra listan över sökvägar på två sätt, antingen genom att ge kommandot path(sträng1), där STRÄNG1 är en textsträng som anger ett antal kataloger, separerade med antingen ; (i Windows), eller : (i alla andra operativsystem). Vi kan också ge kommandot path(sträng1, STRÄNG2) vilket resulterar i

23 2.6. M-FILER 17 att sökvägen ges av unionen av STRÄNG1 och STRÄNG2. Ett viktigt specialfall är när en av strängarna är path vilket anger de redan existerande sökvägarna, addpath(sträng1) lägger till STRÄNG1 före de sökvägar som redan existerar. Du kommer säkert att finna att det oftast är väldigt bekvämt att se till att ditt SU-konto finns i den definierade sökvägen. Ett annat sätt att se hur sökvägen ser ut är att klicka på fliken Path längst ned i ComsolScripts desktop. Där ser du alla kataloger som finns med i sökvägen och i vilken ordning. Om du vill ändra på ordningen så klicka på en katalog i fönstret. Genom att klicka på antingen Move Up eller Move Down kan du sedan flytta den givna katalogen upp eller ner i sökvägen. Klickar du på Save sparas den aktuella inställningen så att ComsolScript automatiskt läser in den nästa gång programmet startar. Det här fungerar dock bara så länge som man arbetar på samma dator, om man byter till en annan dator så finns inte längre dessa inställningar tillgängliga. Man kan komma runt detta genom att skapa en m-fil, setmypath.m som sätter alla de sökvägar man vill ha. Exempel på hur denna fil kan se ut: % setmypath.m % Sätter sökvägen till dina filer. % Sätt sökvägarna path( Z:\expmet\funktionsfiler,path); path( Z:\expmet\labb1,path); path( Z:\expmet\labb2,path); path( Z:\expmet\datorovningar,path); %Skriv ut sökvägarna på skärmen path Byt ut funktionsfiler, labb1, etc mot namnen på dina kataloger. Spara filen i din toppkatalog (alltså precis under abcd1234 ). Sätt sökvägen till dina filer genom att skriva i ComsolScrips prompt: cd Z:\ setmypath 2.6 M-filer Det absolut smidigaste sättet att använda ComsolScript är att konsekvent jobba med så kallade m-filer. I en m-fil kan man skriva in alla kommandon man kan skriva i ComsolScripts kommandofönster och spara dessa till hårddisken. När man sedan skriver namnet på m-filen i ComsolScripts kommandofönster så utförs alla kommandon som står i filen och resultatet visas i ComsolScripts kommandofönster. Genom att utnyttja m-filer kan vi spara en otrolig mängd arbete. Vi kan till exempel skriva in alla rådata från en laboration i en m-fil, sedan steg för steg skriva in alla operationer för att göra mätvärdesbehandling på laborationen. Därefter skriver vi in de kommandon som krävs för att producera de grafer vi skall redovisa i laborationsredogörelsen. Vi kan när som helst i den här processen ta paus, spara filen till disk och fortsätta vid ett senare tillfälle. Det är också enkelt att ändra ett enstaka kommando om man har fått någon formel om bakfoten, eller om man vill ändra någon detalj i ett histogram. Det bästa man kan göra som student är att bygga upp ett förråd av små m-filer som gör avgränsade uppgifter, till exempel en anpassning till en andragradskurva eller en beräkning av chi-kvadrat. Eftersom en m-fil kan innehålla kod-avsnitt som kallar en annan m-fil kan filer som utför klart definierade uppgifter enkelt återanvändas när liknande problem skall lösas.

24 18 KAPITEL 2. ATT KOMMA IGÅNG Editera m-filer Det finns inget som säger att du måste skapa de m-filer du kommer att använda inne i ComsolScript. I princip kan du starta vilken editor som helst och i den skapa en m-fil som du sedan sparar på disk, i text-format. Du kan sedan köra den inifrån ComsolScript, förutsatt att filen sparas någonstans i ComsolScripts sökväg. Oftast är det naturligtvis enklast att starta editeringen inifrån ComsolScript. Detta kan göras på två sätt, antingen genom att i kommandofönstret skriva edit, eller genom att i menyn File välja New Editor. I bägge fallen öppnas ett editor-fönster högst upp i ComsolScripts desktop (om du bara ser en rad och inte ett helt fönster så klicka på fönstersymbolen längst till höger på raden) ComsolScripts inbyggda editor Den inbyggda editorn fungerar på ungefär samma sätt som de flesta andra editorer. I Edit - menyn har du tillgång till kommandona cut, copy and paste som har de vanliga funktionerna av att klippa ut, kopiera och klistra in. Du kan också söka och byta ut text. I menyn File kan du sedan välja mellan New - öppnar ett nytt tomt editorfönster Open - öppnar en redan existerande fil i ett nytt editorfönster. Close - stänger editorfönstret. Save - sparar innehållet i editorfönstret till en fil på disken. Save As - sparar innehållet i editor-fönstret till en nydöpt fil på disken. Save all -sparar alla öppna editor-fönster i varsin fil. Print - skriver ut innehållet i editor-fönstret. För att t ex skapa en fil som säger hej till oss när vi kör den skriver vi edit. Du får då upp ett nytt fönster med titeln Untitled. Du kan nu börja skriva in din ComsolScript-kod i fönstret, skriv t ex disp( Hello World ) och sedan spara filen som Hej.m Att spara en m-fil på disk Hela poängen med att skapa en m-fil är ju att den skall sparas på hårddisk. För att göra det går vi, oavsett vilken editor vi arbetar i, in i File menyn och väljer Save. Om filen vi vill spara är nyskapad och inte har något namn så kommer editorn att öppna en dialogruta där vi kan ange filens namn och i vilken katalog den skall ligga. Har vi ändrat i en redan existerande fil så sparas den ändrade versionen med samma namn som den ursprungliga. Observera att det här innebär att den ursprungliga versionen är förlorad för gott. Det kan därför vara klokt, särskilt om man vill ändra i en komplicerad redan fungerande fil, att istället för att spara den med samma namn som tidigare spara en kopia med ett annat namn så att den ursprungliga, oförändrade versionen av filen finns kvar på hårddisken. Detta gör man genom att istället för att ange Save väljer Save as... under File -menyn. Vi får även i det här fallet upp dialogrutan där vi kan välja namn och katalog för filen. När man väl har introducerat alla ändringar och fått dem att fungera som man önskar kan man slänga den gamla filen och döpa om den nya till det gamla namnet om man så önskar.

25 2.6. M-FILER Läsa in och köra en m-fil Enklaste sättet att köra en m-fil är att bara skriva dess namn i kommandofönstret. Om filen finns antingen i den aktuella katalogen eller i någon katalog i sökvägen (se avsnitt 2.2.3) 5 så kommer de kommandon som finns i filen att utföras. Prova: C Hej Hello World Kommentarer I princip är det ingen skillnad på hur ComsolScript hanterar kommandon som skrivs in i kommandofönstret och kommandon som läses in via en m-fil. Det finns ändå ett antal kommandon som man knappast använder i kommandofönstret men som spelar en stor roll när vi jobbar med m-filer. Viktigast av dessa är kommentarer. Kommentarer inleds med ett procenttecken % och följs av godtycklig text. När ComsolScript utför kommandon ignorerar programmet procenttecknet och vad som följer efter det. Syftet med kommentarer är att göra det enklare att titta i en m-fil och kunna följa med vad programmet gör, och hur. Detta är användbart både om man använder program skrivna av andra, men också när man ett år senare (kom ihåg att ni skall spara alla era gamla m-filer!) återvänder till filer man själv har skrivit, det kan vara nog så svårt att minnas vad man själv tänkt och gjort! Kommentarer används 1. som en varudeklaration i början av ett program (i det här sammanhanget är en m-fil att betrakta som ett program) för att beskriva vad programmet gör, vad det heter, vem som har skrivit det och när, samt om programmet behöver någon speciell typ av indata eller levererar någon speciell typ av ut-data. 2. för att beskriva vad de viktigaste variablerna står för 3. vad de olika programstegen utför Det går nästan alltid att med ett snabbt ögonkast skilja ett program skrivet av en van programmerare från ett skrivet av en nybörjare, även om man inte begriper ett skvatt av vad programmet gör. Eftersom en av skillnaderna ofta är mängden kommentarer - en duktig programmerare skriver mycket kommentarer - så kan man ibland frestas att skriva en kommentar även för triviala steg, vilket inte underlättar läsningen. Exakt hur mycket och vilka avsnitt som skall kommenteras kan vara en smaksak, men ett exempel som författaren tycker är rimligt kan vara: 5 Om det finns fler filer med samma namn i olika kataloger som finns i sökvägen så väljer ComsolScript den som kommer först. Om resultatet inte blir vad man tänkt sig kan det bero på att det finns en namne till den fil vi egentligen vill köra, och att den hamnar före i kön.

26 20 KAPITEL 2. ATT KOMMA IGÅNG % % Volume.m % Beraknar volymen for cylindrar baserat pa % matt radie och angiven hojd % Sten Hellman % Radie = [ ] Hojd = [ ] Volym = pi*radie.^2.* Hojd % Felet i radien ar konstant 0.3, felet i hojden % ar 10% av matetalet DeltaRadie = 0.3 * ones(1,6) DeltaHojd = 0.1 * Hojd DeltaVolym = Volym.* sqrt( (DeltaRadie./... (2*Radie) ).^2 +(DeltaHojd./ Hojd).^2) Däremot vore till exempel % Volymen ar pi * r-kvadrat * hojden Volym = pi*radie.^2.* Hojd en överdrift som knappast gör det enklare att följa koden. Ett annat användningsområde för kommentarer är att man vid felsökning genom att kommentera kan få programmet att hoppa över delar av koden. Man kan helt enkelt kommentera bort olika delar av ett program som inte fungerar tills felet försvinner. Då vet man i alla fall i vilket avsnitt felet finns In- och utmatning av data till M-filer En annan skillnad mellan att skriva m-filer och ge kommandon direkt i kommandofönstret är hur data matas in i ComsolScript och hur de presenteras för den som utför ett kommando. Kommandot disp är ju till exempel oftast inte särskilt meningsfullt i kommandofönstret. Att få ComsolScript att skriva Hello World genom att själv skriva precis samma sak i argumentet till kommandot disp är ju måttligt intressant. I en m-fil som man kör är kommandot däremot mycket nyttigt eftersom det kan användas för att skriva information i kommandofönstret som kan ange resultat av beräkningar eller ange att vi skall mata in information till ComsolScript. Vi kommer snart att märka att det finns ett behov av att kunna mata in data till en körande m-fil och att skriva ut data från filen till kommandofönstret. Man kan till exempel tänka sig att m-filen i föregående avsnitt istället för att beräkna volymen av ett antal cylindrar där vi skriver in radie och höjd i m-filen skriver en mer allmän m-fil som kan användas för att beräkna volymen av en godtycklig cylinder. En sådan m-fil behöver då ha en metod för användaren att mata in ett godtyckligt värde på radien och höjden, och en metod att mata ut resultatet från beräkningen i kommandofönstret. Vi kommer att lära oss hur det går till i avsnitt 8.2 där vi går igenom så kallad formaterad in- och utmatning. Men redan innan vi lärt oss detta kan vi kommunicera med m-filer genom att utnyttja att m-filer och kommandofönstret använder samma workspace. Om vi till exempel kör m-filen ovan för att beräkna cylindervolymer så kommer variabeln Volym som innehåller resultatet att finnas kvar i workspace. Vi kan alltså genom att skriva Volym i kommandofönstret se resultatet av beräkningen. Omvänt kan man tänka sig att ta bort raden

27 2.6. M-FILER 21 Radie = [ ] ur m-filen och istället innan vi kör m-filen tilldela värden i kommandofönstret. Eftersom Radie då existerar i workspace kommer m-filen att fungera precis som vanligt. På det sättet går det enkelt att köra om filen med olika värden på radien, det är bara att skriva in nya värden på Radie Paus i utskriften Ibland vill man att en m-fil som kör skall stanna upp så att man hinner se delresultat. Speciellt om man visar fler plottar i samma figurfönster och vill hinna titta på en plot innan programmet skriver över den med nästa. Då kan vi använda kommandot pause. Ger vi kommandot utan argument i en m-fil så gör exekveringen av filen halt när den kommer till pause-kommandot och programmet skriver ut pause i kommandofönstret. Programmet fortsätter att köra när vi trycker ned en godtycklig tangent. Vi kan också ge kommandot med ett sifferargument, programmet gör då en paus i det antal sekunder som ges i argumentet Namngivning av M-filer En viktig detalj att tänka på är att en m-fil inte skall ha samma namn som en variabel som förekommer i filen. Det är lätt hänt att man ger både filen och den viktigaste variabeln ett namn - samma namn - som anknyter till den uppgift programmet skall lösa. Det här kan leda till mycket förvirrning. Antag till exempel att vi i avsnitt hade kallat m-filen volym. Första gången vi kör filen går allt väl, men om vi därefter ändrar någon liten detalj i programmet och försöker köra om så ser vi antagligen inte alls det vi förväntar oss. Orsaken är att programmet själv skriver in vektorn volym i ComsolScripts workspace. Nästa gång vi försöker köra programmet med samma namn kommer ComsolScript inte att tolka volym som en referens till programmet, utan till vektorn och som respons på kommandot kommer den att skriva ut innehållet i vektorn. Om ni någon gång sitter och försöker ändra i en m-fil men förändringarna inte slår igenom kan det därför vara idé att kontrollera om det finns en variabel med samma namn som m-filen.

28 22 KAPITEL 2. ATT KOMMA IGÅNG 2.7 Övningsuppgifter Definiera följande variabler i ComsolScripts workspace: a = 5 b = 3.7 c = π/3 d = Beräkna a) a + b b) sin(c) c) b/d 2. Ge lämpligt kommando så att du kan se vilken den tolfte decimalen i d sin(a) är. 3. Lägg till sökvägen till ditt hemkonto med hjälp av kommandot path! 4. Skapa en m-fil som skriver ut Hej ditt namn på skärmen, när den körs. Spara filen på ditt konto, i en lämplig mapp (förslagsvis /expkurs/datorovningar/ovning1) 5. Skriv en m-fil, setmypath.m, som sätter sökvägen till alla kataloger du kommer att behöva. Se avsnitt Skapa en m-fil som skriver ut heltalen mellan 1 och 5, med 3 sekunders fördröjning mellan varje utskrivet tal.

29 Kapitel 3 Vektorer och matriser Inbyggda funktioner I det här passet skall vi lära oss hur vi kan hantera vektorer och matriser, samt hur man gör för att skriva program som utför monotona upprepade arbetsuppgifter med enkla kommandon. Vi skall även gå igenom hur man skriver program som kan utföra olika operationer beroende på värdet på vissa kontrollparametrar. 3.1 Litet om vektorer I ComsolScript definieras vektorer i stort sett som i matematiken: en ordnad följd av tal. Att vi skriver i stort sett beror på att en ComsolScript-vektor utöver tal också kan innehålla text-strängar, vi återkommer senare till denna typ av vektorer och koncentrerar oss nu på vektorer och matriser som endast innehåller tal. När vi talar om vektorer i fysiken så är vi ofta inte så noga med distinktionen mellan radvektor och kolumnvektor (vi använder för det mesta bara radvektorer). I ComsolScript kommer vi att göra skillnad mellan radvektorer och kolumnvektorer, liksom i fysiken är standard -vektorn en radvektor. Kolumn-vektorer skapas genom att transponera en radvektor. ComsolScript betraktar vektorer som specialfall av matriser, en radvektor med n element är en (1 n) matris, en kolumnvektor är en (n 1) matris Skapa vektorer Det enklaste sättet att skapa en radvektor är genom direkt tilldelning, kommandot C x = [ ]; skapar en radvektor med fyra element och ger dem de angivna värdena. Tecknen [ och ] kallas hakparanteser, du skriver dem genom att samtidigt som du trycker ned tangenten Alt Gr till höger om mellanslagstangenten trycka ned 8 resp 9. Vill vi se vilka värden vektorn har skriver vi som vanligt bara namnet på vektorn i kommandofönstret. Vi kan adressera enskilda element i vektorerna genom att ge ett index som pekar på ett av elementen i vektorn, x(1) är första elementet i vektorn x osv. 23

30 24 KAPITEL 3. VEKTORER OCH MATRISER INBYGGDA FUNKTIONER Vektorer kan också tilldelas värden genom beräkning C y = 7.2; C clear x C x = [y y/2 y+4]; C x x = Här ser vi hur ComsolScript kan beräkna värden för enskilda vektorelement ur givna uttryck. Vill vi skapa en kolumnvektor så gör vi det genom att transponera en radvektor med operatorn. 1 C a = [ 1 2 4] a = C b = a b = Alternativt kan man ge transponeringsoperatorn direkt i tilldelningssatsen: b = [ ] markerar direkt att b skall vara en kolumnvektor Räkna med vektorer Vektoralgebran i ComsolScript fungerar som vi är vana vid från matematiken: C a = [1 2 5]; C b = [2-1 3]; C 3*a ans = C a + b ans = C c = a(3) - 7*b(2) ans = 12 C a + 3 ans ComsolScript klarar också av skalärpodukt av vektorer, under förutsättning att man ställer upp det som en matrismultiplikation, det vill säga som en multiplikation av en (1 n) matris med en (n 1)-matris för att få en (1 1)-matris: C c = a * b c = 15 En annan litet speciell egenskap är att vi kan applicera vissa standardfunktioner på en vektor 1 Det finns två snarlika tecken på tangentbordet, akut accent och enkelt citationstecken. Operatorn vi skall använda är det senare tecknet, som delar tangent med * nära retur-tangenten

31 3.2. LITET OM MATRISER 25 och få en ny vektor: C x = [ 0 pi/4 pi/2 3*pi/4 ]; C y = sin(x) y = Elementvisa operationer Ett begrepp som är nytt relativt matematikens vektoralgebra är de elementvisa operationerna. Detta är normala matematiska operationer som utförs på varje element i vektorn i stället för på vektorn själv. Ett exempel är kvadrering, om a är en vektor så betecknar a 2 skalärprodukten av vektorn med sig själv. Många gånger vill vi dock göra saker som att från en vektor med x-värden skapa en vektor med motsvarande x 2 -värden. Det vi vill göra är ju då inte att ta kvadraten av vektorn x, utan kvadraten av varje element i vektorn x och skapa en ny vektor med dessa som element. Detta gör man genom att använda elementvis exponentiering. Vi kan också utföra till exempel elementvis multiplikation mellan två vektorer. En sådan produkt är inte detsamma som skalärprodukten av vektorerna, utan en ny vektor där varje element består av produkten av motsvarande element i de två ursprungliga vektorerna. Elementvisa operatorer har samma symbol som de vanliga operatorerna omedelbart föregånget av en punkt. Vi har t.ex. C clear all; C x = [ ]; C y = x. 2 y = C x.* y ans = C a = [ ]; C a./ y ans = C 1./ x ans = Litet om matriser ComsolScript har en väl utvecklad uppsättning specialfunktioner för matris-algebra. Vi kommer snart att återvända till det, nu börjar vi med att lära oss att skapa matriser och göra några enkla beräkningar med dem.

32 26 KAPITEL 3. VEKTORER OCH MATRISER INBYGGDA FUNKTIONER Skapa matriser Det enklaste (men ofta långt ifrån minst arbetskrävande) sättet att skapa en matris är att skriva in data rad för rad, med hakparantes i början och slutet: C A = [ ] A = Ett enklare sätt att skriva in samma sak är att avgränsa rader med semikolon: C clear all C A = [1 2 4 ; ; 2-1 0]; ger exakt samma resultat. Man kan också skapa matriser ur vektorer: C clear all C b1 = [1 2 4]; b2 = [1 0 3]; b3 = [2-1 0]; C B = [b1 ; b2; b3 ] B = För att komma ihåg vilka element som hamnar var i matrisen kan det vara bra att se saken litet formellt: i raden där vi skapar matrisen B skapar vi rent formellt en 3 1 matris (eller om man så vill en kolumnvektor) där varje rad består av ett element som i sin tur är en vektor, tredje raden blir då lika med vektorn b3 osv. Vi kan vända på steken: C clear all C c1 = [1 ; 2 ; 4]; C c2 = [1 ; 0 ; 3]; C c3 = [2 ; -1 ; 0]; C C = [c1 c2 c3 ] C = Här skapar vi formellt en (1 3)-matris (en radvektor) där varje element i sin tur är en kolumnvektor. Om man tänker på det sättet så kan man nästan grafiskt se vad satsen C = [c1 c2 c3 ] ger för resultat Räkna med matriser Normal matrisalgebra fungerar i ComsolScript, dessutom har vi tillgång till de elementvisa operatorerna och vi kan också applicera en mängd standardfunktioner som till exempel cos(x)

33 3.3. INBYGGDA FUNKTIONER 27 också på matriser. Några exempel: C clear all C a = [1 2 5 ; ]; C b = [ 2-1; 5 2; -1 0]; C a * b ans = C 1./a ans = C b. 2 ans = C a(1,2) + b(2,1) ans = 7 Som vanligt gäller naturligtvis att matrisernas dimensioner måste matcha varandra för att matrismultiplikationen skall fungera, annars erhåller vi felmeddelandet: Error: Incompatible dimensions in matrix multiplication. Error in built-in function mtimes Matrisdivision I ComsolScript finns två typer av matrisdivison definierad, högerdivision - C/B - och vänsterdivision - C\ B. Bägge kan användas för att lösa matrisekvationer. Så är X = C \ B lösningen till ekvationen C * X = B och X = B / C lösningen till ekvationen X * C = B. Bägge dessa ekvationer kan vi ju lösa genom att multiplicera med inversen av antingen B eller C på lämpligt ställe. Poängen med dessa operatorer är att de internt inte utför en matrisinversion och därför går snabbare att exekvera. 3.3 Inbyggda funktioner Det finns ett mycket stort antal standardfunktioner inbyggda i ComsolScript, man kan utgå ifrån att den funktion man vill använda också finns inbyggd och bara mycket sällan bli besviken. De vanligast förekommande är grupperade i två sektioner, matematiska och logiska funktioner. Det enklaste sättet att få reda på vilka funktioner som finns är att i hjälpfönstret söka på?/vectors, Matrices, and Arrays/Working with Matrices and Arrays /Elementary and Special Math Functions och?/vectors, Matrices, and Arrays/Working with Matrices and Arrays /Relational and Logical Operators and Functions. När man väl hittat den funktion man söker kan man få mer detaljerad information om den genom att skriva help funktionsnamn i kommandofönstret Operationer på skalärer Avrundning ComsolScript har ett antal funktioner för att runda av decimaltal till heltal: floor som rundar av mot minus oändligheten, dvs mot närmast lägre tal, round som rundar av mot närmaste heltal, ceil som rundar av mot positiva oändligheten, dvs närmast större tal, och fix som rundar av mot noll, dvs nedåt för positiva tal och uppåt för negativa tal.

34 28 KAPITEL 3. VEKTORER OCH MATRISER INBYGGDA FUNKTIONER Operationer på vektorer ComsolScript har ett antal inbyggda funktioner som opererar på vektorer. Vi har redan sett ett exempel på en sådan, nämligen transponering, som applicerad på en vektor gör om en radvektor till en kolumnvektor och vice versa. Andra funktioner är: zeros, ones, rand, randn Dessa operatorer kan användas för att skapa vektorer och matriser utan att man behöver tilldela elementen sina värden ett och ett. zeros(n,m) skapar en (n m)-matris där alla element är satta till noll. Som ett specialfall kan n eller m vara 1, i vilket fall en radvektor repektive kolumnvektor skapas. ones (n,m) skapar en (n m)-matris där alla element är satta till 1. rand (n,m) och randn (n,m) skapar matriser där elementen är slumpvis fördelade, rand producerar tal som är jämnt fördelade mellan 0 och 1, randn producerar slumptal som är normalfördelade kring 0 med standardavvikelse lika med 1. För alla dessa gäller att om du bara ger en siffra som argument så skapas en kvadratisk matris. linspace Kommandot linspace(x1, x2, N)skapar en vektor som har N element, x1 som första element och x2 som sista element. Avståndet mellan elementen beräknas automatiskt så att de blir lika stora. Till exempel ger y = linspace(0,1,5) resultatet [ ] medan y=linspace(0,1,4) ger [ ] length(vektor) Kommandot length(vektor) returnerar längden av vektorn x, det vill säga hur många element som vektorn innehåller. Man kan spara resultatet i en variabel genom att ge kommandot langd = length(vektor). sum (vektor) beräknar summan av alla element i vektorn. kolon - operatorn kolon -operatorn är en mycket användbar operator i ComsolScript, både när vi arbetar med vektorer och matriser. Den förekommer i flera olika versioner, vilket i början kan göra det litet förvirrande. Den enklaste formen är a : b vilket helt enkelt motsvarar serien av tal från a till b med steget 1 mellan varje tal. Vi kan definiera steget till att vara något annat tal än 1, kolonoperatorn ser då ut så här: a : c : b, vilket ger oss en serie tal mallan a och b, med steget c. Några exempel: C vektor1 = [ 2 : 6]; vektor1 = C vektor2 = [ 1 : -0.5 : -4]; vektor2 = kolonoperatorn är uppenbarligen ett utmärkt verktyg för att skapa vektorer med regelbundna intervall mellan elementet. Vi kommer snart att se att när vi skall producera grafer så är det

35 3.3. INBYGGDA FUNKTIONER 29 just precis sådana vektorer som vi kommer att skapa om och om igen. Något annat som blir väldigt behändigt med hjälp av kolonoperatorn är att adressera en serie element i en vektor: C d = [ ]; C d(2:4) ans = Operationer på matriser De flesta av vektorfunktionerna opererar också på matriser, men ibland med litet oväntade resultat. Dessutom finns ett antal funktioner som är specifika för matriser. Några av de viktigaste är: sum(matris) Det är långt ifrån uppenbart vad vi kan förvänta oss här. Funktionen ger inte summan av alla element i matrisen, låt oss prova oss fram: C clear all C A = [ ; ; 7 8 9]; C sum (A) ans = sum (A) ger oss alltså tydligen en radvektor vars element är summan av kolumnerna i matrisen A. Detta beteende är något som kommer att återkomma, ComsolScript arbetar ofta med kolumnerna i en matris. Hur skall vi göra för att beräkna summan av raderna? Det enklaste är att anpassa sig till ComsolScripts preferenser, om ComsolScripts funktioner arbetar med kolumner och vi är intresserade av rader, låt oss transponera matrisen och sedan applicera funktionen på den transponerade matrisen. I det här fallet ger oss sum(a ) en radvektor vars element är summan av kolumnerna av den transponerade matrisern, vilket ju är samma sak som summan av raderna i den ursrpungliga matrisen. Vill vi sedan få det att se litet snyggt ut så transponerar vi resultatet, som ju är en radvektor, till en kolumnvektor. Hängde ni med? Det är nog enklare att bara göra det hela än att försöka läsa den här beskrivningen, alltså: C A ans = C sum(a ) ans = C sum(a ) ans = Kommandot sum(a ) ger oss en kolumnvektor där varje element är summan av raden i den ursprungliga matrisen. Gå igenom exemplet ovan och se till att du förstår alla led i operationerna!

36 30 KAPITEL 3. VEKTORER OCH MATRISER INBYGGDA FUNKTIONER eye(n) eye(n) producerar en N N enhetsmatris. diag(a) Om A är en matris resulterar diag(a) i en kolumnvektor där elementet i raden n motsvarar elementet i diagonalen av matrisen på rad n och i kolumn n. Om A är en vektor, resulterar M=diag(A) i en matris där diagonalelementen är desamma som elementen i vektorn, alltså M(i,i) = A(i). Detta kommando är väldigt användbart när vi senare vill skapa kovariansmatriser. kolonoperatorn Precis som för vektorer är kolonoperatorn ett bekvämt sätt att adressera delar av en matris: A(1:4,3) adresserar elementen som finns i rad 1 till och med fyra i den tredje kolumnen i matrisen A. Ett specialfall är när vi skriver : utan några omgivande siffror, operatorn resulterar då i alla element i en kolumn eller rad: A(:,3) ger alla element i tredje kolumnen av A.

37 3.4. ÖVNINGSUPPGIFTER Övningsuppgifter 1. Skapa en vektor med x-värden: x = (1, 3, 5, 7). Skapa sedan, genom beräkningar på x-vektorn där du använder de elementvisa operationerna, en vektor y där varje element uppfyller y = 3 x 2 + 4x för motsvarande element i x-vektorn. Skapa därefter vektorn yprim, genom att använda elementvisa operationer på vektorn x, där varje element är lika med derivatan av ekvationen ovan, beräknade för x-värden ur vektorn x. 2. Givet vektorn x = [ ], skapa (använd elementvis operation) y, där varje element ges av y i = 2x 3 i + 4x i 3 3. Använd kolonoperatorn för att skapa kolumnvektorn b = 4. Konstruera tre kolumnvektorer: och skapa en matris med hjälp av dessa, vars första rad är (2 3 1). vektorerna för att skapa matrisen Använd sedan 5. Konstruera två (3 x 4) matriser A och B: A = B = och beräkna sedan A+B, A-B, A *B 6. Antag att du har gjort fyra mätningar, var och en med en osäkerhet om σ i (i = 1, 2, 3, 4). Kovariansmatrisen definieras då som: V 1 = 1 σ σ σ σ 2 4 Du har nu gjort gjort fyra mätningar med osäkerheter σ i och lagrat dem i vektorn S = [ σ 1 σ 2 σ 3 σ 4 ] = [ ]. Skapa sedan med enbart vektor- och matrisoperationer matrisen

38 32 KAPITEL 3. VEKTORER OCH MATRISER INBYGGDA FUNKTIONER V 1 = från vektorn S Utgå från vektorn alfa = [ ] som betecknar fyra vinklar i grader. Skapa sedan vektorn x där elementen är samma vinklar uttryckta i radianer. Skapa därefter vektorn s där elementen är sinus för de givna vinklarna. Skapa slutligen vektorn c, där elementen är cosinus för de givna vinklarna. Använd inte funktionen cos, utan beräkna värdet genom formeln cos α = 1 sin 2 α. Använd dessa vektorer för att skapa matrisen A med fyra rader och tre kolumner, varje rad skall bestå av vinkel, sinus för vinkeln och cosinus för vinkeln 8. Fem bollar med olika massor m rullar på rad med varsin konstant hastighet v. Bollarnas massor och hastigheter ges av följande tabell: m (kg) v (m/s) Gör en vektor för samtliga massor och en vektor för samtliga hastigheter och beräkna därefter varje bolls rörelseenergi med ett enda kommando. Räkna ut totala rörelseenergin med ytterligare ett kommando.

39 Kapitel 4 Börja programmera 4.1 Villkorssatser Det är mycket vanligt att ett program skall utföra olika saker beroende på om vissa villkor är uppfyllda eller inte. Den enklaste formen av en villkorssats har formen: if (test)... end där test är en logisk test som är sann eller falsk. Om test är sann utförs koden mellan if och end, annars hoppas det avsnittet över. Enklare villkorssatser kan skrivas på bara en rad om man så önskar, med komma mellan kommandona: if (test),..., end ; Man kan även specificera vad som skall hända om test är falsk genom konstruktionen if (test)... kod 1 else... kod 2 end i det fallet utförs...kod 1 om test är sann, annars...kod 2. Slutligen kan man utföra fler tester med konstruktionen if (test1)... kod 1 elseif(test2)... kod 2 elseif(test3)... kod 3 else... kod 4 end I en sådan konstruktion utförs den kod som följer efter den första test som är sann, är test1 falsk men test2 sann utförs...kod 2 och så vidare. Om ingen av testerna är sann utförs...kod 4. En viktig sak att komma ihåg är att endast ett kodparti utförs, om fler av testerna är sanna så utförs det kodparti som svarar mot den av de sanna testerna som kommer först i konstruktionen. Är både test1 och test3 sanna i exemplet ovan så utförs bara...kod 1, inte...kod 3. Ett test byggs upp av någon av 6 relationsoperatorer: 33

40 34 KAPITEL 4. BÖRJA PROGRAMMERA a < b är sant om a är mindre än b a b är sant om a är mindre än, eller lika med b (kodas <= ) a == b är sant om a är lika med b (notera att vi inte kan skriva a = b, det kommandot sätter a till samma värde som b har) a b är sant om a är större än eller lika med b (kodas >= ) a > b är sant om a är större än b a = b är sant om a inte är lika med b Ett enkelt exempel på villkorssatser är villkorade utskrifter från ett program: if (x>0) disp( x är större än noll ) elseif(x<0) disp( x är mindre än noll ) else disp( x är lika med noll ) end Man kan också kombinera ihop två tester med hjälp av logiska operatorer: operator funktion logikfunktion & and(a,b) och a & b är sann om både a och b är sanna or(a,b) eller a b är sann om minst en av a och b är sann not(a) icke d = a: d är sann om a är falsk och omvänt. xor(a,b) exklusiv eller a xor b är sann om exakt en av a och b är sann Ett exempel på en sådan kombinerad test är if ((a < b) & (b<c)) som alltså är sann om a < b < c. Om vi använder oss av funktionsformen kan vi skriva samma test if (and(a<b,b<c)). Den viktigaste orsaken till att funktionsformen finns är att den gör det lättare att definiera en boolsk variabel, vi kan t.ex. skriva C=and(a<b, b<c) där C är en variabel som har värdet true om villkoret a < b < c är uppfyllt och värdet false om det inte är sant. 4.2 Slingor En mycket viktig komponent i datorprogram är slingor, där monotona repetitiva moment upprepas på ett automatiskt sätt. Tag som exempel serieutvecklingen av cosinus-funktionen: cos(x) = ( 1) i x2i (2i)! = 1 x2 2! + x4 4! x6 6!... i=0 Skall vi för hand göra denna uträkning på en miniräknare måste vi räkna ut varje term för sig och sedan summera alla termer i ett register. Men allt som kan skrivas som en summa på ett så regelbundet sätt som den här formeln kan också kodas på ett enkelt sätt i datorprogram genom att använda så kallade slingor (engelska loop). Det finns två typer av slingor i ComsolScript: for-slingor och while-slingor.

41 4.2. SLINGOR for-slingor For-slingor har formen for index=start:stop end Namnet på den variabel som man använder som loop-index, i exemplet ovan index är godtyckligt. Dock bör man kanske undvika att använda i eftersom det är namnet på en inbyggd funktion. Koden mellan första och sista raden utförs en gång för varje värde på index som anges i första raden. Ett mycket enkelt exempel som visar principen är följande lilla loop, som löser övningsuppgift 6 i kapitel 2 på ett kompakt sätt: for index=1:5 disp(index) pause(3) end En uträkning av de första tio termerna i serieutvecklingen av cosinus kan skrivas som: x=pi/4; cosinus=0; for index=0:9 cosinus = cosinus + (-1) index * x (2*index) / prod(1:2*index); end (För att beräkna fakulteten använder vi funktionen prod(x) som beräknar produkten av alla element i en vektor x. Som ett specialfall gäller prod(1:0)=1). Att det här är ett fantastiskt ekonomiskt sätt att koda framgår av att det enda vi behöver göra om vi vill tiofaldiga antalet termer i summan är att ändra index=0:9 till index=0:99. Variabeln i slingan, i det här fallet index, behöver inte delta i de matematiska operationerna, man kan till exempel räkna till tio genom att använda slingan summa = 0; for index=1:10 summa = summa + 1; end En annan sak vi noterar är att variabeln inte behöver räknas upp med ett för varje varv i slingan, index=0:2:10 är en legitim konstruktion. Vi behöver inte ens använda heltal, index=0.2:0.1:0.7 är också en möjlig sling-variabel while-slingor While slingor har formen while (test) end Där test är något villkor som kan utvärderas, som till exempel i<4, sqrt(x)>sin(x) osv. Koden i en while-slinga utförs så länge villkoret i test är sant. Det här betyder för det första att vi måste initialisera de variabler som ingår i testen innan while-slingan startar, och för

42 36 KAPITEL 4. BÖRJA PROGRAMMERA det andra att det är vårt eget ansvar att de variabler som ingår i testen förändras inuti den kod som utförs mellan while och end. Tag till exempel slingan clear all; x=2; sum=0 while (x<4) sum=sum+1; end Denna slinga kommer aldrig att ta slut! Eftersom x är mindre än två när slingan börjar så går vi in i slingan. Men eftersom x inte ändras inuti slingan kommer villkoret alltid att vara sant så slingan kommer bara att fortsätta i all oändlighet. Vi måste alltså tänka oss för när vi använder while-slingor så vi inte får programmet att hänga. (Skulle du någon gång behöva avbryta ComsolScript i en beräkning som spårat ut, t ex genom att fastna i en oändlig loop så gör man det genom att gå till kommandofönstret och där trycka på ctrl-c, dvs control och c samtidigt. Programmet avbryter då vad det håller på med och lämnar tillbaka kontrollen till kommandofönstret). While-slingor är användbara i situationer där vi inte i förväg kan förutsäga hur många varv vi måste löpa igenom en slinga. En sak som gör while-slingor så användbara är att villkoret inte behöver vara ett villkor på en enstaka variabel, utan kan vara mer komplext. Antag till exempel att vi vill undersöka hur många termer vi måsta ta med i summan för cosinus innan skillnaden mellan summan och det verkliga värdet är mindre än något givet värde epsilon. Detta kan vi koda på följande sätt: x= pi/4; epsilon=1*10-6; cosinus=0; index=0; while (abs(cos(x)-cosinus) > epsilon) cosinus = cosinus + (-1) index * x (2*index) / prod(1:2*index); index=index+1; end out= Serien konvergerade efter ; disp(out); index disp( termer ) Att hoppa ut ur en slinga - kommandot break Ibland vill man hoppa ur en slinga innan den nått det slut som angivits. Antag till exempel att vi skriver en rutin som skall kontrollera om ett tal är primtal eller inte. Vi vet att den minsta faktorn inte kan vara större än roten ur talet självt. Vi behöver därför bara testa att dividera med alla heltal upp till roten ur talet om ingen division går jämnt upp är talet ett primtal. Men om vi någonstans på vägen hittar en primfaktor så behöver vi ju inte fortsätta till det bittra slutet, finns det en faktor så är talet i fråga inte ett primtal. Att dividera med alla heltal upp till det tal som är kvadratroten ur talet är urtypen för en uppgift som vi löser i en slinga. Men om vi hittar en faktor vill vi hoppa ur slingan med en gång istället för att utföra en massa onödiga divisioner och tester. Här kan vi använda kommandot break, som när det utförs hoppar till den del av koden som står efter end kommandot för slingan. En sådan kod kan se ut så här (vi bortser här ifrån att vi egentligen inte behöver testa andra

43 4.3. FUNKTIONER 37 jämna tal än 2): index=2; primtal=1; while (index <= sqrt(x)) kvot = x / index; rest = x - index*floor(kvot); % om rest är noll går divisionen jämnt ut if(rest==0) primtal=0; break; end index=index+1; end if (primtal == 0) disp(x) disp( ar ej ett primtal, det gar att dela med ) disp(index) end 4.3 Funktioner Det finns många uppgifter som vi vill utföra ofta i olika sammanhang, i den här kursen kommer vi till exempel ofta att vilja beräkna en normalfördelning med ett givet medelvärde och standardavvikelse. Istället för att skriva den kod som behövs för att utföra detta, och sedan kopiera in den i varje m-fil där vi har behov av den kan vi skriva en så kallad funktion som vi med ett enkelt anrop kan köra i vilken m-fil som helst. Det kan ju också vara så att vi vill göra samma sak på flera olika ställen i en stor m-fil, då är det enklare att kalla en funktion än att upprepa koden på flera ställen i samma fil. En annan fördel med en funktion är att alla variabler är lokala, det vill säga en funktion delar inte workspace med det program som anropar funktionen. Detta är en stor fördel i stora program där det annars kan vara svårt att hålla reda på alla variabler som används till exempel för index i slingor eller x-koordinater i plottar (man kan inte använda samma variabelnamn i två olika betydelser!) För att detta skall fungera väl måste vi dels följa en viss syntax för hur en funktion skall kodas i ComsolScript, men också skriva koden som skall rymmas i funktionen på ett klokt sätt. Vi måste försöka göra funktionen så allmän som möjligt så att den verkligen går att återanvända. Vi skall exemplifiera med att skissa hur man kan skriva en funktion som för en given in-vektor x beräknar en y-vektor med normalfördelningens värde i motsvarande punkter. Vi skall kunna ange vilket medelvärde och standardavvikelse fördelningen skall ha, men om vi utelämnar dessa argument så skall standard normalfördelningen, det vill säga den med medelvärde 0 och standardavvikelse 1 beräknas. Vi får alltså om vi definierar en vektor x, och sedan skriver y=normal(x,medel,sigma) en y-vektor som innehåller värdet för normalfördelningen i varje punkt x som vi anger när vi anropar funktionen Syntaxen för funktioner En funktion inleds alltid med en rad som börjar med function och sedan ger syntaxen för hur funktionen anropas. I vårt fall börjar funktionen alltså: function y=normal(x, mean, sigma) Här är y resultatet av funktionen, de variabler som ges inom parantes är funktionens argument. Eftersom varje funktion har en separat workspace så är enda sättet att utbyta

44 38 KAPITEL 4. BÖRJA PROGRAMMERA information mellan en funktion och det program som anropar funktionen genom argumenten och de värden som kommer ut ur funktionen. Om man behöver ge mer än ett (i det här fallet tre) utargument, resultat från funktionen, gör man det med hjälp av syntaxen function [a b c ]=normal(x, mean, sigma) Förutom första raden följer en funktion samma regler som vilken annan m-fil som helst vad gäller syntax. Har man bara designat gränssnittet mot omvärlden korrekt så att all nödvändig information finns tillgänglig så är det sedan bara att koda den önskade algoritmen. Vi måste dock se till att spara den fil som innehåller funktionen med samma namn som vi ger i första raden, med tillägget (engelska extension).m help för en funktion En speciell sak med en funktion är att om vi skriver ett block med kommentarer efter första raden så kommer dessa att skrivas ut i kommandofönstret när vi skriver help funktionsnamn. Detta gäller bara det första blocket av kommentarer, ingen av de kommentarer som kommer längre ned i koden syns. Här skall vi alltså skriva in den information som kan behövas för att förstå hur man skall använda funktionen. Vi kan se massor av exempel på hur det kan göras, i själva verket är det precis det som händer varje gång vi skriver help i kommandofönstret, vi läser då helt enkelt det första blocket med kommentarer i den fil som utför funktionen. Vår funktion för normalfördelningen bör då börja någonting i stil med % NORMAL Normalf\"ordelningsfunktionen % y=normal(x,m,s) % Indata: x av typ vektor % m medelv\"ardet % s varians % % om m utel\"amnas s\"atts m=0 % om s utel\"amnas s\"atts s=1 % prova att koda detta och sedan skriva help normal (normal.m måste sparas någonstans i ComsolScripts sökväg) Testa antalet argument Vi har sett fler exempel på funktioner som accepterar olika antal argument, och som också levererar litet olika resultat beroende på hur många utvariabler man anger, ett exempel på det är kommandot hist (se avsnit 7.3.2) som kommer att bli en av våra favoriter. Det här är ett sätt att inte behöva introducera ett stort antal funktioner som gör nästan samma sak, men inte riktigt. Det är mer ekonomiskt att i stället låta en funktions beteende variera litet beroende på hur man anropar den, och hur man formaterar resultaten från funktionen. Rent tekniskt är det inte så svårt att låta en funktion göra litet olika saker med hjälp av villkors-satser, det gäller bara att veta hur funktionen har blivit kallad. För detta finns kommandona nargin och nargout som talar om hur många argument som gavs när funktionen anropades, och hur många ut-argument som angavs i anropet. Genom att testa på antalet argument kan vi styra villkoren för hur funktionen skall bete sig. if nargin < 3, s=1; end if nargin < 2, m=0; end en svaghet i denna konstruktion är att man måste utesluta argument bakifrån, dvs vi förutsätter att om ett argument är utelämnat så är det standardavvikelsen, och inte medelvärdet

45 4.3. FUNKTIONER 39 i exemplet ovan. Det finns vägar runt detta 1 men det kräver en hel del arbete och komplicerad kodning, så det lämnar vi till den som är speciellt intresserad. På motsvarande sätt kan man testa hur många ut-argument som gavs i anropet, i vårt fall om normal kallades med y=normal(x,m,s) eller med normal(x,m,s). Att kommandot som gör det heter nargout kommer väl knappast som en överraskning? Exempel på funktion Vi visar här ett exempel på hur en funktion kan användas. Funktionen total räknar ut hur stor summa man måste betala för ett lån taget till olika räntor: function total=interest(belopp, rantesats, manader, period) % % total beräknar totalt återbetalat belopp. % % utdata total - total skuld % % indata belopp - lånat belopp % rantesats - räntesatsen i procent % manader - lånets löptid i månader % period [ m / y ] - period % för vilken räntesatsen gäller % måste vara antingen m för månad % eller y för år. % om period utlämnas antas år % % Sten Hellman if (nargin == 3); period= y ; end; if (period == y ) total = belopp * (1 + rantesats/100) (manader / 12); elseif (period == m ) total = belopp * (1 + rantesats/100) (manader); else disp( perioden måste anges som m eller y ); total = -99; end Denna funktion kan man sedan kalla från ett program där man lägger in olika möjliga alternativ för att kunna bestämma vilket som är mest förmånligt: % kreditkort ett år till 4.3% i månaden kredit = interest(10000, 4.3, 12, m ) % bank ett år till 23% per år bank = interest(10000, 23, 12) 1 Man använder kommandot varargin och tänker ut tester som kan avgöra vilka argument som faktiskt lämnades.

46 40 KAPITEL 4. BÖRJA PROGRAMMERA 4.4 Övningsuppgifter 1. Skapa en vektor med tio element som består av likformigt fördelade slumptal (minns sektion 3.3.2) som antar heltalsvärden från 1 till Skriv en funktion som returnerar ett slumptal mellan 1 och 100. Talet skall vara ett heltal, dvs inga decimaler skall finnas med. Första raden i filen kan se ut så här: function y = slumptal() 3. Skriv ett program som genererar en slumpmässig tipsrad. Anta att sannolikheten för 1, x och 2 alla är 1/3, och låt programmet skriva ut tipsraden (en tipsrad består av tretton stycken tecken). Ett exempel på en körning kan se ut så här: >> tipsrad 2 x x 2 1 x En metod för att approximera kvadratroten av ett tal är Newtons metod som ger ) x yk med y k+1 = 1 2 (y k + x och y yk 1 = 1. Skriv en funktion y=newton(x) som använder denna metod för att beräkna kavdratroten ur ett godtyckligt positivt tal. Kadratroten skall anges korrekt avrundad med tre decimalsiffrors noggrannhet. Ledning: eftersom vi inte har något facit måste vi i funktionen själva avgöra när serien har konvergerat tillräckligt för att vi skall ha den sökta noggrannheten. Detta kan vi t.ex. göra genom att kontrollera att y k y k 1 < Vi måste dessutom hitta på ett trick för att runda av korrekt, de rutiner vi har till hands rundar ju bara av heltal. Detta kan vi komma runt genom att transformera vårt decimaltal till ett lämpligt heltal som vi sedan rundar av och därefter transformerar tillbaks till ett decimaltal.

47 Kapitel 5 Ordbehandling med OpenOffice writer 5.1 OpenOffice OpenOffice är en serie program som erbjuder ungefär samma funktionalitet som Microsofts Office-paket. På Fysikum har vi gått över från Microsofts produkter till OpenOffice av flera skäl: OpenOffice är öppen källkod och kan laddas ned gratis. Programmet finns för fler operativsystem än Microsofts produkter, speciellt så finns programmen även för operativsystemet Linux som är vanligt på Fysikum. Dessutom är OpenOffice.writer mycket bättre på att hantera formler än vad motsvarande Microsoft produkt är. Det är möjligt att byta filer mellan OpenOffice och Microsofts program men kompatibiliteten är inte 100-procentig, i synnerhet inte när man använder formler och symboler. Men i dessa fall är inte kompatibiliteten 100-procentig ens om man bara byter mellan två Microsoftprogram under olika operativsystem. För dig som student innebär det här att du fritt kan ladda ned OpenOffice till din hemdator från Vi på Fysikum hjälper gärna till om du stöter på svårigheter med detta. Vi kan eventuellt också försöka göra några CD-skivor som de som har långsamma uppkopplingar kan använda för att installera programmet. OpenOffice har en hjälpfunktion som är ganska lik den för ComsolScript. Den öppnar du genom att gå in i Help menyn och välja OpenOffice.org Help. Du får då upp ett fönster där hjälpfunktionerna för hela OpenOffice paketet finns tillgängliga. 5.2 Allmänna kommentarer Du startar OpenOffice genom att först trycka på knappen som det står Start på, och som har Windows-loggan på sig, som sitter i nedre vänstra hörnet. I den meny som sedan kommer upp trycker du på alternativet Programs, sedan OpenOffice.org2.0 och till sist OpenOffice.org Writer i den meny som då kommer upp. Oftast ligger det även en ikon märkt OpenOffice på skrivbordet, i så fall är det naturligtvis enklare att bara dubbelklicka på den. Längst upp på fönstret som öppnas finns en blå list. Om du tar musen och trycker med vänsterknappen på listen och håller den nedtryckt så kan du flytta runt fönstret tills det att du släpper knappen. Under listen finns OpenOffice s menyer som heter File, Edit, Show och så vidare. Om du trycker på ett av dessa ord kommer en meny att öppna sig där du kan välja mellan menyns alternativ. Under raden med menyer finns det som kallas verktygsfältet. I verktygsfältet finns en mängd knappar och vi kommer att nämna de viktigaste som du bör känna till i detta dokument. Om du för musen över en knapp och håller den still där utan att trycka på någon musknapp så kommer en liten gul hjälpruta där 41

48 42 KAPITEL 5. ORDBEHANDLING MED OPENOFFICE WRITER det står vad knappen gör att visa sig. Testa detta! Under verktygsfältet sitter något som ser ut som en linjal, denna används för att sätta bredden på marginalerna på det dokument du ska skriva. Under denna linjal finns slutligen själva fönstret där du kan skriva in din text. När du startar OpenOffice ser det bara ut som ett tomt papper. På det tomma pappret kan du se ett blinkande vertikalt streck som kallas för markör. Markören talar om var den text du skriver in kommer att hamna. Du kan flytta runt markören med hjälp av piltangenterna, eller genom att klicka med musen på det ställe du vill att markören ska flytta sig till. 5.3 Textbehandling När du startat OpenOffice writer är det bara att börja skriva in text direkt. Man kan ändra utseendet på den text man skriver på många olika sätt. De vanligaste sakerna man kan vilja ändra på själva texten är vilket typsnitt (på engelska font ) man använder, vilken storlek texten har, om texten är fet, kursiv, eller understruken och hur texten är justerad (vilket vi visar lite senare). Att markera text Flera gånger i de här instruktionerna kommer vi att uppmana dig att markera någon textsnutt. Du markerar text genom att klicka med musen (vänster musknapp, när vi skriver klicka med musknappen avses alltid vänster musknapp om inget annat sägs) framför det första ordet i stycket du vill markera och sedan hålla nere musknappen medan du drar musen till det sista ordet du vill markera och sedan släpper musknappen. Testa att skriva in några ord i OpenOffice och att sedan markera dem. Man kan också markera ett helt ord genom att först klicka någonstans i ordet och sedan dubbelklicka med musen. Klickar man tre gånger i snabb följd markeras hela meningen, medan fyra snabba klick markerar hela stycket. Klippa ut, Kopiera och Klistra in text Det är ofta man vill flytta runt saker man skrivit i ett dokument och då gör man det enklast genom att kopiera eller klippa ut den text man vill flytta och sedan klistra in den på det nya stället där man vill ha texten. Skillnaden mellan att kopiera och att klippa ut en bit text är att om du kopierar den så finns texten kvar där den står från början medan om du klipper ut den så försvinner den (men du kan alltid klistra in den igen). För att kopiera en bit text markerar du först texten. Sedan finns det fyra alternativa sätt att gå till väga och du ska använda det sätt du tycker är bekvämast. Det första sättet är att öppna menyn Edit genom att klicka på den, och sedan klicka på Copy. Ett annat sätt är att klicka på knappen i verktygsfältet. Det tredje sättet är att trycka på Ctrl-C (tryck ner tangenten som heter Ctrl i nedre vänstra hörnet på tangentbordet och håll den nedtryckt samtidigt som du trycker på tangenten för bokstaven C). Det fjärde sättet är att hålla ned Ctrl-knappen samtidigt som du trycker ned musknappen och drar iväg till det ställe dit du vill kopiera texten. När du släpper upp musknappen kopieras texten till det ställe där du är. Den här tekniken kallas Klicka och dra. Att klippa ut en bit text går till på ett väldigt likartat sätt som att kopiera text. Först måste du markera den textsnutt som du vill klippa ut. Sedan finns det igen fyra sätt att gå till väga. Det första är att öppna menyn Edit och sedan välja Cut. Det andra är att klicka på knappen i verktygsfältet och det tredje är att trycka på Ctrl-X. Slutligen kan du helt enkelt trycka på delete tangenten (men då går det inte att klistra in det du har tagit bort på ett annat ställe, vill du göra det kan du istället använda klicka och dra metoden, men utan att trycka ned ctrl tangenten när du drar). Efter att

49 5.3. TEXTBEHANDLING 43 du har klippt ut eller kopierat en snutt text är nästa steg att klistra in texten igen där du vill ha den. Detta gör du genom att flytta markören till det ställe där du vill att texten ska ligga, och sedan finns det fyra sätt (blev du förvånad?) att klistra in texten. Det första är att öppna menyn Edit och välja Paste in, det andra är att klicka på symbolen i verktygsfältet och det tredje är att trycka på Ctrl-V. Det fjärde sättet är att helt enkelt markera den textsnutt du vill flytta och sedan klicka och dra utan att trycka ned någon tangent. Detta sammanfattas i tabellen nedan: Kopiera Klippa ut Klistra in Sätt nummer 1 Välj Copy i Välj Cut i Välj Paste i menyn Edit menyn Edit menyn Edit Sätt nummer 2 Tryck på Tryck på Tryck på Sätt nummer 3 Tryck Ctrl-C Tryck Ctrl-X Tryck Ctrl-V Sätt nummer 4 Klicka och dra med Tryck på delete Klicka och dra Ctrl nedtryckt Tabell 5.1: Kopiera, Klippa ut och Klistra in text Typsnitt OpenOffice har flera typsnitt fördefinierade som du lätt kan välja mellan. I verktygslisten finns en ruta där det står Times New Roman som på bilden här intill, och bredvid finns en nedåtpil. Om du klickar på nedåtpilen så öppnas en meny där du kan se OpenOffice s alla typsnitt (eng. font) och du väljer det du vill ha genom att klicka på det. Om du nu skriver in lite text ser du att den ser ut som det typsnitt du valt. Om man redan har skrivit in text och man i efterhand vill ändra typsnittet, eller om man bara vill ändra typsnittet på ett ord mitt i ett stycke text (som med engelskans font här ovan) gör man det lättast genom att markera den text man vill ändra och sedan välja typsnitt i menyn. Då kommer bara typsnittet på den markerade texten att ändras Storlek på texten Bredvid rutan där du väljer typsnitt finns en ruta där du väljer storlek på texten. När du startar OpenOffice så står det säkert antingen 10 eller 12 i den här rutan, och bredvid rutan med siffran finns en nedåtpil. Om du trycker på den så får du upp en meny med de alternativ som finns att välja mellan för storleken på texten. Det här är inget konstigt och du kan säkert prova dig fram själv Fet, kursiv och understruken text Du kan välja att skriva med fet text, kursiv text, eller understruken text, genom att trycka på någon av knapparna. Testa att trycka in en eller flera av dessa knappar och skriv sedan lite text. Om du vill ändra på en redan inskriven text kan du markera texten du vill ändra och sedan trycka på knapparna så ändras utseendet på den markerade texten. Testa även detta. Fet text är användbar när du skriver rubriker och när du skriver undertexter till tabeller och figurer i dina labrapporter. Kursiv text används när man vill betona något, men man bör använda detta sparsamt. Vidare använder man kursiv text när man skriver ekvationer

50 44 KAPITEL 5. ORDBEHANDLING MED OPENOFFICE WRITER (Formula Editor använder automatiskt kursiv text) och det är också snyggt att använda det när man pratar om variabler i en text, till exempel: Vi mätte längden x till värdet 10, och tiden t till värdet 5, och beräknade hastigheten v till v = x/t. Kursiv text används också ibland när man presenterar termer på andra spåk. Understruken text används sällan och är dessutom ganska jobbig att läsa. Nuförtiden används också understruken text ofta för att indikera länkar, man bör därför vara försiktig med att använda understruken text där det kan missförstås Att justera texten Med att justera texten menar man att bestämma längs vilken kant texten ska ligga, alternativt om den ska ligga i mitten (vara centrerad). Några exempel: Vanlig text är vänsterjusterad. Den här texten är centrerad. Är mer användbart än högerjusterad text. Det här är högerjusterad text. Den ligger till höger. Den här texten är marginaljusterad vilket som syns på raden ovanför kan se ganska bedrövligt ut om raderna blir korta, men som ibland används i löpande text för att få både rak vänstermarginal och högermarginal. Använder man marginaljusterad text och vill ha en enstaka kort rad så avslutar man den med return varvid den korta raden blir normalt vänsterjusterad. Man justerar texten genom att trycka på knapparna. Vanligtvis är knappen för vänstercentrerad text intryckt. Naturligt nog kan bara en av knapparna vara intryckt åt gången, så om du trycker på knappen för högerjustering så kommer den att tryckas in och knappen för vänsterjustering kommer att åka ut. Om du vill ändra justeringen på en redan inskriven text kan du som vanligt markera texten och sedan trycka på knappen för den justering som du vill byta till Att göra en rubrik Under Default (i övre vänstra hörnet, se bilden här bredvid) finns ett antal fördefinierade rubriktyper som ni väljer genom att trycka på nedåtpilen till höger om ordet Default och sedan klicka på den rubriktyp som ni vill ha. Som ni ser finns det ett antal rubriktyper att välja mellan, trycker man på more så kommer det upp ändå fler. Trycker vi t ex på Heading 1 får vi en rubrik satt med fet stil av litet större typsnitt, lämplig t ex för kapitel rubriker, Heading 2 är litet mindre och lämpar sig för avsnittsrubriker osv. När man skriver en labrapport är detta praktiskt, eftersom man nu lätt får samma utseende på alla rubriker i rapporten. Man kan definiera egna typer som man sedan kan spara på de tre platserna i menyn. För att definiera din egen rubriktyp gör du så här: Formattera texten som du vill att den nya rubriktypen skall se ut och markera den. Öppna menyn under Default (klicka på nedåtpilen). Klicka på more... längst ned i den rullmeny som kommer upp.. Klicka på symbolen längst till höger i verktygslisten i det fönster som då öppnas. Klicka på New Style from Selection.

51 5.4. EGNA FORMATMALLAR 45 Ge rubriktypen ett namn och klicka på OK. I rullgardinsmenyn för rubriktyper finns nu din nya rubriksort tillgänglig. Du kan också ändra en av de fördefinierade rubriktyperna, t ex Heading 4. För det gör du så här: Välj den rubriktyp du vill ändra och skriv in litet text som formatteras med den gamla rubriktypen. Ändra formatteringen av texten så att den blir som du vill att den nya definitionen skall motsvara. Välj More pss som ovan, och tryck på symbolen längst till höger. Välj Uppdate Style i den rullgardinsmeny som kommer upp. Om du vill ta bort dina ändringar i rubrikmeny trycker du bara på Clear Styles. Om man i ett dokument har underavsnitt till ett avsnitt bör man ha en annan rubriktyp för underavsnitten som är något mindre. Man kallar detta att man har olika rubriktyper för olika nivåer i dokumentet, eller helt enkelt att det finns olika nivåer av rubriker. Därför är det praktiskt att du kan spara mer än en rubriktyp som du har definierat, det kan vara bra att spara en för varje nivå som behövs. 5.4 Egna formatmallar Egna definitioner av t ex rubriker sparas i något som kallas template i OpenOffice. Men eftersom datorerna i datorsalarna regelbundet städas så kommer OpenOffice s formatmallar med jämna mellanrum återställas till sina standardvärden. Dessutom är ju de mallar som lagras internt i OpenOffice bara åtkomliga just på den dator där de skapades. Men det går att spara och komma åt egendefinierade formatmallar: I menyn File väljer du Templates, i det fönster som då kommer upp väljer du save. Du får då möjlighet att spara den aktuella formatmallen till disk, för att du skall kunna nå mallen från vilken dator som helst skall du spara mallen på ditt SU-konto. Du kan emellertid inte välja din SU-disk i det fönster som öppnas när du trycker på save. OpenOffice har en speciell sökväg definierad för att avgöra var olika typer av inställningsfiler ligger, så även för template-filer. För att ändra den klickar du på Tools i verktygslisten och väljer options.... i menyn som kommer opp. Klicka på OpenOffice.org så att trädstrukturen öppnas, och välj Paths. Klicka på raden Templates så att den markeras och tryck på Edit. Nu har du (äntligen) möjlighet att lägga in din SU-area i sökvägen. (Det här är dock en temporär åtgärd, när datorerna städas kommer denna information att försvinna). För att kunna använda mallen när du arbetar på en annan dator får du i OpenOffice öppna mallhanteraren och läsa in formatmallen från din SU-disk. Ett alternativt sätt att spara egna formatmallar är att ha ett malldokument (t.ex. för labbrapporter) som man skriver sina rapporter i. Skapa en fil mall.odt, där du gör dina ändringar. Varje gång du ska skriva en ny labrapport kan du öppna filen, spara den med det nya filnamnet (t.ex. labb1.odt) och därefter skriva din rapport. I ett sådant mall-dokument kan du också spara t.ex. verktygsknappar som du lagt till i verktygslisten. Lägg först till en ny knapp och spara den sedan i filen: Gå till Tools i menyraden och välj Customize.... Välj Save in mall.odt. Lägg till nya knappar så som det beskrivs i stycke 5.5 i kompendiet. Avsluta med att klicka OK. Nu har ändringarna sparats i dokumentet, och kommer finnas där oavsett var du öppnar det. Samma sak gäller ändrade rubrikstilar och liknande.

52 46 KAPITEL 5. ORDBEHANDLING MED OPENOFFICE WRITER 5.5 Lägga till knappar till verktygsfältet I verktygsfältet har OpenOffice en mängd knappar, de flesta behöver man inte särskilt ofta och de viktigaste knapparna saknas! Lyckligtvis kan man själv lägga till de viktiga knapparna till de funktioner man använder ofta. När du skriver labrapporter kommer du speciellt att behöva knapparna för Formula, för Nedsänkt och Upphöjd text väldigt ofta. Formelverktyget Nedsänkt text Upphöjd text Om dessa inte redan finns i ditt verktygsfält ska du nu få lära dig hur du lägger dit dem. Klicka på menyn Tools. Välj Customize. Klicka på fliken Toolbars. Markera i den övre halvan av fönstret den toolbar där kommandot du vill ha en knapp för finns. Knapparna för nedsänkt och upphöjd text hittar du under Formatting. I den undre halvan av fönstret scrollar du ned tills du hittar superscript och subscript. Se till att de är ikryssade och tryck på OK. Om du vill ta bort en knapp från verktygsfältet så behöver du bara klicka bort den i samma meny. Som du ser finns det många fler verktygsfält än vad som visas i fönstret. Vilka som syns kan du styra själv genom att gå in i menyn View, välja Toolbars och sedan välja om ett visst verktygsfält skall vara aktivt eller inte. Det kan bli ganska trångt i fönstret om man väljer för många aktiva verktygsfält. Därför kan man ibland vilja lägga till en verktygsknapp i ett fält som man visar, även om den egentligen hör hemma i ett annat verktygsfält, som t ex insert formula knappen i standard-verktygsfältet. För att göra det går du igen in i Tools Customize och väljer Standard i det övre fältet. Klicka på add i den undre halvan. Du får då upp ytterligare ett fönster, där du kan leta upp det verktygsknapp du vill lägga till i standard. När du hittat den lägger du enklast till den genom att bara dra symbolen till verktygsfältet där du vill lägga till den. 5.6 Sidbrytning Ibland kan man vilja göra en framsida till det dokument man skriver, även om en framsida inte är nödvändig för kortare dokument som labrapporter. Om man vill tvinga OpenOffice att byta sida och lämna resten av sidan tom så är det bästa sättet att infoga en sidbrytning (istället för att bara trycka Enter en massa gånger). En sidbrytning hindrar texten att flyta ner under det ställe där du sätter din sidbrytning. Du inför en sidbrytning genom att först öppna menyn Insert och sedan välja alternativet Manual break. Du får då upp ett litet fönster där du kan markera vilken typ av textbrytning du vill införa, välj Page break och tryck på OK -knappen. 5.7 Sidnumrering Om du vill att OpenOffice ska numrera sidorna i dokumentet du skriver öppnar du menyn Insert och väljer alternativet Footer. Längst ned på varje sida får du då ett område som kallas footer och som kan formatteras av dig. Om du skriver in någon text där kommer

53 5.8. FOTNOTER 47 den att upprepas på varje sida. Du kan också lägga till vad som kallas fält. Ett exempel på fält och som visar hur det fungerar är just sidnummer. Sätt pekaren i en sidofot och välj insert -> field -> Page number. I varje sidfot kommer nu det aktuella sidnummret att skrivas in på den position där du lagt in fältet. Du kan formattera sidnumret på vanligt sätt, välja typsnitt, storlek, färg, vänster- eller högerjustering mm mm. 5.8 Fotnoter Om du vill införa en fotnot i din text gör du så här 1 : Ställ markören där du vill att den lilla siffran som visar att det finns en fotnot ska finnas (det vill säga den lilla ettan i meningen ovan). Öppna menyn Insert. Välj alternativet Footnotes OpenOffice kommer då att öppna ett litet fönster där du väljer att markera alternativen Footnote och Numbering automatic. Tryck på OK -knappen. Markören flyttas nu längst ner på sidan där du kan skriva in det du vill att fotnoten ska säga 2. För att komma tillbaka till texten där du införde din fotnot flyttar du pekaren tillbaks till texten och klickar. 5.9 Numrerade listor Om man vill göra en punktlista som ser ut så här: Första saken... Andra saken... eller en numrerad lista som ser ut så här: 1. Första saken Andra saken... så finns det två knappar i verktygsfältet som du kan använda, för att göra en punktlista och för att göra en numrerad lista. När du valt vilken typ av lista du vill göra är det bara att börja skriva in texten för första punkten. När du trycker på Enter så kommer du till nästa punkt i listan, så om en punkt består av en text med flera meningar ska du inte trycka Enter efter första meningen utan bara fortsätt att skriva. Listan avslutas om du trycker på Enter två gånger i följd (det vill säga du lämnar en punkt tom). Ibland Vill man kunna lägga in en radbrytning i en lista utan att skapa en ny punkt. Detta gör man genom att hålla ned skift-tangenten när man trycker på Enter 1 Det här är ett exempel på en fotnot 2 Det vill säga den här texten

54 48 KAPITEL 5. ORDBEHANDLING MED OPENOFFICE WRITER Om du vill kunna välja mellan alla typer av listor som OpenOffice har att erbjuda öppnar du menyn Format och väljer alternativet bullets and numbering. Här kan du välja mellan flera olika utseenden för din punktlista eller numrerade lista och du kan också välja att göra en lista med flera nivåer. För finliraren kan också nämnas att du själv kan byta ut de objekt som används som punkter i punktlistan till nästan vilken bild som helst Tabeller Att göra tabeller är en viktig del av att skriva en bra rapport. I OpenOffice kan man göra ganska snygga tabeller och det finns en hel del finlir man kan göra med tabeller som kan vara bra att kunna. När du gör en tabell är oftast den bästa taktiken först fylla i dina data i tabellen och sedan bekymra sig om tabellens utseende. För att skapa en tabell gör du så här: Först måste du tala om för OpenOffice att du vill göra en tabell. Det enklaste sättet om du bara vill göra en liten tabell är att klicka på tabellknappen och sedan dra med musen så att rätt antal rader och kolumner markeras. Det mer generella sättet att infoga en tabell är att öppna menyn Table och välja alternativet Insert och sedan klicka på Table. Du får då upp ett nytt fönster där du kan fylla i hur många rader och kolumner du vill att din tabell ska ha. Ett tredje alternativ är att trycka ctrl-f12, där F12 är funktionstangenten längst upp på tangentbordet. Du får nu upp ett tomt rutnät där du kan börja fylla i dina uppgifter. Klicka med musen i den ruta du vill börja skriva in dina uppgifter och skriv in det som ska stå där. Du kan sedan flytta dig runt i tabellen genom att trycka på Tab -tangenten för att komma till nästa ruta i tabellen, alternativt kan du klicka med musen i den ruta du vill till. Om du klickar någonstans i en tabell så kan du i menyn Table välja Table properties. Där kan du under de olika flikarna välja bl a: Hur tabellen skall linjeras upp i dokumentet (centrerat, vänster mm) Hur texten skall flyta i tabellen, om man skall tillåta sidbrytning i tabellen eller inte, om tabellhuvudet skall upprepas på varje ny sida. Kollumnvidden kan justeras till en exakt bredd. Linjernas tjocklek och färg kan justeras, liksom cellernas bakgrundsfärg. Under menyn Table har du också möjlighet att lägga till eller ta bort nya rader eller kolumner. Du kan också lägga till en tabell inuti en cell för att få en mer komplicerad struktur på tabellen. Har du valt en cell i tabellen kan du i menyn Table välja att dela upp den i fler antingen rader eller kolumner. Väljer du två eller fler celler som är grannar kan du i Table välja merge för att slå ihop dem till en. När tabellen ser ut som du vill ha den och du har fyllt i allt du vill ska stå i tabellen går du till nästa punkt. När du skrivit in allt du vill ska stå i tabellen så sätter du pekaren någonstans i tabellen och klickar så att den är vald. Gå sedan till menyn Table och välj alternativet Auto format. Du får då upp ett nytt fönster där du kan välja mellan de olika stilar som finns för tabeller och väljer den som du vill ha och klickar på OK -knappen (tänk på att din tabell skall se bra ut också när den skrivs ut i svart-vitt).

55 5.10. TABELLER 49 Slutligen skriver du en tabelltext och justerar tabellen (i meningen att du lägger den där du vill ha den på sidan). Oftast vill man ha centrerade tabeller. Det är i alla fall lättast att få tabelltexten under tabellen på ett snyggt sätt för centrerade tabeller. Precis som när du skriver vanlig text kan du bestämma hur texten i din tabell ska se ut, det vill säga vilket typsnitt, vilken storlek och så vidare Tabelltext Alla tabeller ska ha en tabelltext där tabellen numreras och det står en kort beskrivning av vad tabellen innehåller. I stycket för Textbehandling fanns till exempel en tabell med följande tabelltext: Tabell 5.1: Kopiera, Klippa ut och Klistra in text. Tabelltexten skrivs med ett lite mindre typsnitt än den vanliga texten, vanligtvis två punkter mindre. Den inleds med tabellens namn, i det här fallet Tabell 5.1 som ska vara i fet stil. När du refererar till din tabell i texten sedan är det till det här namnet du refererar. Efter tabellnamnet kan du skriva in en kort beskrivning av vad tabellen innehåller. Det är klart snyggast om tabelltexten står centrerad under tabellen. För att lägga till en tabell- eller figurtext så klickar du på figuren eller tabellen. Högerklicka och välj Caption.... Skriv in figurtexten i rutan Caption. Välj Category Table, så lägger OpenOffice in Table N: först på raden. I allmänhet vill man ändra typsnitt på figurtexten: för att göra det så klickar du utanför figuren. Markera texten. Byt typsnitt och storlek (rak stil, 2 punkter mindre än löptexten rekommenderas). Välj more... i formatlistan (fältet där det vanligtvis står Default i övre vänstra hörnet). Välj New style from selection i rutan längst till höger på det fönster som kommer upp, välj sedan Figurtext och klicka på Overwrite när OpenOffice meddelar att stilen redan finns. Välj sedan: Update style. Om man vill referera till tabellen skriver du t.ex. som framgår av Tabell. Sedan, med markören kvar på det ställe där du vill att siffran för tabellen skall hamna, klickar du på Insert i menyraden, sedan Cross reference. I den panel som kommer upp väljer du Table i den vänsra kolumnen, i mittenkolumnen väljer du vilken av dina tabeller du vill referera till och sedan i högra kolumnen Number. Har du lagt in dina tabelltexter automatiskt som beskrivet ovan och refererar till dem på det här sättet så kommer OpenOffice att hålla reda på numreringen, även om ordningen ändras. Har du t.ex. lagt in två tabeller och sedan lägger in en ny mellan dessa bägge så kommer den tabell som tidigare kallades Table 2 att döpas om till Table 3, och den referens du lade in som Som framgår av tabell 2 kommer automatiskt att uppdateras till Som framgår av tabell Omvandla värden från ComsolScript till en tabell i OpenOffice Värdena som ComsolScript spottar ur sig är sällan speciellt snyggt utskrivna, och att klistra in hundra värden, ett och ett, i en tabell är inte så roligt. Här följer en medod för att skriva ut värdena i ComsolScript på ett sådant sätt att de lätt kan omvandlas till en tabell i OpenOffice writer.

56 50 KAPITEL 5. ORDBEHANDLING MED OPENOFFICE WRITER Låt din m-fil skriva ut värdena i kolumner, separerade av semikolon: 3 %filen utskrift.m % Definiera värdena som ska inkluderas i textfilen x=(1:0.5:3) ; y=log(x); dx = 0.05*x; dy = dx./x; % Skriv ut värdena som kolumnvektorer, separerade med semikolon disp( x (m); dx (m); ln(x [m]); dln(x [m]) ); for n=1:length(x) ut=sprintf( %0.2f; %0.2f; %0.2f; %0.2f, x(n),dx(n),y(n),dy(n)); disp(ut); end Nu har du fått en utskrift i Comsol-fönstret som börjar så här: x (m); dx (m); ln[x (m)]; dln[x (m)] 1.00; 0.05; 0.00; Importera detta i OpenOffice: Markera utskriften i Comsol-fönstret och kopiera den (t.ex. med Ctrl+C). Öppna ett OpenOffice-textdokument och klistra in värdena (Ctrl+V). Markera värdena, klicka på Table i menyraden, välj Convert och därefter Text to Table. Markera Semicolons under Separate text as och klicka på OK. Nu är Comsol-utskriften omvandlad till en tabell, se nedan. x (m) dx (m) ln[x (m)] dln[x (m)] För att klistra in en extra kolumn med värden i en befintlig tabell: Skriv ut värdena som en kolumnvektor i Comsol. Klipp ut siffrorna och klistra in dem i textdokumentet. Markera siffrorna, klicka på Table i menyraden, välj Convert och därefter Text to Table. Klicka OK. Nu finns dina siffror i en ensam tabell med en enda kolumn, nu skall du klistra in dem i din gamla tabell: Börja med att skapa en ny, tom kolumn i din gamla tabell, genom att klicka på Insert column i Table-verktygsfönstret, eller genom att välja menyn Table Insert Columns... Markera och kopiera hela den kolumn med siffror som du vill flytta. Markera hela den tomma kolumn där du vill ha dina siffror och klistra in dem. 3 Formatterad utskrift med kommandot sprintf beskrivs i kapitel 8.2

57 5.11. FIGURER Figurer Det kommer ofta behov av att inkludera bilder i dina dokument, framför allt plottar du gjort i ComsolScript. Det bästa sättet är att i ComsolScript s grafikfönster spara bilden som en fil och inkluderar filen i OpenOffice. Om du har bilden sparad som en fil så öppnar du menyn Insert, väljer alternativet Picture och From file. Sedan får du leta reda på den bildfil du vill infoga på hårddisken, markera den och trycka på OK -knappen. När din bild väl är inne i OpenOffice kan du flytta runt den genom att klicka på bilden, hålla nere musknappen och flytta runt bilden med musen tills det att du släpper musknappen. Att få bilder att hamna på rätt plats kan ibland vara lite svårt Ankra bilder Om du skriver in text ovanför bilden kommer bilden att flyta med texten nedåt, och du kan inte skriva något på sidorna av bilden. Ofta vill man ha bilden kvar på det ställe du har bestämt och sedan vill man att texten ska flyta runt bilden (om bilden är liten, är bilden stor är det bättre att låta texten fortsätta under bilden). För att få bilden att ligga still och få möjligheten att låta texten flyta runt bilden så måste du ankra bilden. Det gör du så här: Markera bilden. Det gör du genom att klicka en gång på bilden. Öppna menyn Format och välj alternativet Anchor. Välj antingen page om du bara vill förvissa dig om att bilden ligger kvar på sidan, eller paragraph om du vill att den skall ligga kvar i det avsnitt där en är lagd. Nu ligger bilden fast i dokumentet och du kan skriva din text hur du vill utan att bilden flyttar sig. Se mer i avsnitt för att se hur du skall styra hur texten flyter runt bilden Figurtext Precis som med tabeller ska varje figur ha en figurtext. En figurtext följer samma regler som en tabelltext förutom att namnet ska vara Figur 1 såklart. För att skapa en figurtext gör du på samma sätt som för att infoga en tabelltext, se avsnit Infoga figur från OpenOffice Draw Om du ritar en figur med hjälp av OpenOffice Draw kan du inte infoga den direkt i ditt Writer-dokument. Bilden måste först exporteras till ett hanterligt filformat. När du har ritat din bild i Draw kan du exportera den genom att välja File Export. Spara bilden med ett filformat som OpenOffice Writer känner till, förslagsvis PNG, JPG eller GIF. Bilder i dessa format går att infoga i OpenOffice Writer på vanligt sätt Speciella symboler Om du vill skriva en grekisk bokstav, ett æ eller ç eller något annat tecken som inte finns på tangentbordet så kallas det att infoga en speciell symbol. För att göra detta kan du öppna menyn Insert och välja alternativet Special Character.Det här är något man gör så ofta att man vill ha en knapp i verktygsfältet för detta, och den ser ut så här. Om den inte finns där kan du lägga till den själv (se avsnittet om att Lägga till knappar till verktygsfältet ). När du trycker på knappen får du upp ett fönster med massor av symboler. Leta reda på den du är ute efter och markera den (tryck på den) och tryck sedan på knappen OK. Det finns ett flertal olika kombinationer av typsnitt och Subset,

58 52 KAPITEL 5. ORDBEHANDLING MED OPENOFFICE WRITER du får helt enkelt pröva dig fram, men en matnyttig kombination är Symbol och Basic greek där du kan hitta många av de vanligaste symbolerna och naturligtvis det grekiska alfabetet Ekvationer I OpenOffice kan man skriva även ganska avancerade formler på ett hyggligt snyggt sätt. Det är inte helt okomplicerat och eftersom man behöver göra det väldigt ofta är det bra att träna en del på det. Vi kommer att behöva verktyget Formula Editor ofta så det kan vara bra att ha det verktyget till hands i verktygslisten. Man kan säga att det finns tre sätt att skriva formler i OpenOffice, vi skall exemplifiera dem genom att i vårt dokument sätta in uttrycket för Pythagaros sats: a 2 + b 2 = c 2 : Börja med att placera pekaren där du vill ha formeln, tryck sedan på symbolen för Formula Editor. Då händer ett antal saker i ditt OpenOffice fönster: a Huvudfönstret delas i två delar, den övre delen visar ditt dokumet, den undre öppnar en tom area där den formel du vill skapa långsamt kommer att växa fram i en symbolisk form som OpenOffice använder för att visa matematiska formler. b Ett litet friflytande fönster märkt Selection öppnas. Om det inte kommer upp får du själv gå in i menyn View och klicka för Selection. c Verktygslisten för huvudfönstret ändras och du har nu verktygsknappar som används när vi skapar formler aktiva. Det här är dina verktyg för att skapa formler låt oss nu skriva in Pythagaros sats på de tre olika metoderna. 1. Använd Selection panelen. Den är indelad i två halvor, genom att klicka på knappar i den övre halvan väljer du vilka grupper av verktyg som skall visas i den nedre. Om du låter pekaren sväva litet över knapparna så visas en hjälptext. Klicka på knappen längst till höger i den undre av de två raderna - Formats. Du får då upp ett antal knappar i undre halvan som visar olika formatteringar. Vi vill ha Superscript Right, tredje från vänster i översta raden i den undre panelen. Klicka på den. Då dyker <? > ˆ{<? >} upp i den undre halvan av huvudfönstret. <? > är en platshållare som skall ersättas av den text vi vill ha i just det här fallet. Gå in i det nedre fönstret och ersätt den första <? > med a och den andra med 2. Du kan då se att i den övre halvan av dokumentfönstret så visas hur formeln växer fram. Vi fortsätter och klickar i Selection fönstret på den övre vänstra knappen - Unary operators. I den undre halvan klickar vi då på + a. När vi gör det kommer <? > redan att vara markerat, så vi fortsätter och klickar en gång till på superscript right och skriver in b och 2. Vi fortsätter sedan genom att klicka på andra knappen från vänster i Selection s övre rad - relations - och sedan a = b. Vi får sedan ta bort det första <? > och ersätta det andra <? > med c 2 på samma sätt som ovan. När du är klar är det bara att klicka någonstans i övre halvan av huvudfönstret så är du tillbaks i redigeringsläget. 2. Använd Selection panelen och skriv i formelfönstret. Text som vi skriver i den undre panelen i huvudfönstret kommer att bli en del av formeln. Ett litet enklare sätt att göra formler är därför att ta hjälp av knapparna i selection panelen för att hitta formen för ett uttryck, men sedan skriva in så mycket som möjligt för hand i det undre fönstret. Pythagaros sats på det här sättet får vi in genom att efter att ha klickat på Formula Editor knappen gå in i Selection panelen, trycka på Formats

59 5.13. EKVATIONER 53 och sedan Superscript right. Vi får då precis som i exemplet ovan <? > ˆ{<? > } i den undre halvan av dokumentfönstret. Precis som ovan går vi in och ersätter den första <? > med a och den andra med 2. Men nu ser vi hur superskript kodas, så nu fortsätter vi för hand i det nedre fönstret i dokumentfönstret och skriver aˆ{2} + bˆ{2} = cˆ{2}. 3. Skriv formeln direkt i texten. OpenOffice är tvåspråkig (minst) när det gäller att koda för formler. Utöver den uppsättning kommandon som du kan se i formelfönstret när du använder Selection editorn finns det ett annat språk att koda formler, ett språk som ansluter ganska väl till LaTeX ett formatteringsspråk som är ganska vanligt som ett alternativ till Open Office och MS Word. För att få in Pythagaros sats med den här metoden sätter vi pekaren på den plats i dokumentet där vi vill ha formeln och skriver: a sup 2 + b sup 2 = c sup 2. Markera sedan texten och tryck på Formula Editor verktyget. Open office formatterar då om texten till en formel. Det kan naturligtvis verka besvärligt att det finns två språk för att skriva in formler, men du kommer snart att märka att det går bra att blanda de bägge syntaxerna, till och med i samma formel. Efter ett tag kommer du säkert att använda metod 3 så länge du kommer ihåg syntaxen för den formel du vill skriva, sedan fyller du i med metod 2. När du avslutar Formula Editor genom att klicka i dokumentet utanför ekvationsrutan så behandlas den färdiga ekvationen som en bild, du kan flytta runt den med musen och placera den där du vill ha den. Om du vill redigera en formel i efterhand kan du dubbelklicka på formeln så kommer du tillbaka till Formula Editor och kan göra de ändringar du vill. Du ser att i den nedre delen av dokumentfönstret så skrivs formeln ut i den syntax du ursprungligen skrev den i t.ex. aˆ{2} + bˆ{2} = c{2} men det går alldeles utmärkt att utvidga den genom att använda den andra syntaxen, t ex genom att i den undre rutan lägga till + d sup 2 för att få a 2 + b 2 = c 2 + d 2. Några vanliga exempel på formler skrivna på detta sätt är

60 54 KAPITEL 5. ORDBEHANDLING MED OPENOFFICE WRITER Syntaxen för alla möjliga element i formler finns listade, för de bägge språken, i appendix i detta häfte. Du kan också hitta den i hjälpfönstret för OpenOffice. Välj hjälp, i det fönster som då öppnas måste du välja OpenOffice.org Math i rullgardinsmeny längst upp till vänster. Välj sedan Formula Reference Tables i det högra fönstret för att få tillgång till alla tabeller med syntax. I fortsättningen kommer vi att kalla den syntax som används i Selection editorn för Metod 1, den som används när man skriver in formler direkt för Metod 2. När man arbetar med formler så finns det några saker som inte är så uppenbara innan man stött på dem första gången, så låt oss titta på några små exempel. Men sedan är det bästa sättet att lära sig att pröva på för att skapa de formler man vill ha. Normalt så finns inga extra mellanslag mellan komponenterna i en formel. Vill man av någon anledning ha extra mellanslag så måste man lägga in dem som ett element i formeln. I Metod 1 väljer vi Format knappen. I den pannå som då kommer upp finns två elment, small gap och wide gap, trycker vi på någon av de knapparna så läggs ett mellanrum in i formeln. I Metod 2 skriver vi in motsvarande syntax element, för litet mellanrum och för stort mellanrum. Grekiska bokstäver kan man infoga på två sätt. Antingen kan klicka på Formula Editor knappen. När alla fönster är öppna har du tillgång till verktygsknappen Catalog i verktygslisten (det är den som ser ut som Σ ). Trycker du på den så öppnas ett fönster där du kan välja en grekisk bokstav och infoga den på plats. Alternativt kan du utnyttja att det i både Metod 1 och Metod 2 går att skriva in bokstaven direkt. Syntaxen är ett procent-tecken följt av det engelska namnet på den grekiska bokstaven, t.ex. %Pi %rho som ger Π ρ. De vanliga paranteserna ( ) sträcker sig inte över mer än en rad. Vill man ha en formel som ser ut som 1π, och inte ( 1 π ) måste vi använda skalbara (scalable) parentestecken. 4 4 Använder du Metod 1 så får du dem genom att välja en verktygsknapp (under Format ) där det står två bokstäver ovanför varandra mellan parenteserna, använder du Metod 2 så är symbolerna de samma som för vanliga parantestecken, men föregånget av \lef t, eller \right som t ex \right (, för en skalbar vänsterparantes. Ekvationer kan antingen stå på en egen rad 3(2x+5) - 5(2x-3) = -4x eller vara en del av texten ( A)da = A dl som här. Man bör endast låta korta ekvationer vara en del av texten. Om du vill ha formeln centrerat på en egen rad så ser du till att den står på en egen rad, sedan ser du bara till att raden är mitt-justerad Text i formler Om man använder metod 2 och skriver sina ekvationer i formelfönstret kan man ibland vilja skriva in litet text mellan två matematiska uttryck i formelfönstret. Resultatet blir inte särskilt snyggt, eftersom OpenOffice behandlar alla tecken som om de vore delar av ett matematiskt uttryck. Alla bokstäver skrivs kursivt och inga mellanslag skrivs ut. Detta kan man åtgärda genom att sätt dubbelt citationstecken runt de tecken som skall tolkas som text, prova t.ex. att skriva in p = a over b bold{ger}att b > 7 newline p" "=" "a over b " "bold{"ger"}" att " b > 7

61 5.14. SPARA DOKUMENT 55 i formelfönstret. Det kan se litet krångligt ut, men grundprincipen är enkel: all text mellan dubbla citationstecken, resten utanför. Eftersom den sista klammern - } - inte är en del av texten utan en del av kommandot måste den stå utanför citationstecknet, vilket tvingar oss att sätta citationstecken på bägge sidor klammern Spara dokument När du vill spara något du skrivit i OpenOffice så går det till på samma sätt som i de flesta andra Windows-program. Du kan antingen klicka på eller öppna menyn File och välja något av alternativen Save eller Save as. Ett snabbalternativ till Spara är att trycka på Ctrl-s på tangentbordet. Om du inte har sparat ditt dokument förut, eller om du väljer alternativet Spara som, kommer det upp ett nytt fönster där du kan välja vilket namn du vill att filen ska ha och var på hårddisken du vill spara filen (kom ihåg att välja din hemkatalog om du vill hitta filen igen!). När man sitter och skriver länge på en lång labrapport är det en bra vana att trycka på Ctrl-s lite då och då! Om du har öppnat OpenOffice och vill fortsätta skriva på ett dokument som du har skrivit tidigare och sedan sparat, så måste du öppna dokumentet först. Det gör du genom att antingen klicka på knappen eller genom att öppna menyn File och välja alternativet Open (snabbalternativ Ctrl-o ). Du får då upp ett nytt fönster där du kan leta reda på ditt dokument på hårddisken. OpenOffice sparar också automatiskt med jämna mellanrum en kopia av vad du har ändrat sedan filen sist sparades på disk. Kontrollera att detta är påslaget genom att gå in i Toolmenyn, välj Options och klicka på Load and Save och sedan General. Se till att rutan vid Spara information för återskapning var 10 min är fylld, och att det är 10 (eller någon annan lämplig tidsrymd som är ifylld). Med detta läge aktivt kommer OpenOffice att spara ned dina ändringar var tionde minut, skulle programmet krascha går det - oftast - att återskapa ändringarna fram till den tidpunkt då OpenOffice senast gjorde detta. Säkrast är dock att ta för vana att trycka på Spara med jämna mellanrum Spara i pdf-format När du vill vara säker på att andra människor kan läsa det du skriver. bör du skicka filen i pdf-format. Det gör du enklast genom att klicka på verktygsknappen Export Directly As PDF. Du kan också gå in i menyn File, och välja Export as PDF... PDF-formatet är det du normalt använder för att lämna in labrapporter.

62 56 KAPITEL 5. ORDBEHANDLING MED OPENOFFICE WRITER 5.16 Övningsuppgifter Gör följande uppgifter i en fil i OpenOffice Writer; 1. Försök göra följande tabell (inklusive tabelltext). Den första kolumnen är 2 cm bred och de övriga är 3 cm breda. Tabellen ska vara centrerad på sidan.: Tabell 1. Det här är den första testtabellen. 2. Gör följande ekvationer i ekvationshanteraren. Observera att beteckningarna för grundämnena ej ska vara kursiva: a 2 + b 2 = c Bi + 58 Fe Mt +1 n C n, n + 3. Försök återskapa följande formler: K 0 x 2 = N xk h xt t 0 J 0 2 dt 1+t 2 k=0 4. Skriv in dessa formler i ekvationshanteraren. Notera att ordet for ej ska vara kursivt. ( ) ( ) ( ) 2 1 x 15.1 = 4 6 y α 5β γ = 7 α + 7β + 4γ = 1 2α 6β γ = 6 f(x) = { 3x for x 0 3 x + 2x 1 for x > 0 5. Återskpa följande formel: dp dz = c2 32πσδ C c2 Ψ µ ω λ n 3 dl 6. Skriv följande ekvation, där A och n ska vara i fetstil: A = n t Ψ 7. Inför sidnumrering 8. Spara filen och omvandla den till en PDF-fil.

63 Kapitel 6 När det blir fel Nästan inga program blir helt rätt från början. När det uppstår fel i enklare program kan man ofta hitta orsaken bara genom att gå igenom programmet en gång till med vetskap om vad som gick fel. Men i takt med att programmen blir större och mer komplicerade blir denna procedur mer och mer besvärlig och tidskrävande. Ett fel i ett datorprogram kallas på engelska bug. Detta uttryck sägs härstamma från datorernas barndom. Vid ett tillfälle hade ett team som jobbade med en av de första stora beräkningsmaskinerna (rörbestyckad) länge försökt att ta reda på vad som gick fel i ett program. Till slut upptäckte man att orsaken inte låg i programmet utan att en död insekt inuti maskinen hade orsakat en kortslutning. Denna historia må vara sann eller inte, men ett fel i ett datorprogram heter på engelska bug, och processen att hitta och korrigera fel heter de-bugging. På svenska säger man oftast bugg och debugga, men ibland kan man möta termen avlusa. I nästan alla programmeringsmiljöer finns det speciella verktyg att använda för att leta efter fel i sina program, så kallade debuggers. Gemensamt för de flesta är att man med hjälp av verktyget kan köra sitt program rad för rad och vid valfri tidpunkt stanna upp och inspektera värdet på det variabler som finns i programmet. Man kan också köra programmet tills värdet på en viss variabel ändras. Med hjälp av sådana verktyg kan man nästa alltid hitta åtminstone de fel i ett program som orsakas av att man tänkt fel när man skrivit programmet. Att använda en debugger kräver en hel del träning för att det skall bli effektivt. I den här kursen ser vi detta som överkurs, de som är intresserade eller verkligen behöver gå igenom ett buggigt program hänvisas till introduktionen i Appendix B I stället ger vi här några enkla tips om hur man med hjälp av de felmeddelanden vi kan se i kommandofönstret kan komma en bra bit på vägen för att avhjälpa de vanligaste nybörjarfelen. A = Inf A har beräknats på ett sätt som ger oändligheten, ett fel som nästan alltid uppstår för att man försöker dividera med noll. B = NaN B är not a number, resultatet av en operation som inte är definierad, som t.ex. 0/0 eller cos(8/0), Error: Unknown function a. fredag 6 P = 3*a Detta fel uppstår när vi försöker använda en variabel som inte är initialiserad. En variabel måste definieras antingen genom tilldelning (a = 4) eller beräkning (a = 3*b). 57

64 58 KAPITEL 6. NÄR DET BLIR FEL Försöker vi använda en variabel innan den definierats får vi felmeddelandet ovan. ComsolScript kan inte riktigt avgöra om vi försöker använda en icke-definierad variabel eller en icke-definierad funktion. Att det står function i felmeddelandet skall man alltså inte ta för bokstavligt. Notera hur ComsolScript ger en väldigt detaljerad anvisning till var felet finns: fredag är namnet på den m-fil som kördes när felet uppstod, felet finns i rad 6 i den filen, och vi får till och med innehållet i denna rad - P = 3*a - utskrivet. Error: Incompatible dimensions in matrix multiplication. Error in built-in function mtimes. fredag 13 Z = x*y Detta fel uppstår när vi försöker multiplicera två matriser som inte har korrekta dimensioner med varandra, dvs. antalet kolumner i den vänstra matrisen är inte lika med antalet rader i den högra. När ComsolScript hänvisar till Error in built-in function... så betyder det att felet detekteras i någon av de funktioner som ComsolScript kallar för att utföra en operation. Det kan då vara väldigt svårt att ens veta vilken denna interna funktion är. Men eftersom vi också får den rad där felet uppstår utskriven så kan man oftast lista sig till vad som går fel. Error: Matrix power is only defined for square matrices. Error in built-in function mpower. fredag 13 Z = x^2 Igen ser vi i hyfsad klartext var felet ligger. Här vill man göra endera av två saker. Antingen att ta skalärprodukten av x med sig själv, i vilket fall vi måste komma ihåg att transponera en av vektorerna. Men oftast uppkommer det här felet när vi glömt att ta med punkten i den elementvisa operationen. Ofta är det istället x. 2 vi vill beräkna. Felmatchade paranteser Error: Unmatched parenthesis. Line: 15 Column: 11 Function: fredag Det här är också ett väldigt tydligt felmeddelande, vi har inte gjort rätt med våra paranteser. I det här fallet får vi ännu mer information från ComsolScript om var felet uppstår, vi får namnet på funktionen och rad och kolumn där ComsolScript detekterat felet. Använder vi ComsolScripts inbyggda editor så syns rad och kolumn numret längst ned i arbetsfönstret, det är bara att placera markören på rätt ställe, den parantes som står till höger om pekaren är den första icke-matchade högerparantesen, som t.ex. i raden x = cos(4)). Om vi däremot har fler vänsterparanteser än högerparanteser så går det inte när man skannar igenom en rad att avgära exakt vilken av vänsterparanterserna som inte är matchad, så skriver vi raden x = cos((4) så får vi istället felmeddelandet: Error: Syntax error. Line: 15

65 59 Column: 12 Function: fredag Syntax error kan vi få på många andra sätt, varje gång vi inte följer ComsolScripts språkliga regler, dvs reglerna för hur vi skall formera våra rader så kommer vi att få ett syntaxfel. Om vi till exempel skriver plot (x,y) får vi också ett syntaxfel, eftersom det inte är tillåtet med mellanslag mellan funktionsnamn och argumentlistan. Error: 1 input argument expected, 2 input arguments given. Error in built-in function cos. fredag 20 D = cos(2,4) Är också lätt att förstå. Vi har glömt att ComsolScript använder decimalpunkt och inte decimalkomma, så när vi skriver cos(2,4) tolkas det som två tal, och eftersom cosinusfunktionen bara accepterar ett argument så får vi ett fel. Error: Malformed expression. Line: 23 Column: 5 Function: fredag Anger att vi inte använder operatorerna på det sätt det var tänkt, som t.ex. i uttrycket k =3+/4.

66 60 KAPITEL 6. NÄR DET BLIR FEL

67 Kapitel 7 2D-Grafik I det här passet kommer vi att koncentrera oss på att skapa grafik: histogram, plottar och annat som kan användas för att åskådliggöra experimentella resultat. Vi skall försöka avstå från frestelsen att komma med pekpinnar om hur grafik skall utformas för att vara bra, utan i stället koncentrera oss på att gå igenom tekniken, så att vi kan åstadkomma grafik som ser ut som vi vill. Efter att ha gått igenom det här passet skall du själv kunna producera en plot som den ovan och också kunna både skriva ut den och kopiera in den i ett dokument för att bifogas i en lab-rapport. 7.1 Kurvor i två dimensioner Att skapa enklare två-dimensionella plottar i ComsolScript är relativt enkelt. En skillnad mellan ComsolScript och en del andra grafikprogram är att vi inte kan instruera ComsolScript 61

68 62 KAPITEL 7. 2D-GRAFIK att till exempel rita kurvan y=sin(x). Istället måste vi ge ComsolScript en uppsättning punkter med en x-koordinat och en y-koordinat. ComsolScript ritar sedan upp en kurva som förbinder punkterna. Vill vi rita upp y = sin(x) måste vi därför först själva skapa en x-vektor och sen en y-vektor 1 där y=sin(x) och instruera ComsolScript att rita en kurva mellan de punkter som beskrivs av dessa vektorerna. Låt oss börja med något enkelt som att rita grafen för y = 2x + 3. x = [1 8]; y = 2*x + 3; plot (x,y) Att växla mellan fönster, och städa i fönster. När vi trycker på return efter att ha givit plot kommandot öppnas ett nytt fönster, ComsolScripts grafikfönster där plotten visas. När vi jobbar med grafik kommer vi att vilja pendla mellan många fönster. Ofta kommer vi att utföra samma lunk mellan editorns fönster där vi just ändrat någon detalj i en m-fil till kommandofönstret för att köra filen till grafikfönstret för att se hur det blev. Det finns flera metoder för att snabbt växla mellan fönster, vilken som passar bäst just för stunden beror litet på exakt vad man håller på med och hur man föredrar att jobba. Det kanske enklaste sättet är att helt enkelt lägga fönstren bredvid varandra, eller i alla fall se till inget fönster ligger helt bakom de andra. Genom att klicka och dra på kanten av ett fönster kan du flytta det vart du vill på datorns skrivbord, och genom att klicka och dra i ett aktivt fönsters nedre högra hörn kan du ändra dess storlek. Om du lägger upp de fönster du jobbar i så att det alltid sticker fram någon bit av fönstret även när det är de andra fönstren som är aktiva så kan du enkelt byta fönster bara genom att klicka med musen i det fönster du vill skall bli det aktiva. I windows finns det en funktion för att bläddra mellan alla fönster som är öppna på datorns skrivbord. Håll alt -tangenten nedtryckt och tryck på TAB tangenten. Varje gång du trycker ned TAB bläddras ett nytt fönster fram som aktivt, vilket fönster som görs aktivt visas i en liten ruta. Befinner du dig i ComsolScripts kommandofönster och vill till grafikfönstret kan du skriva figure(1) i kommandofönstret, då blir fönstret med det namnet aktivt. Vill du tillbaks från grafikfönstret till kommandofönstret trycker du bara på return. Vill du städa upp i grafikfönstret skriver du (i kommandofönstret) clf (CLear Figure window), vill du städa upp i kommandofönstret ger du kommandot clc (CLear Command window). Du kan stänga grafikfönstret genom att ge kommandot close plot-kommandot Låt oss prova att plotta en litet mer komplicerad kurva, y = x 2. Pröva clear all; x = [1 4]; y = x. 2; plot(x,y) Resultatet blir inte direkt vad vi väntat oss, men egentligen är det inte så märkligt: plot kommandot ser ju bara de punkter vi vill rita en graf mellan och har ingen aning om huruvida de två punkterna (1,1) och (4,16) är två punkter på kurvan y=x 2, eller om de ligger 1 Eftersom det ComsolScript använder i plottandet är punkter, vars x- och y-koordinater kommer från vektorerna x och y så måste vektorerna ha samma antal element.

69 7.1. KURVOR I TVÅ DIMENSIONER 63 på kurvan y = 5x-4. Mer information måste alltså till, pröva att lägga till punkten ( x,y) = (2,4). Inte heller särskilt imponerande. För att kurvan skall bli jämn och fin och följa det funktionssamband vi önskar måste vi ge ComsolScripts plot-kommando vektorer där punkterna ligger ganska tätt. Det görs enklast om vi använder oss av ComsolScripts vektorfunktioner. Antag till exempel att vi vill plotta y=x 2 mellan 0 och 4.5. Vi kan då antingen använda kolonoperatorn för att skaffa oss en x-vektor där elementen har värden från 0 till 4.5 med vilket avstånd vi vill, till exempel 0.1: x = 0:0.1:4.5; (när vektorerna får så här många element vill man gärna stänga av ekot genom att ge semikolon efter kommandot). Alternativt kan vi använda linspace för att skapa 50 punkter mellan 0 och 4.5: x = linspace(0,4.5,50); ger oss också en användbar x-vektor. När x-vektorn är klar skapar vi en y-vektor med y = x. 2 och plottar resultatet. Prova nu att plotta några andra funktioner som polynom och sin(x) för att se att resultatet blir som du förväntar dig Styra utseendet på grafiken Det mesta av den tid man spenderar på att göra grafer tenderar att läggas på att få lay-outen att bli vad man har tänkt sig. Eftersom korrekt och tydlig lay-out är ett viktigt verktyg för att åstadkomma grafik av hög kvalitet kan det vara värt besväret att redan från början försöka lära sig de kommandon som krävs för att man skall kunna styra programmet dit man vill. Linjefärg, linjetyp och markörer Kommandot plot kan ges med tre argument: plot(x,y,s). Argumentet S är en textsträng som anger hur linjen som ritas skall formateras. Det finns tre typer av information att styra, färgen på linjen, hur linjen dras (heldragen, prickad mm), och slutligen markör, eller vilken symbol som skall ritas ut i de punkter som anges av vektorerna. Skriver du help plot kan du bland annat hitta följande lista på vilka möjligheterna är: Linjefärg Markör Linjetyp y yellow. dot - solid m magenta o circle : dotted c cyan + plus -. dashdot r red * star - - dashed g green s square (none) ingen linje b blue v triangle k black p pentagram Man kan i plot kommandot använda en godtycklig kombination av dessa (men bara ett val för varje kategori!). Prova med litet olika kombinationer för att se hur det fungerar, en gul kurva med heldragen linje mellan små cirklar ges t.ex av plot(x,y, yo- ). Märk att om man ger formatkommandot för linjefärg och markör men inte någon kod för linjetyp som t.ex. plot(x,y, bo ) så ritas endast punkterna ut utan någon sammanbindande linje. Rutnät Ibland vill man lägga in ett rutnät över grafen för att underlätta avläsningen av koordinater. Detta görs med kommandot grid on. För att slå av ett rutnät använder du grid off. Ger man bara kommandot grid så växlar man mellan dessa tillstånd (engelskans toggle).

70 64 KAPITEL 7. 2D-GRAFIK Koordinataxlar Om vi inte ger något kommando för att speciellt formatera koordinataxlarna väljer ComsolScript axlar så att hela grafen lagom ryms i grafikfönstret. Många gånger vill man själv bestämma hur koordinataxlarna läggs ut, antingen för att man vill zooma in ett intressant område, eller för att man vill lägga in litet luft, plotta till exempel y=x 2 mellan -2 och 3, det ser inte snyggt ut just kring origo. För att styra detta ger vi kommandot axis([xmin xmax ymin ymax]) där xmin är minimivärdet på x-axeln och så vidare. Kommandot axis skall ges efter plot-kommandot, testa med ny = [ ] följt av axis ( ny ) på vår andragradskurva! Det kan verka en smula omständigt att axis kommandot tar sitt argument i formen av en vektor, vilket gör att vi först måste konstruera vektorn innan vi skriver in kommandot. Rätt använt kan dock just detta faktum spara mycket arbete, särskilt när vi skriver m-filer som skall producera grafik. Den enklaste varianten är att vi istället för att ange siffervärden lagrar siffrorna i en vektor och ger den som argument till axis kommandot. Prova till exempel stor = [ ]; axis(stor); liten = [ ]; axis(liten); Tappar vi tråden kan vi se vilken inställning som för ögonblicket gäller genom att ge kommandot axis utan argument. ComsolScript skriver då ut den aktuella vektorn. (Notera att ibland får vi bara svaret , i det läget kan vi få tillbaks värdena på axlarna genom att ge kommandot Figure(X) där X är numret på det grafikfönster vi arbetar med, innan vi ger axis-kommandot.) Vi kan även spara en inställning genom att ge kommandot vektor = axis, där vektor är ett godtyckligt namn på en vektor i vilken de aktuella värdena sparas. Ett användningsområde för detta trick är om vi skriver en allmän m-fil för att plotta data och alltså inte i förväg vet vilka x- och y-värden som blir aktuella. Om vi ändå vill plotta kurvan med litet luft ikring kan vi använda en variant av följande sekvens: x = -1.5:.05 : 1.5; y = sin(x); plot(x,y) current=axis; mellanrum=0.3 ny(1) = current(1) - mellanrum; ny(2) = current(2) + mellanrum; ny(3) = current(3) - mellanrum; ny(4) = current(4) + mellanrum; axis(ny); figure(1) Axis har en hel del special-argument, för en fullständig lista skriv mer användbara är: help axis, några av de AXIS( auto ) gör att axlarnas gränser sätts räknas om när nya kurvor läggs till i samma graf. AXIS( manual ) sätter axelgränserna i manuellt läge, så att gränserna inte ändras när nya kurvor läggs till i samma graf. AXIS( equal ) sätter axlarnas gränser så att skalindelningen blir lika i x- och y-led. AXIS( normal ) motsatsen till AXIS( equal ). Här kan x- och y-axeln ha olika skalor. AXIS( tight ) krymper gränserna på axlarna så att plotten precis ryms i grafen.

71 7.2. PLOTTA PUNKTER MED FEL 65 Dessutom finns två argument som bara används för tredimensionella grafer: AXIS( on ) visar axlar, axelmarkeringar och axel-etiketter. AXIS( off ) slår av visning av axlar, markeringar och etiketter. För att skriva ut beteckningar på x- och y-axeln använder vi kommandona xlabel( text ) respective ylabel( text ), där text är den sträng vi vill skriva ut som beteckning på axeln. Prova att skriva in beteckingar på bägge axlarna! Vissa kommandon, som t.ex. AXIS och ylabel kan också ta sina argument direkt från kommandoraden, man kan alltså t.ex. skriva ylabel Det här är en y-axel. Man kan påverka utformningen av etiketterna på många vis genom att i grafikfönstret klicka på den lilla palettsymbolen. I det fönster som kommer upp kan man välja en mängd egenskaper hos axlarna, som tex färg, typsnitt och storlek. Du kan läsa mer om detta i hjälpavsnittet?/plotting and Visualizing Data/Graphics/ Axes Text Titel-text Ofta kommer vi att vilja lägga till text i graferna för att till exempel visa vilka parametervärden som använts. Det första vi gör är att lägga till en titel högst upp i bildytan, med kommandot title( text ), prova med title( Sinuskurvan )! Även titeltexten går att formattera genom att öppna graf-editorn från grafikfönstret. Fri text Vi kan ocskå lägga till text på godtyckligt ställe i grafen genom att använda kommandot text(x,y, sträng ) som skriver in texten sträng vid punkten (x,y). Prova att placera in en textsträng på rätt ställe i grafen, det kan ta ett tag innan man får koordinaterna rätt. Du ser att textsträngens nedre vänstra hörn placeras vid den koordinat som anges. Om man ger fler textkommandon i följd så försvinner inte de gamla textsträngarna. Även för fri text kan man ändra egenskapern genom att öppna graf-editorn i grafikfönstret. För att kunna arbeta med texten måste du först klicka på text i vänsterspalten i fönstret som öppnas. Kurvbeskrivningar Vi kommer snart att börja plotta mer än en kurva i varje graf. Det kan då vara bra att ha en beskrivning över vilken kurva som visar vilken storhet. En sådan läggs in med kommandot legend( beskrivning 1, beskrivning 2,...) där beskrivning 1 är den textsträng som beskriver den kurva som ritades med det första plot kommandot, beskrivning 2 den som ritades med det andra plot kommandot osv. Genom att ge kommandot legend( show ) och legend( hide ) kan du välja om kurvbeskrivningen skall visas eller inte. 7.2 Plotta punkter med fel Om du gjort en serie mätningar av en variabel y som funktion av x, och y-värdena har ett fel dy så vill man ofta visa mätserien i en plot med felstaplar angivna. För detta kan vi använda

72 66 KAPITEL 7. 2D-GRAFIK kommandot errorbar(x,y,dy). Prova till exempel: x =[ ]; y =[ ]; dy = [ ]; plot(x,y) errorbar(x,y,dy) Ofta vill vi inte ha någon linje som förbinder punkterna, det blir tydligare att bara plotta punkterna med till exempel en ring. Prova t.ex. errorbar(x,y,dy, bo ), kommandot errorbar accepterar samma parametrar för att styra linjefärg mm som plot gör. Man kan också plotta asymmetriska fel genom att ge två vektorer med fel, den första ger då felet i positiv riktning, den andra felet i negativ riktning, ett fullständigt kommando blir i det fallet errorbar(x,y,dyminus,dyplus, sträng ). Vill vi rita felstaplar i både x- och y- riktning kan vi inte använda inbyggda funktioner. Vi får istället själva först beräkna x- och y-koordinater för felstaplarna och använda kommandot line för att rita linjer i grafen. Detta är inte så svårt, vi kommer senare att titta på det som en övning i att programmera. 7.3 Histogram Förutom kurvor och punkter med felstaplar kommer vi ofta vilja producera stapelhistogram. Det finns flera varianter att välja på som producerar litet olika typer av grafer. För att kunna pröva oss fram skapar vi först en vektor med data som vi vill stoppa in i histogrammet: x = rand(1,20); ger oss en vektor med 20 tal, vart och ett slumpvis draget mellan 0 och Kommandot bar - stapeldiagram Kommandot bar(x) ger oss ett stapeldiagram med de 20 talen. Vi kan också lägga till en textsträng som anger vilken färg staplarna skall ha, här använder vi samma kod som för plot-kommandot som t ex bar(x, r ) Kommandot hist - histogram Oftast vill vi nog inte bara plotta värdet för våra 20 tal. Vanligare är att vi vill visa ett histogram som visar till exempel hur många av talen som ligger mellan 0.0 och 0.2 och så vidare. För att göra detta ger vi kommandot hist(x). Om vi inte anger annat delas data upp i 10 binnar, men vi kan ange hur många binnar vi vill visa i ett andra argument till exempel hist(x,5). Tänker vi efter litet inser vi att kommandot hist egentligen utför två ganska olika uppgifter: I det första steget delas data in i binnar (10 binnar eller det antal som vi anger) som sträcker sig mellan det minsta och högsta värdet. I det andra steget plottas sedan stapeldiagrammet i grafen. Ibland kommer vi att vilja använda bara det första steget för att sedan själva plotta data - eller använda dem i beräkningar. Det går om vi ger kommandot som antal = hist(x,8) så skapas vektorn antal vars element anger hur många av elementen i x som faller inom vart och ett av 8 intervall mellan det lägsta och högsta värdet som förekommer i x. Vi kan även skapa en vektor med mittpunkterna i varje interval genom kommandot [antal mitt] = hist(x,8). Vektorn antal innehåller då frekvensen och vektorn mitt interval-mitten för de 8 intervallen. De vektorerna kan sedan till exempel användas för att plotta punkter istället för histogram med plot(mitt, antal). När du prövade hist(x,8) fick du antagligen ganska konstiga värden på intervallbredden (och en smal glipa i histogrammets vänsterkant). Detta beror på att hist-kommandot

73 7.4. UTSKRIFTER AV GRAFIK 67 beräknar intervallbredden genom att dela avståndet mellan högsta x-värdet och lägsta x- värdet med 8, istället för att beräkna intervallbredden som (X max X min )/8 (det vill säga det högsta möjliga värdet, i det här fallet 1, minus det lägsta möjliga (0), delat med antalet binnar) vilket hade varit mer naturligt för den här typen av data. Men ComsolScript kan ju naturligtvis inte veta vad som är naturligt för en given datamängd. För att kunna rätta till sådana skönhetsfläckar måste vi därför hjälpa till sjäva, vi kan t.ex. istället för antalet binnar ange var vi vill ha klassmitten i anropet till hist. Vi sätter mycenter = 0.1 : 0.2 : 0.9 följt av hist(x,mycenter). Ett mer allmänt sätt att skapa ett histogram från minvalue till maxvalue med binvidd vidd är att skapa mycenter genom kommandot mycenter = [minvalue+vidd/2 : vidd : maxvalue-vidd/2] följt av hist(x,mycenter). Vi kan lägga till luft runt plotten genom att använda axis kommandot även för den här typen av grafer Kommandot stairs - konturdiagram. Kommandot stairs(x) drar en öppen kontur över elementen i vektorn x. Som ni ser så startar kurvan inte vid noll, och slutar inte heller på axeln. Det går att fixa men då måste man förstå vad stairs egentligen gör. Stairs drar räta linjer mellan ett antal punkter (x,y), vars y-koordinater ges av den vektor man ger i argumentet till stairs och x-koordinaterna av 1,2,... length(input vector). Vill vi att kurvan skall gå ned till axlarna får vi se till att det finns ett element som är noll både i början och slutet av den vektor vi stoppar in, t.ex. nyx = [0 x 0] följt av stairs(nyx). Vi kan alltså använda stairs för att dra räta linjer mellan en godtycklig mängd punkter, prova t.ex. y=x. 2 följt av stairs(x,y). Vi kan ange linjetyp som en sträng som vi skickar med som tredje argument på samma sätt som för plot-kommandot. Använt direkt på vår datavektor är stairs ett alternativ till bar-kommadot, men vill vi rita ett histogram med den här tekniken går det också bra, vi måste bara först skapa vektorn antal med hjälp av hist-kommandot som ovan, och sedan ge stairs(antal) Kommandot stem - stolpdiagram. Diskreta variabler, som till exempel antal studenter med vissa poäng på tentan kan man rita med kommandot stem. Prova dig fram med hjälp av help stem. 7.4 Utskrifter av grafik Det enklaste sättet att skriva ut en graf på en printer är att trycka på den lilla printersymbolen i grafikfönstret. Du får då upp en dialogruta där du kan välja printer och pappersformat. 7.5 Spara grafer och flytta till andra program Ofta kommer vi att behöva kopiera in en graf vi har producerat i ComsolScript i en rapport. Det gör vi enklast genom att trycka på save-knappen i grafikfönstret. Vi får då upp ett fönster där vi kan sätta ett antal parametrar, viktigast av dessa är bredd och höjd på den sparade figuren. Du bör också i Font Scale välja Absolute Scale, annars kan bilden klippas. Slutligen väljer du Bitmap graphics. När vi sedan trycker på Exportera... kommer vi till ett fönster där vi dels kan välja var vi sparar grafen, dels välja i vilket format vi vill spara grafen. Normalt är Portabel nätverksgrafik (*.png) det bästa valet, 2 eftersom en graf sparad i det formatet enkelt kan kopieras in i t.ex. OpenOffice 2 de som skriver sina dokument i LaTex vill kanske importera grafer i eps-formatet. Detta format blir tillgängligt om du istället för Bitmap graphics klickar i Vector graphics

74 68 KAPITEL 7. 2D-GRAFIK dokument. Png-formatet tillåter också att man när grafen importerats ändrar storleken på grafen i dokumentet med bibehållen kvalitet. Det är alltså inte nödvändigt att spara grafen i exakt den storlek som man vill visa den i det dokument där man kommer att använda grafen. Dock är det bra att försöka spara grafen i ungefär rätt storlek för när man skalar om grafen kommer även siffror och bokstäver på axlar och i titlar mm att skalas om, vilket ibland leder till alldeles för små eller stora sifror i dokumenten Lägga in bilder i OpenOffice dokument När vi vill använda bilder i OpenOffice placerar vi pekaren där vi vill ha bilden. För att läsa in bilden så går vi in i insert och väljer picture och sedan From file. Vi får då upp en dialogruta där vi kan välja vilken fil vi vill inkludera. När grafen väl kommit in i vårt dokument blir den ett objekt som vi kan välja. Klickar vi en gång på bilden så kommer det fram åtta små fyrkanter runt grafen. Dessa kan användas för att ändra bildens storlek genom att placera pekaren i en av rutorna, hålla musknappen nertryckt och dra åt det håll vi vill flytta grafens kant. Om vi använder rutorna i något av hörnen för detta så ändras bredd och höjd proportionerligt. Man skall bara i undantagsfall ändra en grafs storlek genom att ändra bredd eller höjd separat eftersom både siffror och text då blir mer eller mindre distorderade. Om man vill flytta bilden i texten så kan man dra den genom att dra figuren, dvs sätta pekaren över figuren, trycka ned musknappen och flytta pekaren, med knappen nedtryckt, kan vi flytta figuren till valfri plats i texten. När vi släpper upp mustangenten kommer bilden att flytta till den platsen. Genom att gå in i format och välja Wrap kan vi styra hur texten flyter runt bilden. Det finns fler atlternativ, men de som är lämpligast att använda är: Wrap of f där texten inte sätts vid sidan av bilden. Bilden läggs in mellan två rader text, även om bildens bredd är mindre än sidans bredd. Page wrap där texten, om den får plats, läggs på bögge sidor om bilden Optimal Page wrap där texten läggs på en sida om bilden, den sida där det finns mest plats för text. Med standardinställningar kommer det att vara textfritt på bägge sidor om grafen. Ibland när man visar en liten bild, som här, så kan man vilja låta texten fylla upp utrymmet vid sidan om bilden. För litet större bilder är Wrap off den bästa inställningen. För mindre bilder är det bäst att lägga bilden antingen längst till höger eller längst till vänster och använda Optimal page wrap. Som framgår av det här exemplet är det oftast inte så snyggt att lägga texten på bägge sidor om bilden, dels eftersom textraderna ofta blir för korta för att brytas på ett vettigt sätt, dels för att det kan vara svårt att följa en rad tvärs över grafen när man läser. Oftast är det därför bättre att flytta bilden till ena sidan och låta texten löpa bara på en sida. Om du vill ha litet extra luft kring figuren så högerklickar du på figurens ram (den tunna grå linjen runt figuren och figurtexten). Välj Frame i menyn ( Picture om du inte har någon figurtext) och därefter fliken Wrap. Under rubriken Spacing kan du öka avståndet mellan löptext och figur, vilket är behändigt speciellt när du använder funktionen Wrap. Vill du ha större avstånd mellan figurtexten och figuren, högerklickar du mitt på figuren, väljer Picture Wrap och ökar avståndet under Spacing, Bottom. Ibland följer det med litet vit bakgrund kring bilden när man exporterar den från ett annat program. Detta kan man enkelt skära bort genom att i menyn Format välja Bild -> Beskär.

75 7.6. FLER KURVOR I SAMMA GRAF - KOMMANDOT HOLD Fler Kurvor i samma graf - kommandot hold. Det är ganska vanligt att vi vill rita mer än en kurva i samma graf. För att undvika att ComsolScript hela tiden suddar den gamla plotten när vi ger ett nytt plot-kommando så kan vi använda kommandot hold on. Prova till exempel: x= -2*pi:0.05:2*pi; y=sin(x); plot(x,y) hold on z=cos(x); plot(x,z, r ) Det är nu vi kan börja få användning för legend-kommandot, prova: legend( Sinus x, Cosinus x ) En svårighet med hold-kommandot är att det inte går att ge kommandot axis efter att hold on är givet. Det gäller alltså att formattera axlarna innan man ger hold on. Det här betyder att komplicerade grafer, som allt annat i ComsolScript, måste göras via m-filer eftersom man säkert kommer att behöva gå in och ändra många detaljer i graferna innan man får det helt rätt. När man vill börja på ny kula så ger man kommandot hold off. Notera att det som fryses är grafikfönstret i sig, vilket inte är specifikt för just plot-kommandot. Vi kan alltså överlagra allt som man kan visa i grafikfönstret, till exempel histogram, kurvor och mätpunkter med felstaplar i samma fönster. 7.7 Fler grafer i samma fönster - kommandot subplot (2,3,1) (2,3,2) 2,3,3) För att rita mer än en graf i samma fönster kan vi (2,3,4) (2,3,5) (2,3,6) avända oss av kommandot subplot som delar in grafikfönstret i ett antal rader och kolumner och låter oss adressera ett sådant delfönster med våra grafikkommandon. Kommandot har syntaxen subplot(antalrader, AntalKolumner, Rutnummer). Rutnumreringen görs löpande med övre vänstra hörnet som nummer 1 och hörnet längst ned till höger som nummer AntalRader AntalKolumner, se figuren härintill. Så snart vi har gett kommandot subplot(x,y,z) så kommer de följande grafik-kommandona att hänföra sig till enbart den lilla rutan. De andra rutorn förblir tomma tills vi ger ett nytt subplotkommando vartefter alla kommandon hänför sig till det nya delfönstret. I det läget är det ganska krångligt att komma tillbaka till ett del-fönster vi tidigare ritat i. Kommandon som title, xlabel mm måste alltså ges innan vi med ett nytt subplot kommando tar oss vidare till nästa delfönster. Ytterligare ett skäl till att jobba med m-filer och inte direkt i kommandofönstret - det här blir nästan aldrig rätt första gången! 7.8 Rita i grafer Ibland vill vi kunna rita i grafer, som till exempel när vi vill rita ut felstaplar i både x och y. För detta använder vi kommandot line(x,y) där x och y är vektorer med samma

76 70 KAPITEL 7. 2D-GRAFIK dimension. Kommandot ritar linjer mellan punkterna med koordinater ( x(i), y(i) ). Prova clear all x=[ ] y=[ ] line(x,y) axis([ ]) % för att inte linjen skall överlappa bildkanten. Om grafikfönstret är tomt innan vi kallar line så kommer ComsolScript att skapa ett fönster där de linjer vi ritar upp nätt och jämnt får plats. Vill vi frilägga strecken får vi använda axis kommandot. Normalt ritar man dock i ett fönster där det redan finns en graf, så detta brukar inte vara ett problem. Vi kan påverka linjen genom att i kommandot lägga till egenskaper och värden på denna egenskap som par av argument för kommandot. Så kan vi t ex skapa en röd linje med linjebredd 4 pixlar genom att ge line(x,y, color, r, linewidth,4). Vi kan också editera interaktivt genom att klicka på den lilla palett-symbolen i grafikfönstret. Vi får då upp ett fönster där vi kan ändra olika egenskaper hos de ritade linjerna genom att först välja line i vänsterspalten. I vissa grafer kan det finnas fler line -objekt, men genom att välja ett av dem så markeras de i grafen så det är lätt att se vilket objekt ändringarna kommer att göras för. Kommandot line accepterar också matriser som argument, om x och y är 2 n matriser så behandlar line varje kolumn som ett punktpar. Det kan vara enlare att skriva in koordinatparen i en nx2 matris och sedan transponera i line-kommandot: x=[1 1 ; 2 2 ;3 3.5] y = [2.5 2 ; 2 1.5; 1.5 1] line(x,y ) Kommandot line kan användas för att rita felstaplar i x- och y-led:

77 7.8. RITA I GRAFER 71 x = [ ]; y = [ ]; deltax = 0.2*ones(1,3); deltay= 0.08 * y; plot(x,y, ob ) nyaxel = [min(x)-0.5 max(x) min(y)-0.5 max(y)+0.5]; axis(nyaxel) %frilägger punkterna hold on % plotta först felet i x-led xline(1,1) = x(1)-deltax(1); xline(2,1) = x(1)+deltax(1); yline(1,1) = y(1); yline(2,1) = y(1); xline(1,2) = x(2)-deltax(2); xline(2,2) = x(2)+deltax(2); yline(1,2) = y(2); yline(2,2) = y(2); xline(1,3) = x(3)-deltax(3); xline(2,3) = x(3)+deltax(3); yline(1,3) = y(3); yline(2,3) = y(3); line(xline, yline) hold off Konstruktionen xline(1,1) = x(1)-deltax(1); xline(2,1) = x(1)+deltax(1); yline(1,1) = y(1); yline(2,1) = y(1); tillsammans med användandet av matriser i line-kommandot gör det enkelt att generalisera tilldelningen av värden till en slinga. Använder vi en sådan behöver vi inte upprepa koden för varje punkt utan kan istället skriva: for i=1:length(x) xline(1,i) = x(i)-deltax(i); xline(2,i) = x(i)+deltax(i); yline(1,i) = y(i); yline(2,i) = y(i); end I slingan (koden mellan for... och...end) kommer alla värden mellan 1 och length(x) (som ju talar om hur många punkter vi totalt vill plotta) att användas. Har vi organiserat våra data i vektorer så kan vi alltså spara in mycket kod genom att använda en slinga istället för att upprepa denna kodsekvens en gång för varje värde på i. Genom att ha felen i vektorer som har samma dimension som vektorn som håller mätpunkterna kan man också enkelt behandla fel som är olika stora i de olika punkterna. Pröva nu att introducera koden för att rita felstaplar i y-led. Vill man finlira så kan man också definiera en variabel epsilon som sätts till ett sådant värde att felstrecken inte går igenom ringen kring data punkten utan stannar vid ringen. Varje felstapel får då ritas som två separata streck, det vänstra mellan (x - deltax) och (x-epsilon), det högra mellan (x + epsilon) och (x + deltax).

78 72 KAPITEL 7. 2D-GRAFIK 7.9 Logaritm-skalor För att plotta med logskalor på en eller bägge axlar finns tre kommandon att tillgå: semilogy, semilogx och loglog som fungerar exakt som plot kommandot bortsett från att logaritmisk skala (bas 10) används för x-axeln, y-axeln och bägge axlarna.vi kan också välja logaritm-skala på x- eller y-axeln, eller bägge två, genom att trycka ned motsvarande knapp i grafikfönstret.

MATLAB 7 i kursen experimentella metoder

MATLAB 7 i kursen experimentella metoder MATLAB 7 i kursen experimentella metoder av Sten Hellman med Introduktion till Microsoft Word av Jonas Strandberg Övningsuppgifter av Sten Hellman, Max Karlovini, Teresia Månson & Jonas Strandberg ii 3:a

Läs mer

Octave 3.2.4 i kursen experimentella metoder

Octave 3.2.4 i kursen experimentella metoder Octave 3.2.4 i kursen experimentella metoder av Sten Hellman Omarbetat av Johan Ahrens och Henrik Öberg Övningsuppgifter av Johan Ahrens, Henrik Öberg, Elin Bergeås Kuutmann, Sten Hellman, Max Karlovini,

Läs mer

ComsolScript 3.2 i kursen experimentella metoder

ComsolScript 3.2 i kursen experimentella metoder ComsolScript 3.2 i kursen experimentella metoder av Sten Hellman Övningsuppgifter av Sten Hellman, Max Karlovini, Teresia Månson & Jonas Strandberg ii 1:a upplagan, Stockholm 2065. c Sten Hellman, Stockholms

Läs mer

MATLAB 6 i kursen experimentella metoder. Sten Hellman Fysikum Stockholms Universitet

MATLAB 6 i kursen experimentella metoder. Sten Hellman Fysikum Stockholms Universitet MATLAB 6 i kursen experimentella metoder Sten Hellman Fysikum Stockholms Universitet 2 1 INLEDNING 6 2 VAD ÄR MATLAB? 7 3 KONVENTIONER 8 4 PASS 1- KOMMA IGÅNG 9 4.1 DE FÖRSTA STEGEN HALLO WORLD 9 4.1.1

Läs mer

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer Datorlära 1 Introduktion till datasystemet, epost konto, afs hemkonto Introduktion till datorer och datasalar Open Office Calculator Beräkningar med Open Office Calc Diagram med OO Calc Datorlära 2 Utforma

Läs mer

Migrera till Word 2010

Migrera till Word 2010 I den här guiden Microsoft Microsoft Word 2010 skiljer sig rent utseendemässigt mycket, så vi har skapat den här guiden för att hjälpa dig att snabbare lära dig programmet. Här kan du läsa om de viktigaste

Läs mer

Laborationer i kursmomentet Datoranvändning E1. Laboration nr 5: Mer om FrameMaker

Laborationer i kursmomentet Datoranvändning E1. Laboration nr 5: Mer om FrameMaker Sid 1 Laborationer i kursmomentet Datoranvändning E1 http://www.etek.chalmers.se/~hallgren/eda/ : Mer om FrameMaker 1996, 1997 Magnus Bondesson 1998 och 99-09-22 Thomas Hallgren 1 Introduktion I Laboration

Läs mer

1284_omslag.qxd 2005-10-11 11:13 Sida 1 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003

1284_omslag.qxd 2005-10-11 11:13 Sida 1 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003 5 Arbeta med mappar och filer I Windows finns det två sätt att arbeta med de olika enheterna i systemet. Vilket du väljer beror på personligt

Läs mer

Användarmanual för Hemsida

Användarmanual för Hemsida Användarmanual för Hemsida Sida 1 av 44 Inledning Detta dokument är en användarmanual för redigerbara hemsidor utvecklade av. Du kan själv, i ett wordliknande gränssnitt, enkelt uppdatera din egen hemsida

Läs mer

Introduktion till Matlab

Introduktion till Matlab Introduktion till Matlab Inledande matematik, I1, ht10 1 Inledning Detta är en koncis beskrivning av de viktigaste delarna av Matlab. Till en början är det enkla beräkningar och grafik som intresserar

Läs mer

MATLAB 6 i kursen experimentella metoder Sten Hellman

MATLAB 6 i kursen experimentella metoder Sten Hellman Utkast 1.1 21.08 03-03-10 MATLAB 6 i kursen experimentella metoder Sten Hellman Introduktion till MicroSoft Word av Jonas Strandberg Övningsuppgifter av Max Karlovini, Teresia Månsson & Jonas Strandberg

Läs mer

Laboration: Grunderna i MATLAB

Laboration: Grunderna i MATLAB Laboration: Grunderna i MATLAB 25 augusti 2005 Grunderna i MATLAB Vad är MATLAB? MATLAB är ett interaktivt program för vetenskapliga beräkningar. Som användare ger du enkla kommandon och MATLAB levererar

Läs mer

En handledning för studerande på Högskolan Kristianstad

En handledning för studerande på Högskolan Kristianstad Använda kurskonferenser i FirstClass En handledning för studerande på Åsa Kronkvist, augusti 2005 Innehåll Introduktion...3 Webbklient eller FirstClassklient?...3 Allt ligger online...3 Hitta rätt...4

Läs mer

E-POST3 Ett lättanvänt e-postprogram med stöd för talsyntes

E-POST3 Ett lättanvänt e-postprogram med stöd för talsyntes E-POST3 Ett lättanvänt e-postprogram med stöd för talsyntes Sida 2 av 2 Innehållsförteckning INNEHÅLLSFÖRTECKNING...3 REKOMMENDERAD UTRUSTNING...5 INSTALLATION...5 ANVÄNDARLÄGE I E-POST3...6 STARTSIDA...7

Läs mer

Resurscentrum för kommunikation Dako 2013. SymWriter. Minimanual

Resurscentrum för kommunikation Dako 2013. SymWriter. Minimanual Resurscentrum för kommunikation Dako 2013 SymWriter Minimanual Symboler som stöd till det du skriver 2 F9 - Byt symbol 2 F11 - Skapa nya ord/symboler 3 Spara ändringar i ordlista 4 Specifikationer grammatik

Läs mer

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: 40-120 minuter beroende på variant Material: TI-82/83/84 samt tärningar

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: 40-120 minuter beroende på variant Material: TI-82/83/84 samt tärningar Aktivitetsbeskrivning Denna aktivitet är utformat som ett spel som spelas av en grupp elever. En elev i taget agerar Gömmare och de andra är Gissare. Den som är gömmare lagrar (gömmer) tal i några av räknarens

Läs mer

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsning 3.1: Datastrukturer, en översikt Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,

Läs mer

En guide till FirstClass

En guide till FirstClass En guide till FirstClass En guide till FirstClass Grundläggande funktioner Logga in i FirstClass (Windows) Starta programmet FirstClass på vanligt sätt, t.ex. genom skrivbordsgenväg eller Startmenyn/Startskärmen.

Läs mer

Färgklövern. Färgklövern är gjord 1998 i samarbete mellan Datateket i Linköping och Hargdata AB i Linköping.

Färgklövern. Färgklövern är gjord 1998 i samarbete mellan Datateket i Linköping och Hargdata AB i Linköping. Färgklövern I Färgklövern kan du leka med färger, på lite olika sätt i de olika delprogrammen. Bestäm själv vilka och hur många färger du vill färglägga med. Alla dina målade bilder kan även skrivas ut

Läs mer

MMA132: Laboration 1 Introduktion till MATLAB

MMA132: Laboration 1 Introduktion till MATLAB MMA132: Laboration 1 Introduktion till MATLAB De flesta numeriska metoder låter oss få en tillräckligt bra lösning på ett matematiskt problem genom att byta ut komplexa matematiska operationer med kombinationer

Läs mer

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix Datorer och datoranvändning Föreläsningar 2014/15 Per Holm Per.Holm@cs.lth.se Unix 2 (lab 1) Lågnivåprogrammering 23 (lab 2) Datorns hårdvara 45 L A TEX 69 (lab 3) Internet 98 (lab 4) Operativsystem 117

Läs mer

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt.

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt. Bruksanvisning Installera CubeBiz... 2 Välj språk... 2 När du vill köra testversionen i 15 dagar... 3 När du köper en CubeBiz-licens... 3 Registrera en giltig licensnyckel... 3 Starta ett nytt projekt...

Läs mer

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

KPP053, HT2015 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner KPP053, HT2015 MATLAB, Föreläsning 1 Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner MATLAB Väletablerat Mycket omfattande program GNU OCTAVE Öppen

Läs mer

Laboration: Grunderna i Matlab

Laboration: Grunderna i Matlab Laboration: Grunderna i Matlab Att arbeta i kommandofönstret och enkel grafik Den här delen av laborationen handlar om hur man arbetar med kommandon direkt i Matlabs kommandofönster. Det kan liknas vid

Läs mer

Öppna dokumentet. Det heter ecdlfil.doc (Du får instruktioner om var)

Öppna dokumentet. Det heter ecdlfil.doc (Du får instruktioner om var) ECDL - En uppgift på formatmallar och förteckningar Vad du skall ha gjort när du är klar: Du skall ha skapat några nya egna formatmallar Du skall använda dina formatmallarna på rubrikerna. Du skall infoga

Läs mer

Microsoft Windows 10 Grunder

Microsoft Windows 10 Grunder WINDOWS 10 Grunder INLEDNING Mål och förkunskaper...5 Pedagogiken...5 Hämta övningsfiler...6 1 INTRODUKTION TILL WINDOWS Grundläggande om operativsystem...7 Starta och avsluta Windows 10...8 Välja kommandon...10

Läs mer

namn, inklusive katalogtillhörigheten. Den andra saken vi måste förstå är något som kallas "den atlab

namn, inklusive katalogtillhörigheten. Den andra saken vi måste förstå är något som kallas den atlab 5 Pass 2 Datorer, filnam och mer beräkningar I det här passet skall vi lära oss litet allmänt om hur datorprogram fungerar och hur de hanterar data på hårddisk och i minnet. Men framför allt skall vi lära

Läs mer

E-post för nybörjare

E-post för nybörjare E-post för nybörjare Innehåll: Inledning 1 E-post 2 Att skapa ett e-postkonto 3 Skicka och ta emot e-post 5 Övningar 7 Söderköpings stadsbibliotek sep. 2012 2 Inledning Välkommen till Nyfiken på nätet

Läs mer

Rapportmallen är uppbyggd med omslag, titelsida, sidor för förord, sammanfattning och innehåll, samt en sida där du ska börja skriva din text.

Rapportmallen är uppbyggd med omslag, titelsida, sidor för förord, sammanfattning och innehåll, samt en sida där du ska börja skriva din text. Att använda Energiforsks rapportmall Rapportmallen är uppbyggd med omslag, titelsida, sidor för förord, sammanfattning och innehåll, samt en sida där du ska börja skriva din text. Titelsida På omslags-

Läs mer

Resurscentrum för kommunikation Dako 2015. SymWriter 2. Minimanual

Resurscentrum för kommunikation Dako 2015. SymWriter 2. Minimanual Resurscentrum för kommunikation Dako 2015 SymWriter 2 Minimanual Symboler som stöd till det du skriver 2 F9 Byt symbol 2 F11 Skapa nya ord/symboler 3 Spara ändringar i ordlista 4 Specifikationer grammatik

Läs mer

Artiklar via UB:s sö ktja nst

Artiklar via UB:s sö ktja nst 1 Artiklar via UB:s sö ktja nst UBs startsida har fått ett nytt utseende. I centrum finns nu UBs söktjänst. Istället för tre sökrutor möts du nu som användare av en sökruta där det är meningen att du kan

Läs mer

Introduktion till Matlab

Introduktion till Matlab CTH/GU 2015/2016 Matematiska vetenskaper Introduktion till Matlab 1 Inledning Matlab är både en interaktiv matematikmiljö och ett programspråk, som används på många tekniska högskolor och universitet runt

Läs mer

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, 2006. Raphael Corsoski, 2005. Erik Eliasson, 2007. Christian von Schultz, 2008.

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, 2006. Raphael Corsoski, 2005. Erik Eliasson, 2007. Christian von Schultz, 2008. 1 Introduktion UNIX Laborations-PM Anders Egneus, Henrik Lindgren, 2004, 2006. Raphael Corsoski, 2005. Erik Eliasson, 2007. Christian von Schultz, 2008. Det övergripande syftet med dessa laborationer är

Läs mer

Referens till. WeavePoint 6 Mini

Referens till. WeavePoint 6 Mini Referens till WeavePoint 6 Mini Arkiv Öppna Välj Arkiv Öppna eller klicka på snabbknappen Öppna för att komma till dialogrutan Öppna. Du kan öppna ett av de senaste mönstren du arbetat med genom att klicka

Läs mer

Lägg märke till skillnaden, man ser det tydligare om man ritar kurvorna.

Lägg märke till skillnaden, man ser det tydligare om man ritar kurvorna. Matlabövningar 1 Börja med att läsa igenom kapitel 2.1 2 i läroboken och lär dig att starta och avsluta Matlab. Starta sedan Matlab. Vi övar inte på de olika fönstren nu utan återkommer till det senare.

Läs mer

Mikromarc 2 Meddelandecenter

Mikromarc 2 Meddelandecenter Mikromarc 2 Meddelandecenter Version 2.6 och högre Bibliotekscentrum Sverige AB, Växjö, september 2006 Bibliotekscentrum Sverige AB - 0470-532 530 - www.bibliotekscentrum.se Sida 1 av 59 Innehållsförteckning

Läs mer

Kom igång med Windows 8.1

Kom igång med Windows 8.1 Kom igång med Windows 8.1 www.datautb.se DATAUTB MORIN AB INNEHÅLLSFÖRTECKNING Grunderna i Windows.... 1 Miljön i Windows 8... 1 Startskärmen... 1 Zooma... 2 Snabbknappar... 2 Sök... 3 Dela... 3 Start...

Läs mer

ViTex snabbguide. 1. Inläsning till ViTex från scanner eller PDF Läs in text via scanner Läs in text från en JPEG-bild eller ett PDF-dokument

ViTex snabbguide. 1. Inläsning till ViTex från scanner eller PDF Läs in text via scanner Läs in text från en JPEG-bild eller ett PDF-dokument ViTex snabbguide 1. Inläsning till ViTex från scanner eller PDF Läs in text via scanner Läs in text från en JPEG-bild eller ett PDF-dokument 2. Uppläsning i ViTex Ikoner för uppläsning Läs upp enstaka

Läs mer

Introduktion till datormiljön och Python

Introduktion till datormiljön och Python Introduktion till datormiljön och Python Nyckelord: katalog, katalogträd, rot, fil, källkod, program, exekvering, tilldelning, inmatning, utmatning. Mål: Att du efter laborationen ska klara dig på egen

Läs mer

Skapa ett register över din grupp/klass

Skapa ett register över din grupp/klass SYDSOL Handledning CW 2000-02-23 Skapa ett register över din grupp/klass Syfte: Att göra ett register i ClarisWorks och hantera olika informationer om en grupp/klass Pedagogens viktigaste uppgift är att

Läs mer

Instruktion för laboration 1

Instruktion för laboration 1 STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. för matematisk statistik MD, ANL, TB (rev. JM, OE) SANNOLIKHETSTEORI I Instruktion för laboration 1 De skriftliga laborationsrapporterna skall vara

Läs mer

Microsoft Windows 8 Grunder

Microsoft Windows 8 Grunder WINDOWS 8 GRUNDER Inledning Mål och förkunskaper...5 Pedagogiken...5 Hämta övningsfiler...6 Del 1 1 Introduktion till Windows Grundläggande om operativsystem...7 Starta och avsluta Windows 8...8 Välja

Läs mer

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Datorövning 1 Statistik med Excel (Office 2007, svenska) Datorövning 1 Statistik med Excel (Office 2007, svenska) I processövningen som ni ska genomföra ingår det att konstruera samt sammanställa en enkät. Denna sammanställning ska göras med hjälp av programmet

Läs mer

Introduktion till Matlab

Introduktion till Matlab Introduktion till Matlab Analys och Linjär Algebra, del A, K1/Kf1/Bt1, ht10 1 Inledning Ni kommer använda Matlab i nästan alla kurser i utbildningen. I matematikkurserna kommer vi ha studio-övningar nästan

Läs mer

Kapitel 15: Data/Matrix Editor

Kapitel 15: Data/Matrix Editor Kapitel 15: Data/Matrix Editor 15 Översikt över Data/Matrix Editor... 226 Översikt över list-, data- och matrisvariabler... 227 Starta en Data/Matrix Editor-session... 229 Mata in och visa cellvärden...

Läs mer

Lumbago - Förord. Välkommen till Journalprogrammet Lumbago.

Lumbago - Förord. Välkommen till Journalprogrammet Lumbago. Lumbago - Förord Välkommen till Journalprogrammet Lumbago. Vår förhoppning är att du ska få mer tid över för dina patienter och att du ska ha nytta av alla de effektiva funktioner som Lumbago erbjuder.

Läs mer

Flexibel meny i Studentportalen

Flexibel meny i Studentportalen Guide Flexibel meny i Studentportalen Via en flexibel meny kan lärare och administratörer skapa en menystruktur som består av menyblock och funktioner i valfri ordning. På så sätt kan menyn spegla kursens

Läs mer

Kom igång. Version 3

Kom igång. Version 3 Kom igång Version 3 Installation & Inställningar Om du läser den här filen, har du troligtvis redan tagit dig igenom installationsprocessen hos PMView Pro. Den här sektionen är tänkt att guida dig genom

Läs mer

Mer om Outlook. Extratexter till kapitel 4 Mejla. I avsnittet lär du dig: vad Outlook idag är och kan användas till

Mer om Outlook. Extratexter till kapitel 4 Mejla. I avsnittet lär du dig: vad Outlook idag är och kan användas till B Mer om Outlook Extratexter till kapitel Mejla B 8 I avsnittet lär du dig: vad Outlook idag är och kan användas till hur Kalendern är uppbyggd och fungerar att använda funktionen Uppgifter hur du kan

Läs mer

LATHUND PUBLISHER 2000

LATHUND PUBLISHER 2000 LATHUND PUBLISHER 2000 RXK Läromedel AB, Riddarplatsen 36 Plan 7 177 30 Järfälla Tel: 08-580 886 00, Fax: 08-580 259 40 www.rxk.se, e-post: info@rxk.se Detta material är författat av RXK Läromedel AB.

Läs mer

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

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 Matlab-föreläsning (4), 10 september, 015 Innehåll m-filer (script) - fortsättning från föreläsning 1 In- och utmatning Sekvenser, vektorer och matriser Upprepning med for-slingor (inledning) Matlab-script

Läs mer

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Datorövning 1 Statistik med Excel (Office 2007, svenska) Datorövning 1 Statistik med Excel (Office 2007, svenska) I processövningen som ni ska genomföra ingår det att konstruera samt sammanställa en enkät. Denna sammanställning ska göras med hjälp av programmet

Läs mer

Addera ett nytt Arranger Track. Skapa Arranger Events

Addera ett nytt Arranger Track. Skapa Arranger Events Datorstudion med Cubase Johan Axelsson 69 Arrangera med Arranger Track Det finns ett annat sätt att arrangera dina projekt, alltså att lägga upp ordningen och längden på intron, verser, refränger, stick

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga

Läs mer

Användarhandledning Rapportgenerator Version: 1.1

Användarhandledning Rapportgenerator Version: 1.1 Användarhandledning Rapportgenerator Version: 1.1 Umefast AB 2008 www.umefast.se Innehåll 1. Rapportgenerator... 2 1.1. Syfte och avgränsningar... 2 1.2. Wizards... 2 1.3. Förutsättningar för arbete med

Läs mer

FLEXILAGER Ett hjälpmedel för anpassad lagerhantering. Original -version

FLEXILAGER Ett hjälpmedel för anpassad lagerhantering. Original -version Beskrivning av FLEXILAGER Ett hjälpmedel för anpassad lagerhantering. Original -version Flexénita Sunnerstavägen 58 186 70 Brottby tel: 08 512 41803 FLEXILAGER 2 Innehållsförteckning INTRODUKTION.....3

Läs mer

Introduktion till Word och Excel

Introduktion till Word och Excel Introduktion till Word och Excel HT 2006 Detta dokument baseras på Introduktion till datoranvändning för ingenjörsprogrammen skrivet av Stefan Pålsson 2005. Omarbetningen av detta dokument är gjord av

Läs mer

Software Translator 6.1 Manual

Software Translator 6.1 Manual Software Translator 6.1 Manual 1 Innehåll Sidan Inledning 3 Installation 4 Auktorisation 4 Översikt Programfönster 5 Menyer Arkiv 5 Visa 6 Språk 6 Verktyg 7 Hjälp 7 Handhavande Att lägga till ett program

Läs mer

Handbok Artikulate. Andreas Cord-Landwehr Ondrila Gupta Översättare: Stefan Asserhäll

Handbok Artikulate. Andreas Cord-Landwehr Ondrila Gupta Översättare: Stefan Asserhäll Andreas Cord-Landwehr Ondrila Gupta Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 1.1 Inlärningsmetodiken.................................... 5 1.2 De första stegen i Artikulate................................

Läs mer

1 Skapa Tabell...2. 2 Skapa Relationer...20. 3 Redigera Relationer...24. 4 Redigera Fält i Tabell...26. 5 Lägga till Poster i Tabell...

1 Skapa Tabell...2. 2 Skapa Relationer...20. 3 Redigera Relationer...24. 4 Redigera Fält i Tabell...26. 5 Lägga till Poster i Tabell... Kapitel 5 Tabell 1 Skapa Tabell...2 1.1 Tabellfönstret... 4 1.2 Fältegenskaper... 8 1.3 Primärnyckel... 11 1.4 Spara Tabell... 12 1.5 Tabellguiden... 12 2 Skapa Relationer...20 3 Redigera Relationer...24

Läs mer

Datorövning 1 Statistik med Excel (Office 2010, svenska)

Datorövning 1 Statistik med Excel (Office 2010, svenska) Datorövning 1 Statistik med Excel (Office 2010, svenska) I processövningen som ni ska genomföra ingår det att konstruera samt sammanställa en enkät. Denna sammanställning ska göras med hjälp av programmet

Läs mer

DATORLÄRA 1 2013-09-02 Christophe Clément - Fysikum

DATORLÄRA 1 2013-09-02 Christophe Clément - Fysikum 1 DATORLÄRA 1 2013-09-02 Christophe Clément - Fysikum Datorlära 1 FK2002 & FK2005 ÖVERSIKT FÖR DATORLÄRA DELEN I KURSEN Datorlära 1 (alla) SU resurser, OpenOffice Writer Datorövning 2 (alla) Enkel databehandling

Läs mer

Matematisk Modellering

Matematisk Modellering Matematisk Modellering Föreläsning 1 Anders Heyden Matematikcentrum Lunds Universitet Matematisk Modellering p.1/37 Denna föreläsning (läsvecka 1) Vad handlar kursen om, mål, kurskrav, ide. Matematisk

Läs mer

Att komma igång med FirstClass (FC)!

Att komma igång med FirstClass (FC)! Att komma igång med FirstClass (FC)! Vi har tillgång till FC genom vårt samarbete med folkhögskolor och därigenom med Folkbildningsnätet. FC kan användas på en dator på två sätt (dessutom kan du använda

Läs mer

Snabbguide AlphaSmart NEO2

Snabbguide AlphaSmart NEO2 Snabbguide AlphaSmart NEO2 Vers 110815 Följande nio punkter bör du behärska för att få nytta av din AlphaSmart NEO 1. Sätt in tre AA batterier. Använd medföljande skruv till att sätta fast batteriluckan.

Läs mer

InPrint. Grunderna för hur du kommer igång och arbetar med Communicate: InPrint. Habilitering & Hjälpmedel

InPrint. Grunderna för hur du kommer igång och arbetar med Communicate: InPrint. Habilitering & Hjälpmedel InPrint Grunderna för hur du kommer igång och arbetar med Communicate: InPrint Habilitering & Hjälpmedel Förord Communicate InPrint är ett program du använder för att skapa material för utskrift. Du kan

Läs mer

ADAD-net. Användarmanual INDIVIDEN. Råbe och Kobberstad Februari 2010

ADAD-net. Användarmanual INDIVIDEN. Råbe och Kobberstad Februari 2010 ADAD-net Användarmanual INDIVIDEN Råbe och Kobberstad Februari 2010 1 INNEHÅLLSFÖRTECKNING INNEHÅLLSFÖRTECKNING... 1 INLOGGNING OCH BEHÖRIGHETER... 2 STARTA PROGRAMMET OCH LOGGA IN... 2 BEHÖRIGHETSSYSTEM...

Läs mer

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

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi. Grunderna i MATLAB eva@it.uu.se Innehåll Vad är MATLAB? Användningsområden MATLAB-miljön Variabler i MATLAB Funktioner i MATLAB Eempel och smakprov: Grafik Beräkningar Bilder GUI Vad är MATLAB? Utvecklat

Läs mer

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon). Laboration 0 Laborationen är till för dig som inte är familjär med att navigera i filträd på en dator. Om du är van vid detta (vilket är det vanliga nu för tiden) så kan du bara snabbt titta igenom laborationen.

Läs mer

Linjär algebra med tillämpningar, lab 1

Linjär algebra med tillämpningar, lab 1 Linjär algebra med tillämpningar, lab 1 Innehåll Per Jönsson Fakulteten för Teknik och Samhälle, 2013 Uppgifterna i denna laboration täcker kapitel 1-3 i läroboken. Läs igenom motsvarande kapitel. Sitt

Läs mer

Ordbehandling för PM och uppsatsskrivning med Word xp

Ordbehandling för PM och uppsatsskrivning med Word xp Ver 4.0 2004-09-03 Ordbehandling för PM och uppsatsskrivning med Word xp av Anders Avdic Innehållsförteckning 1 INLEDNING 1 2 GRUNDERNA I ORDBEHANDLING 1 2.1 Öppna ett nytt dokument 1 2.2 Markera text

Läs mer

Tips och tricks 1 Cadcorp SIS 5.2 2003-03-03

Tips och tricks 1 Cadcorp SIS 5.2 2003-03-03 Tips och tricks 1 Cadcorp SIS 5.2 2003-03-03 Skapa en raster pensel från en Windows bakgrund (1) 1. Kontrollera att Paper är uppsatt som koordinatsystem/projektion 2. Öppna en Bitmap fil i ett tom fönsterfil

Läs mer

Innehållsförteckning. Manual WebCT

Innehållsförteckning. Manual WebCT Innehållsförteckning Introduktion. 3 Inloggning 4 Översiktssida...5 Lösenordsbyte..6 Kursens startsida..8 Kalender...9 Webblektion 10 Diskussionsforum...11 Privat post.. 14 Chatt...16 Meny 2007 2 Introduktion

Läs mer

Rapportgenerator handbok

Rapportgenerator handbok Rapportgenerator handbok Beskrivning av fönstret Fältlistan Uppe till vänster visas fältlistan för det nuvarande registret. För att hitta de övriga registren klickar du på höger/vänster pilarna. Man kan

Läs mer

För support videos, webinstruktioner och mer information besök oss på www.thinksmartbox.com

För support videos, webinstruktioner och mer information besök oss på www.thinksmartbox.com Komma igång Grid 3 Svensk översättning av Leena Öberg på Picomed (www.picomed.se) För support videos, webinstruktioner och mer information besök oss på www.thinksmartbox.com Välkommen till Grid 3 ger dig

Läs mer

Grunderna i stegkodsprogrammering

Grunderna i stegkodsprogrammering Kapitel 1 Grunderna i stegkodsprogrammering Följande bilaga innehåller grunderna i stegkodsprogrammering i den form som används under kursen. Vi kommer att kort diskutera olika datatyper, villkor, operationer

Läs mer

2007-03-28. Manual för Typo3 version 4.04

2007-03-28. Manual för Typo3 version 4.04 2007-03-28 Manual för Typo3 version 4.04 1 2 Innehåll: 1. Allmänt 4 2. Grunderna i Typo3 5 2.1 Knappar 5 2.2 Inloggning 5 2.3 Den inledande vyn 6 2.4 Sidträdet 7 3. Sidor 8 3.1 Skapa en ny sida 8 3.2 Redigera

Läs mer

WINDOWS 8.1. Grunder

WINDOWS 8.1. Grunder WINDOWS 8.1 Grunder EXCEL 2013 Grunder INLEDNING Mål och förkunskaper...5 Pedagogiken...5 Hämta övningsfiler...6 1 INTRODUKTION TILL WINDOWS Grundläggande om operativsystem...7 Starta och avsluta Windows

Läs mer

7 Mamut Client Manager

7 Mamut Client Manager 7 Mamut Client Manager Tilläggsprodukten Mamut Client Manager består av programmen Client Start och Client Update. Med hjälp av Mamut Client Manager kan du från ett fönster öppna, uppdatera och administrera

Läs mer

Manual. till. Cantor 2000. Madison Medri

Manual. till. Cantor 2000. Madison Medri Manual till Cantor 2000 Madison Medri 2 InnehÄllsfÅrteckning Installation Inledning Pedagogisk bakgrund Anpassning fär funktionshindrade Arbeta med Cantor 2000 InstÅllningar Namn Ljud Tangentbord Resultat

Läs mer

Funktioner och grafritning i Matlab

Funktioner och grafritning i Matlab CTH/GU LABORATION 3 MVE11-212/213 Matematiska vetenskaper 1 Inledning Funktioner och grafritning i Matlab Först skall vi se lite på (elementära) matematiska funktioner i Matlab, som sinus och cosinus.

Läs mer

Syftet med den här laborationen är att du skall bli mer förtrogen med följande viktiga områden inom matematisk statistik

Syftet med den här laborationen är att du skall bli mer förtrogen med följande viktiga områden inom matematisk statistik LUNDS TEKNISKA HÖGSKOLA MATEMATIKCENTRUM MATEMATISK STATISTIK DATORLABORATION 4 MATEMATISK STATISTIK, AK FÖR I, FMS 01, HT-07 Laboration 4: Stora talens lag, Centrala gränsvärdessatsen, enkla punktskattningar

Läs mer

Textsträngar från/till skärm eller fil

Textsträngar från/till skärm eller fil Textsträngar från/till skärm eller fil Textsträngar [Kapitel 8.1] In- och utmatning till skärm [Kapitel 8.2] Rekursion Gränssnitt Felhantering In- och utmatning till fil Histogram 2010-10-25 Datorlära,

Läs mer

Lathund för överföring av rapporter och ljudfiler

Lathund för överföring av rapporter och ljudfiler Lathund för överföring av rapporter och ljudfiler I den här lathunden finns detaljerade instruktioner om hur du gör för att skicka rapporter och ljudfiler till din handledare. Först kommer en beskrivning

Läs mer

Guide för pdf-formulär

Guide för pdf-formulär Guide för pdf-formulär Innehållsförteckning Rätt programvara... 3 Instruktion för automatiskt formulär... 3 Steg 1 Mall till pdf-format via Word... 3 Alternativt steg 1 Mall till pdf-format via Acrobat...

Läs mer

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

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner KPP053, HT2016 MATLAB, Föreläsning 1 Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner MATLAB Väletablerat Mycket omfattande program GNU OCTAVE Öppen

Läs mer

Switch Driver 5. Programvara för Radio Switch, JoyBox och JoyCable. Sensory Software

Switch Driver 5. Programvara för Radio Switch, JoyBox och JoyCable. Sensory Software Switch Driver 5 Programvara för Radio Switch, JoyBox och JoyCable. Sensory Software Innehållsförteckning Att använda programvaran Switch Driver... 3 Installera programvaran Switch Driver... 4 Kontaktanslutning...

Läs mer

1700 - talets Piteå. En CD-skiva utgiven till Carina Bäckströms minne

1700 - talets Piteå. En CD-skiva utgiven till Carina Bäckströms minne 1700 - talets Piteå En CD-skiva utgiven till Carina Bäckströms minne Carina Bäckström (1960-1998) var under många år en hängiven släktforskare. Efter att från början gjort släktutredningar om sin egen

Läs mer

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet.

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet. 2. Komma igång Skapa grupper och elever Börja med att läsa texten nedan om hur man börjar jobba med programmet efter installationen. Skriv gärna ut sidan och ha bredvid dig tills du känner att du behärskar

Läs mer

Handicom. Symbol for Windows. Blisseditor. Version 3.4

Handicom. Symbol for Windows. Blisseditor. Version 3.4 Handicom Symbol for Windows Version 3.4 Handicom, Nederländerna/Frölunda Data AB 2009 Innehåll Installation och licenser...2 1. Inledning...2 2. ns huvudfönster...2 2.1 Verktygsfältet...2 2.2 Matris...2

Läs mer

Användarmanual HOIF.org

Användarmanual HOIF.org Användarmanual HOIF.org HOIF.org 2013-05-21 37 sidor Användarmanual för HOIF.org Introduktion Det här är en manual till alla användare på hemsidan HOIF.org Hur får jag ett användarkonto? För att kunna

Läs mer

Får jag be om ordet!

Får jag be om ordet! Får jag be om ordet! Får jag be om ordet är ett datorprogram för läs- och skrivutveckling, utvecklat av logoped Bitte Rydeman. Det innehåller åtta olika delprogram, där man på olika sätt arbetar med ordbilder,

Läs mer

TAIU07 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab TAIU07 Matematiska beräkningar med Matlab Datorlektion 2. Villkor och Repetition 1 Logiska uttryck Uppgift 1.1 Låt a=3 och b=6 Vad blir resultatet av testerna ab? Uppgift 1.2 Låt a, b,

Läs mer

Instruktion arbeta med rapportmallen

Instruktion arbeta med rapportmallen Instruktion arbeta med rapportmallen 29 oktober, 2015 INNEHÅLLSFÖRTECKNING 1 BÖRJA ANVÄNDA MALLEN 3 1.1 FYLLA I INFORMATION 3 1.2 INSTÄLLNING VISA /DÖLJ 3 1.3 INSTÄLLNING VISA TABELLSTÖDLINJER 3 2 FORMATMALLAR

Läs mer

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...

Läs mer

Objektorienterad programmering D2

Objektorienterad programmering D2 Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste

Läs mer

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS http://www.cwdata.se Konsolfönstret

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS http://www.cwdata.se Konsolfönstret Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS http://www.cwdata.se Konsolfönstret Med ett kommandobaserat gränssnitt menas ett helt textbaserat gränssnitt. Istället för att klicka

Läs mer

Microsoft Publisher. Laborationskompendium för digital behandling av publikationer. Detta exemplar tillhör:

Microsoft Publisher. Laborationskompendium för digital behandling av publikationer. Detta exemplar tillhör: Mittuniversitetet ITM Telefon 0771-97 50 00 Microsoft Publisher Laborationskompendium för digital behandling av publikationer Detta exemplar tillhör: HT 2006 Innehållsförteckning Objekt 1 Textblock 2 Tabeller

Läs mer

DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015

DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015 DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015 Fyll i ditt namn och personnummer med bläck eller motsvarande. OBS: Om inte denna kvittenssida tas med vid redovisningen får

Läs mer

ClaroRead Plus Mac Manual. Artikel.nr. 12501

ClaroRead Plus Mac Manual. Artikel.nr. 12501 ClaroRead Plus Mac Manual Artikel.nr. 12501 1 Välkommen till ClaroRead Plus Välkommen till ClaroRead Plus för Mac. ClaroRead Plus är till för att göra din dator mer lättanvänd. Programmet arbetar nära

Läs mer