MATLAB • MATrix LABoratory MATLAB • Räknedosa för matriser miljö och “programmeringsspråk” • Visualisering av data Introduktion avancerad grafik Hösten 2010 Tillämpning Matlab 2 Interpreterande skriptspråk • Ingen kompilator • En sats evalueras (interpreteras/tolkas) sats för sats när skriptet körs Introduktion till Matlab • Kallas för interpreterande språk Hösten 2010 Tillämpning Matlab 3 Hösten 2010 Tillämpning Matlab Språket - kommandosyntaxen Variabler • Stor uppsättning kommandon och funktioner • Ingen variabeldeklaration avancerade algoritmer inriktat mot linjär algebra Finansiell matematik Statistik Simulering etc. >> A = 7.5*2 >> 7.5*2 (resultatet i variabel ans) • Enkelt konstruera egna rutiner och funktioner (M-filer) Hösten 2010 Tillämpning Matlab som i Python variabler definieras genom tilldelning • Tilldelningar sker med = • Resultat utan tilldelning tilldelas variabeln ans • Många tillämpningar i applikationer 4 • semikolon undertrycker utskrifter • case-sensitive 5 Hösten 2010 Tillämpning Matlab 6 Vektorer …variabler • Den grundläggande datatypen är flyttal • En sekvens av data • Kan vara ordnad i rader eller kolumner • Skapas omslutna av [ och ] normalt 16 decimaler C:double, Python: float • Elementen är i de flesta fall reella (kan även vara komplexa) >> v = [1, 2, 3, 4] • Indexeras med ( och ) med start från 1 Många andra inbyggda datatyper (olika former av heltal, tecken, etc.) >> v(1) 1 Jämför med listor i Python Behöver inte deklarera storlek som i C Hösten 2010 Tillämpning Matlab 7 Tillämpning Matlab Hösten 2010 ...vektorer Skalärer • En radvektor kan göras om till en kolumnvektor • En vektor av längd 1, kallas skalär, dvs ett vanligt tal. w = v' >> v = [4] 4 >> v*[1,2,3] 4 8 • Kan även skapa en kolumnvektor direkt w = [1; 2; 3; 4] Hösten 2010 Tillämpning Matlab 9 start : steg : stopp Jämför med range i Python: >> range(0,10,2) Matlab: >> 0:2:9 start : stopp • Skalär-vektor-operation (+, -, *, /) >> v = [1 2 3] >> 4 * v + 3 ans = 7 11 15 • vektor-vektor-operationer (+, -, .*, ./,.^) Steglängden är 1. >> v + v ans = 1 >> v.*v; ans = 1 >> v.^3 ans = 1 x = -pi/2:pi/30:pi/2 Ger en radvektor Hösten 2010 10 Elementvisa operationer : operatorn – Skapa vektorer Ger en följd av värden från start till stopp med steglängd steg. 12 Tillämpning Matlab Hösten 2010 8 Tillämpning Matlab 11 Hösten 2010 4 6 4 9 8 27 OBS! >> v * v Betyder en matrisoperation som hör till linjär algebra. Ger vanligtvis ett fel elller ovänatade resultat Tillämpning Matlab 12 Strängar Elementvisa operationer x = linspace(0,1); % OBS! Radvektor y = x.^n.*exp(x); % OBS! Radvektor • Textsträngar representeras av vektorer av tecken Samma som i C • Strängar skapas Samma som i Python med enkla citationstecken >> s = 'Text' >> s(1) ans = T Hösten 2010 Tillämpning Matlab 13 The matrix Hösten 2010 Tillämpning Matlab Enstaka element i matrisen • En matris är en samling rad- eller kolumnvektorer • Alla vektorer måste vara lika långa • Bildar en grid av värden variabel(radindex, kolumnindex) A(2,3) Observera! skillnad mellan tilldelning och adressering >> A = [1, 2, 3; 4, 5, 6; 7, 8, 9] A = 1 2 3 4 5 6 7 8 9 Hösten 2010 14 Tillämpning Matlab 15 n × n-matris med ettor ones(m,n) m × n-matris med ettor zeros(n) n × n-matris med nollor Tillämpning Matlab 16 Indexering Att skapa matriser ones(n) Hösten 2010 • Vi kan indexera i en vektor med en skallär >> v = [4, 5, 6]; >> v(3) • En skallär var också en vektor, alltså zeros(m,n) m × n-matris med nollor rand(n) n × n-matris med slumptal rand(m,n) m × n-matris med slumptal >> v([2, 3]) ans = 5 6 • eller ännu smidigare med kolonoperatorn >> v = [1, 2, 3]; >> v(2:3) ans = 5 6 Hösten 2010 Tillämpning Matlab 17 Hösten 2010 Tillämpning Matlab 18 alla Del av matrisen • Att lära sig jobba med jämföresleoperatorer och kolonoperatorn ger ett väldigt kraftfullt verktyg när vi jobbar med datamängder i:te raden A(i,:) j:te kolumnen A(:,j) >> v = [3 2 >> v > 3 0 0 >> find(v > 3 5 >> v(v > 3) 3 2 >> v(find(v 3 2 delmatris A(i:j,k:l) Hösten 2010 Tillämpning Matlab 19 Konkatenera och ersätta 1 0 = 0 0 1 0 == 0)) = 9 9 1 9 Hösten 2010 2 2 Tillämpning Matlab 20 exempel1.m • Anropar skriptet med filens namn utan ändelse >> exempel1 25 • Kan byta katalog med cd • Kommentarer inleds med % och räcker resten av raden 21 Hösten 2010 Tillämpning Matlab 22 Söka hjälp who/whos >> what M-files in the current directory C:\Dokument\PTX\ht10 exempel1 >> pwd ans = C:\Dokument\PTX\ht10 >> cd .. >> pwd ans = C:\Dokument\PTX Tillämpning Matlab 0 v = 1:2:10; disp(sum(v)); what/pwd/cd Hösten 2010 1 3) • Vi kan utföra kommandon interaktivt eller samla dem i skrip-filer (.m-filer) • Textfiler, vanligtvis med en sats per rad >> A = [1 2 3; 4 5 6] A = 1 2 3 4 5 6 >> v = [A(1,:) A(2, :)] v = 1 2 3 4 5 6 >> B = [A(1,1:2); A(2, 2:3)] B = 1 2 5 6 >> v(3:4) = [8 8] v = 1 2 8 8 5 6 Tillämpning Matlab 7 1 8 2]; Att skriva skript • (Del)matriser och (del)vektorer kan enkelt byggas i hop till nya matriser och vektorer Hösten 2010 Att arbeta med data Listar existerande variabler help Skriver ut hjälp om en funktioner och matlab lookfor 23 Söker efter sökord bland existerande funktioner Hösten 2010 Tillämpning Matlab 24 2D Grafik plot 2D Grafik Tillämpning Matlab Hösten 2010 Ritar ut en mängd av ordnade tal-par >> x = 1:0.01:3; >> y = 1./x; >> plot(x, y, 'g:') 25 Tillämpning Matlab Hösten 2010 Argument till plot … 2D grafik • Tar ett strängargument • Flera funktioner för att anpassa plotten Punkttyper Linjetyper Funktion Beskrivning . punkt - heldragen linje * asterisk -- streckad linje xlabel Sätter etiketten på x-axeln square fyrkant -. punkt-streckad linje ylabel Sätter etiketten på y-axeln diamond ruta : prickad linje titel Sätter etiketten på plotten hexagram stjärna Färgtyper o ring g grön + plusstecken m lila x kryss b blå < triangel vänster c turkos > triangel höger k svart ^ triangel upp y gul v triangel ned r röd Hösten 2010 Tillämpning Matlab • Möjlighet att spara plottar för att skriva ut flera kurvor i samma graf med hold 27 2D Grafikexempel >> >> >> >> 26 Hösten 2010 Tillämpning Matlab 28 Tillämpning Matlab 30 2D Grafik x = 1:0.01:3; y1 = 1./x; y2 = 1./x.^2 plot(x, y1, 'k:', x, y2, 'g-') >> plot(x, y1, 'k:') >> hold on >> plot(x, y2, 'g-') Hösten 2010 Tillämpning Matlab 29 Hösten 2010 ...2D Grafik • Fler grafikfunktioner bar – skapar stapeldiagram Kontrollstrukturer och funktioner pie – skapar cirkeldiagram stem – skapar ett stamdiagram Tillämpning Matlab Hösten 2010 31 Kontrollstrukturer... if logiskt uttryck satser end for variabel = vektor for (i=1; i<=n; i=i+2) { satser } satser for i = 1:2:n satser if logiskt uttryck satser else satser end for i in range(1, n+1, 2): satser end if logiskt uttryck satser elseif logiskt uttryck satser end for i = 1:n satser end Hösten 2010 Tillämpning Matlab 33 …kontrollstrukturer v = [1, 2, 3] if v(1) == 1 satser elseif v(2) == 2 satser else satser end Hösten 2010 Tillämpning Matlab Hösten 2010 34 Jämförelseoperatorer int v[3] = {1,2,3}; if (v[0] == 1) { satser } else if (v[1] == 2) { satser } else { satser } v = [1, 2, 3] if v[0] == 1: satser elif v[1] == 2: satser else: satser Tillämpning Matlab 32 …kontrollstrukturer • for – iterering över vektor end Tillämpning Matlab Hösten 2010 35 Operator Matlab C Python Lika med == == == Icke lika med ~= != != Större än > > > Mindre än < < < och & && and eller | || or Hösten 2010 Tillämpning Matlab 36 …kontrollstrukturer... while logiskt uttryck satser end x=0.1 while (x < 3) { x *= 1.1 } x=0.1 while x < 3 x = x*1.1 end x=0.1 while x < 3: x *= 1.1 Tillämpning Matlab Hösten 2010 Funktioner 37 (annars en kommandofil) Undantaget kommentarer function [utparam] = namn(inparam) % Pedher Johansson, 2010 • noll, en eller flera inparametrar • noll, en eller flera utparametrar • anropas med namn(parametrar) y = a.*x.^2 + b.*x + c • ingen return-sats behövs, utan utparameterns värde används val = namn(arg1, arg2) Tillämpning Matlab Hösten 2010 39 …funktioner Hösten 2010 Tillämpning Matlab 40 Anonyma funktioner >> help poly2 POLY2 second order polynom of x • Enkla egna funktionsuttryck kan definieras som anonyma funktioner Y = POLY2(X,A,B,C,D) computes Y such that Y = A*X^2+B*X+C • Funktionen tilldelas en variabel See also POLY, ROOTS >> x = -1:0.1:1; >> y = poly2(x, 1, 0, 0); >> plot(x, y) >> f = @(x) 1./x.^2 >> x = 0:0.01:1 Kommentarer först i funktionen skrivs ut när man använder help Jmf med Python Hösten 2010 38 function y = poly2(x, a, b, c) % POLY2 second order polynom of x % % Y = POLY2(X,A,B,C,D) computes Y % such that Y = A*X^2+B*X+C % % See also POLY, ROOTS • En funktion - en fil • Filnamn ska vara lika med funktionsnamn • Första raden skall innehålla ordet function Tillämpning Matlab …funktioner Funktioner Hösten 2010 Tillämpning Matlab 41 >> y = f(x) Hösten 2010 Tillämpning Matlab 42 Dessutom • Enkelt att skapa GUI knappar menyer pop-up menyer inmatningsfält • Programbibliotek kan läggas till (TOOLBOXES) Hösten 2010 Tillämpning Matlab 43