Introduktion till MATLAB Föreläsning 1 FY021G Ingenjörsvetenskap [email protected] Reviderad 2007-09-23 1 Dagens agenda • • • • • • MATLAB - vad ska det vara bra för? Arrayer, matriser och vektorer Manipulation av arrayer Matematiska arrayoperationer Villkor Slingor 2 Examination • En enkel dugga (kort prov, ca 20 minuter) inleder labbtillfället • Duggans uppgifter har liknande karaktär som dokumentet ”Introduction to the MATLAB language – examples and exercises”. • För tillträde till labben krävs 50% godkänt på duggan. • För VG på labben krävs minst 75% rätt på duggan. Ligger man strax under gränsen kan en mycket väl genomförd laboration ”kompensera”. • G ger 1 poäng och VG 2 poäng bidrag till poängsiffran som slutbetyget grundar sig på. 3 Förberedelse inför labben • Förberedelse inför duggan: – Repetera exemplen i dokumentet ”Examples and exercises”. – Repetera denna slide show (publiceras i WebCT i eftermiddag). • Läs ev. i läroboken ”Introduction to MATLAB 7”, kap 1 till 6 inför labbtillfället om det som känns oklart. • Läs i läroboken kapitel 8.2-8.3, om regressionsanalys • MATLAB finns i PC-labbsalarna om du redan nu vill testa. 4 Vad är MATLAB? • MATrix LABoratory • En avancerad och programmerbar ”miniräknare” • Hanterar bl.a. vektor- och matrisalgebra, samt komplexa tal. • Utvecklades i slutet av 70-talet. • Idag vanligt inom forskning och utveckling, främst för – numeriska beräkningar, och – visualiering av data med diagram 5 Tillämpningsområden • Grafisk visualisering av data • Numerisk analys • Interpolation, extrapolation, regressionsanalys (i denna kurs) • Statistik • Optimering • Datorsimulering • Signalbehandling • Styr- och reglerteknik • Kommunikationssystem • Bildbehandling • M.m. 6 Hur MATLAB står sig i en jämförelse… • Fördelar: – – – – – • Många toolboxar (funktionsbibliotek) finns utvecklade för olika tekniska specialområden. Vanligt förekommande i forskningsvärlden Kan både användas som kommandostyrd ”miniräknare” och programmeras Enkelt, dynamiskt typat, programmeringsspråk Kompakt programmeringsspråk Alternativ till MATLAB: – Hårt typade programmeringsspråk såsom FORTRAN, C, C++ och Java ger snabbare beräkningar • – – GNU Octave, som har öppen källkod, och är delvis kompatibelt MathCAD, Maple och Mathematica är bättre på symboliska (icke-numeriska) beräkningar • – – FORTRAN (utvecklades på 50-talet) hade förr större funktionsbibliotek MathCAD har ett icke-kommandobaserat användargränssnitt, ett slags ”kalkylblad för matematiker” Kalkylbladsprogram såsom Excel används och är mer utbredda, men mycket mer begränsade. Avancerade miniräknare 7 Så här ser MATLAB ut Workspace: Variabellista Command history Command window: Här skriver du in kommandon 8 Fler MATLAB-fönster som kan öppnas Figure window Array editor M-file editor 9 Hur får man hjälp? help funktionsnamn Visar oformaterad text i kommandofönstret doc funktionsnamn Visar HTML-dokumentation i en särskild browser. 10 Operationer i MATLAB Matematisk notation MATLAB-syntax 3 2 4 6 8 144 3 2*4+3/8-6 sqrt(144) 2^3 2 e 0.5 exp(.5) 11 Logaritmer ln( 2.79) log(2.79) log(1000) log10(1000) log 2 (1024) log2(1024) 12 Trigonometriska funktioner Matematisk notation MATLAB-syntax sin( ) 2 cos( ) tan( ) 4 cot( ) 4 asin(1) sin(pi/2) cos(pi) tan(pi/4) cot(pi/4) asin(1) 13 Dynamiskt typade variabler • En variabel är en del av datorns arbetsminne • MATLABs variabler kallas Arrayer, vilket betyder att de kan bestå av flera element (flera värden) • MATLAB har dynamiskt typade arrayer, vilket innebär: – Första gången man tilldelar en array ett värde så definieras den, dvs det skapas en plats i datorns minne för variabeln. • Exempel: minVariabel = 1 – Arrayerna kan automatiskt ändra storlek, utan att särskilda deklarationskommandon krävs • Exempel: minVariabel = [ 1 3 7 ] % minVariabel utökas till en radvektor bestående av 3 element 14 Base Workspace • Base Workspace är de variabler som är åtkomliga från kommandofönstret • Så fort man definierar en variabel så visas den i delfönstret Workspace • Radera alla variabler ur base workspace med: clear 15 Val av variabelnamn • MATLAB skiljer mellan versaler och gemener, alltså variabeln area är inte samma som variabeln Area • Ord som används till annat är olämpliga som variabelnamn t.ex: ans, pi, i, j, plot. • Första tecknet i variabelnamnet måste vara en bokstav • Övriga tecken kan vara siffror eller understreck _. • Svenska tecknen Å, Ä, Ö kan inte användas. 16 Skalär, vektor och matris • En skalär är en array av storleken 1x1, dvs ett element. – Exempel: x = 1. • En vektor av längden N är en-dimensionell array av storleken 1 x N (radvektor) eller en N x 1 (kolumnvektor). – Exempel: x = [10 20] är en radvektor av längd 2. – y = [10;20;30] är en kolumnvektor av längd 3. • En matris är en tvådimensionell array av storleken N x M. Skalärer och vektorer är specialfall av matriser. • En tredimensionsionell array av storlek M x N x L består av L matriser, var och en av storlek M x N. • En tom array har noll element. – Exempel: tom_matris = [] 17 Definiera matriser i MATLAB • [ ] används vid definiering av vektorer och matriser. Matematisk notation 2 4 1 9 1 0 2 4 3 1 8 MATLAB-syntax [2 4 1; 9 -1 0] [2 4 3 1 8] 18 Mer om matriser Anta följande matris [2 3 5; 7 6 1] Transponering av vektorn kan man lätt få med hjälp av transpose operatorn ’ 2 3 5 7 6 1 2 7 2 3 5 3 6 7 6 1 5 1 [2 3 5; 7 6 1]’ 19 Manipulering av matriser M(4) 11 12 13 M 14 15 16 17 18 19 M(1:4:9) 11 12 13 M 14 15 16 17 18 19 M(2:3,1:2) 11 12 13 M 14 15 16 17 18 19 20 Manipulering av matriser 11 12 13 M 14 15 16 17 18 19 11 12 13 M 14 15 16 17 18 19 11 12 13 M 14 15 16 17 18 19 M(4)=99 M(1:4:9)=[ 36 2] M(2:3,1:2)=[ 3 6;2 4] 11 99 13 M 14 15 16 17 18 19 3 12 13 M 14 6 16 17 18 2 11 12 13 M 3 6 16 2 4 19 21 Multiplikation och addition med skalär Exempel: [1 2;3 4] * 0 resulterar i ans = 0 0 0 0 Exempel: [1 2;3 4] + 10 resulterar i ans = 11 12 13 14 ”Snygga” MATLAB-program utnyttjar denna typ av arrayoperationer istället för slingor (loopar). Det ger kompakta och ofta mer lättöverskådliga och snabba program. 22 Inre vektorprodukt Radvektor * Kolumnvektor = Skalär Vektorerna måste ha samma längd, annars ”Error” Exempel: [1 2 3]*[10; 0; 20] resulterar i 1 · 10 + 2 · 0 + 20 · 3 = 70 Matematisk definition: a1 a2 aN b1 N b2 a b a b a b k k 1 1 2 2 k 1 bN a N bN 23 Yttre vektorprodukt Kolumnvektor av längd M * Radvektor av längd N = Matris av storlek M x N Kompakt notation för alla tänkbara produktkombinationer av elementen Exempel: [10; 20] * [1 2 3] resulterar i 10 1 10 2 10 3 10 20 30 20 1 20 2 20 3 20 40 60 Matematisk definition: a1 a2 aM b b 1 2 a1b1 ab bN 2 1 aM b1 a1b2 a2b2 aM b2 a1bN a2bN aM bN 24 Matrismultiplikation 1 3 1 3 2 1 18 0 1 5 4 0 5 19 0 6 Så här skriver man ovanstående i MATLAB: [1 3 2; 5 4 0] * [1 3; 0 1; 0 6] Kombination av inre och yttre produkt. Antal kolumner i första matrisen måste vara lika med antal rader i den andra. Annars Error. Hur man räknar ut? Vänta till kursen Linjär algebra. Visar detta enbart som varning för operatorn * . 25 Andra elementvisa arrayoperationer Varning: På samma sätt som * så resulterar / och ^ applicerade på arrayer inte i ”vanlig” operationer, utan i vektor- och matrisoperationer enligt definitioner som ni får lära er i kursen Linjär Algebra. ./ ger elementvis division. Ex: 1 ./ [2 4] ger [0.5 0.25] .^ ger elementvis upphöjt till. Ex: [2 3] .^ 2 ger [4 9]. Tag därför för vana att sätta en punkt före * / och ^ . + och – hanterar elementvisa arrayoperationer, och behöver inte någon punkt. 26 För fler exempel Se dokumentet ”Introduction to MATLAB language: Examples and exercises”. 27 Kommentarer i MATLAB • I MATLAB är allt som står till höger om tecknet % på en rad kommentarer, dvs anteckningar som inte påverkar hur programmet körs. • Det är en god vana att skriva rikligt med kommentarer. • Kommentarer kan underlätta för andra att förstå tanken bakom koden. • Kommentarer kan också utgöra ett minnesstöd – man glömmer lätt hur man en gång tänkt. 28 Villkor – if-satser • Man behöver ofta göra selektion, dvs val av vad som ska utföras beroende på ett logiskt villkor. price=input('What is the price of the book? '); if price >= 135 disp('very expensive but') end disp(['I buy one copy of the book.']) • disp betyder display, dvs visa texten. • Apostrofer omger textsträngar, som är vektorer bestående av alfanumeriska tecken. 29 If - syntax if villkor sats sats end if villkor sats sats else sats end if villkor1 sats elseif villkor2 sats end ”Elseif” besparar ett ”end” 30 Relationsoperatorer och logiska operatorer • • • • • • • • • "<" - mindre än "<=" – mindre än eller lika med ">" - större än ">=" – större än eller lika med "==" – test om lika med ("=" betyder tilldelning) "~=" - not equal to "&" - AND "|" - OR "~" - NOT 31 Exempel på if-else • I vissa lösningar behöver man ibland skriva ett programmet där ett val måste göras beroende på ett villkor uppfylls eller inte. age = input(’How old are you? ') ; if age >= 20, disp(’Welcome to systembolaget') else d = 20-age; disp([’Sorry.’] disp([’You must wait ' int2str(d) ' years']) end • Semikolon i slutet av en sats undertrycker utskrift. • Funktionen int2str(d) omvandlar heltalet d till en teckensträng. 32 Switch - Case if x == värde1 sats A elseif x == värde2… Ger samma resultat som: | x == värde 3 sats B else sats C end switch x case värde1 sats A case {värde2,värde3} sats B otherwise sats C end 33 Iteration - slingor • Om man vill upprepa något flera gånger använder man sig av en s.k. iteration eller slinga (loop på engelska) • Det finns två typer av slingor i MATLAB: – for – while 34 Slingor - syntax • While-sats while logiskt_uttryck sats sats end • For-sats for variabel = vektor, sats sats end 35 Exempel på for-slinga Matematisk notation: xk k 2 , för alla k 1, 2, 3 Utskrift: x = 1 x = MATLAB-kommandon: for k=1:3 x(k)= k^2 end 1 4 1 4 x = 9 36 För fler exempel Se dokumentet ”Introduction to MATLAB language: Examples and exercises”. 37