Introduktion till Matlab Föreläsning 1 Ingenjörsvetenskap Magnus.Eriksson@miun.se 1
Dagens agenda MATLAB- vad ska det vara bra för? Arrayer, matriser och vektorer Manipulation av arrayer Kompakta arrayoperationer Slingor 2
Dugga och labb En enkel dugga (kort prov, ca 20 minuter) ges i början av första labtillfä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, VG ger 2 poäng bidrag till poängsiffran för kursens slutbetyg. 3
Förberedelse inför labben Förberedelse inför duggan och labb 1: Repetera exemplen i ovanstående dokument. 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älle 1 om det som känns oklart. Matlab finns i PC-labbsalarna om du redan nu vill testa. Inför labbtillfälle 2, läs i läroboken kapitel 8.2-8.3, om regressionsanalys 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: Enkelt, dynamiskt typat, programmeringsspråk Kan både användas som miniräknare och programmeras Många toolboxar (funktionsbibliotek) finns utvecklade. Mycket utbredd Alternativ till MATLAB: Hårt typade programmeringsspråk såsom FORTRAN, C, C++ och Java ger snabbare beräkningar FORTRAN (utvecklades på 50-talet) hade förr större funktionsbibliotek GNU Octave, som har öppen källkod, och är delvis kompatibelt MathCAD, Maple och Mathematica är bättre på symboliska (ickenumeriska) beräkningar 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 window: Här skriver du in kommandon Command history 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 2 4 + 3 8 6 144 3 2 Matlabsyntax 2*4+3/8-6 sqrt(144) 2^3 11
Logaritmer ln(2.79) log(2.79) log(1000) log 2 (1024) log10(1000) log2(1024) 12
Trigonometriska funktioner Matematisk notation sin( π 2 ) cos(π) tan( π 4 ) cot( π 4 ) asin(1) Matlab syntax 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 är nu en radvektor bestående av 3 element 14
Workspace 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 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 alltid vara en bokstav, inga siffror eller specialtecken som $,@,, får användas. 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 storleken 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 Matlabsyntax 2 4 1 9 1 0 ( 2 4 3 1 8) [2 4 1; 9-1 0] [2 3 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 3 5 7 6 1 2 3 5 7 6 1 Τ 2 7 3 6 5 119
Manipulering av matriser M(4) M(1:4:9) M(2:3,1:2) 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 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)=[ 3 6 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 = 10 20 30 40 Snygga MATLAB-program utnyttjar 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: b1 b a a a a b ab a b a b N 2 1 2 N i = k k = 1 1 + 2 2 + + N N k = 1 ( ) b N 23
Yttre vektorprodukt Kolumnvektor av längd N * Radvektor av längd M = 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 Matematisk definition: = 20 1 20 2 20 3 20 40 60 a1 ab 1 1 ab 1 2 ab 1 4 a2 a2b1 a2b2 a2b4 i( b1 b2 bn ) = a a b a b a b N N 1 N 2 N N 24
Matrismultiplikation 1 3 1 3 2 0 1 5 4 0 = 1 18 5 19 0 6 Så här skriver man ovanstående i Matlab: [1 3 2; 5 4 6] * [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 de flesta programspråk finns det möjlighet att skriva kommentarer blandad i koden. Kommentarer är till för att andra som ska redigera programmet ska få lite lättare att förstå tanken bakom koden. Kommentarer kan också vara ett minnesstöd man glömmer lätt hur man har tänkt. I Matlab är allt som står till höger om tecknet % kommentarer. 28
Villkor if-satser I vissa lösningar behöver man ibland skriva ett program där ett val måste göras beroende på ett villkor uppfylls eller inte. 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.']) 29
If-syntax if villkor sats sats end if villkor sats sats else sats end if villkor1 sats elseif villkor2 sats end 30
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. T.ex: age = input( How old are you? ') ; if age >= 20 disp('welcome to systembolaget') else a = 20-age ; disp(['sorry, you must wait ' num2str(a) ' years']) End Semikolon i slutet av en sats undertrycker utskrift. 31
Relationsoperatorer "<" - 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 32
Slingor Om man vill upprepa något flera gånger använder man sig av en slinga (loop på engelska) Det finns två typer av slingor i Matlab: for while 33
Slingor - syntax While-sats while logiskt_uttryck sats sats end For-sats for variabel = vektor, sats sats end 34
Exempel på for-slinga Matematisk notation: x = k 2, föralla k = 1,2,3 k MATLAB-kommandon: for k=[1 2 3], x(k)= k^2 end Utskrift: x = 1 x = 1 4 x = 1 4 9 35
För fler exempel Se dokumentet Introduction to Matlab language: Examples and exercises 36