MATLAB En kort praktisk introduktion Olof Hultin olof.hultin@ftf.lth.se Omarbetad efter original av Henrik Persson FAFA10 2014-11-06
Dagens föreläsning K404: Kort introduktion till MATLAB - ca 40 min H212: Introduktionsövningar - ca 40 min H212: Avslutande återkoppling & tips - ca 10 min Mål: Att komma igång med grunderna i MATLAB!
Matrix Laboratory Skapat av MathWorks MATLAB Numeriska beräkningar med avancerade kommandon Möjlighet att skriva program Viktigt verktyg för ingenjörer Används där man med algebraiska metoder inte kan få fram ett exakt svar
MATLAB i FAFA10 Föreläsning kort introduktion/introduktionsövningar Övningsuppgifter/redovisningsuppgifter 11+2 uppgifter Redovisning till övningsledare senast 28/11 Datorprojekt Modellera kvantmekaniska fenomen Tilldelas den 25/11 Laborationer Lösa Schrödinger-ekvationen Plotta mätdata
Övningsuppgifter Texthäfte + övningar På hemsidan Redovisning 2 redovisningsuppgifter Stickprov på övriga (spara all kod!) Redovisa för övningsledare Senast 28/11 Tänk på att redovisningen tar ca 10 minuter
Datorprojekt Tilldelning och introduktion till projekt, 25/11 Tre projekt: Tidsutveckling av vågpuls Elektriska fält Bundna tillstånd Redovisas 19/12
Installation på din egen dator Gratis för universitetsstuderande: http://program.ddg.lth.se/ Open Source-variant: Octave http://www.gnu.org/software/octave/ Finns även för android och ios
MATLAB I PRAKTIKEN
Vektorer & Matriser I Skapa minvektor = [1 2 3 4 5]; minmatris = [11 12 13; 21 22 23; 31 32 33]; Hämta element minvektor(4) ans = 4 minmatris(2,1) ans = 21 minmatris(1:2,1) ans = 11 12 Ändra element minmatris(2,1) = 78 minmatris(2,:) = 5 Rad, kolumn
Vektorer & Matriser 2 Skapa lång regelbunden vektor minvektor1 = 0:0.1:10 0 0.1 0.2 9.8 9.9 10 minvektor2 = linspace (0,10,100) 0 0.1 0.2 9.8 9.9 10 Bra om man inte vill räkna ut ett jämnt intervall, t.ex x = linspace(-2*pi,2*pi, 100) Eller x = (-2*pi:((2*pi-(-2*pi))/100:2*pi)
Allmänt om tal 5/2 = 2.5 inte 2,5 5^2 = 25 123e-3 = 123*10^-3 = 0.123 exp(1) = 2.7182 ^1 log(exp(1)) = 1 sqrt(81) = 9 Fördefinierade konstanter pi=3.1415926535 i^2 = -1 j^2 = -1
Operationer >>minvektor = [1 2 3 4 5]; >>minvektor * minvektor??? Error using *_ Inner matrix dimensions must agree. 1 2 3 4 5 6 7 8 = 1 5 + 2 7 1 6 + 2 8 3 5 + 4 7 3 6 + 4 8 = 19 22 43 50 1 2 3 4 5 1 2 3 4 5 Skalärprodukt av två radmatriser går inte!
Operationer >>minvektor = [1 2 3 4 5]; >>minvektor * minvektor??? Error using ==> mtimes Inner matrix dimensions must agree. Skalärprodukt med två radmatriser går inte! >>minvektor * minvektor Ans = 55 1 2 3 4 5 1 2 3 4 5 = 1 1 + 2 2 + 3 3 + 4 4 + 5 5 = 55 radmatris kolonnmatris = skalärprodukt = 1*1 + 2*2 + 3*3 +4*4 + 5*5
Operationer >>minvektor = [1 2 3 4 5]; >>minvektor * minvektor??? Error using ==> mtimes Inner matrix dimensions must agree. Förklaring: radmatris radmatris, finns inte >>minvektor * minvektor' Ans = 55 Förklaring: radmatris kolonnmatris = skalärprodukt = 1*1 + 2*2 + 3*3 +4*4 + 5*5 >>minvektor.* minvektor Ans = 1 4 9 16 25 Förklaring: ny vektor skapad genom elementvis multiplikation OBS! samma sak gäller för./ och.^
Strängar Inmatning minstring1 = 'Hello'; minstring2 = 'world'; mitttal = 42; Konkatenering minstring3 = [minstring1 ' ' minstring2 '!'] Skriva ut tal minstring4 = ['Svaret är ' num2str(mitttal)]
Grafer x = (-2*pi:0.1:2*pi); y = sin(x); plot(x,y) hold on plot(x,cos(x),'r--', 'linewidth',2) legend('sin(x)', 'cos(x)') xlabel('x-axel') ylabel('y-axel') title('sin(x) och cos(x)') För att ändra massa olika saker i grafen: view property editor Kommandot hold all gör att alla grafer man plottar I ett fönster får olika färg automatiskt
Grafegenskaper Plot(x,y,'färgkod och markör','egenskap',värde på egenskap,'ny egenskap', värde på ny egenskap) Några exempel: Färger Markörer Vanliga Egenskaper r = röd. = punkt Markersize = storlek på markör k = svart -- = streckad linje Linewidth = tjocklek på linje g = grön < = triangel Markeredgecolor = kant på markör y = gul s = fyrkant Markerfacecolor = fyllnad på markör Plot(x,y, 'r--', 'linewidth',2) Ger en röd streckad linje med tjocklek 2
Help plot b blue. point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star (none) no line y yellow s square k black d diamond w white v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram
Lite logik minbool = true; if(minbool ~= false) disp('not false') end mitttal = 47; if(mitttal >= 0) disp('positivt') elseif(mitttal < 0) disp('negativt') else disp('inget tal') end Logiska kommandon och & eller Lika med == inte lika med ~= Större än > Mindre än < Större/lika >= Mindre/lika <=
For & while Loopen nedan går från 1 till 10 i steg om 1 for i = 1:10 disp(['varv nr ' num2str(i)]) end Loopen nedan går ifrån 1 till 10 i steg om 2 for i = 1:2:10 disp(['varv nr ' num2str(i)]) end k=1; while k<=10 disp(['varv nr ' num2str(k)]) k = k+1; end
Skriv din kod i en.m-fil! Skapa ny.m-fil i din MATLAB-mapp OBS: Filnamnet får inte börja med en siffra Exekvera koden med run!
Funktioner Det finns många inbyggda funktioner i MATLAB Kallas genom >>function(indata1,indata2,..) ans = utdata För att spara ditt svar: >>[x,y]=function(indata) x = utdata1 y = utdata2 En funktion kan ha flera set av indata Jämför överlagring i Java
Skapa en egen funktion Inparametrar och utparametrar Variabler bara lokalt i funktionen Spara i din MATLAB-mapp så kan du alltid anropa funktionen!
Funktion - exempel I.m-fil med namn myfnc.m: function [ut1,ut2] = minfnk(in1, in2) disp('här sker vår beräkning') disp('när beräkningen är klar får vi ut svaren:') ut1=in1+in2; ut2=in1-in2; end I kommandoprompten: >>[x,y]=myfnc(5,5) Här sker vår beräkning När beräkningen är klar får vi ut ett svaren: x = 10 y = 0 Vi anropar filnamnet!
Underfunktioner Möjligt att ha flera underfunktioner i samma.m-fil Underfunktioner går bara att kalla på från samma.m-fil
Underfunktion - exempel I m-filen myfun.m function [utdata] = myfun(indata1, indata2) %tar in två variabler och skickar dem till den egna underfunktionen %Sedan adderas de båda variablerna och skickas ut som svar till %kommandoprompten [x,y] = minunderfnk(indata1, indata2); utdata = x+y; end function [ut1,ut2] = minunderfnk(in1, in2) %underfunktion tar in två parametrar, gör saker och skickar sedan tillbaka %två parametrar ut1=in1+in2; ut2=in1-in2; end I kommandoprompten: >>myfun(5,5) ans = 10
DATORÖVNING, H212
AVSLUTANDE KOMMENTARER - ÅTERKOPPLING OCH TIPS
Vanliga fel Vid multiplikation av två vektorer: * Istället för.* * ger vektormultiplikation,.* sker elementvis Samma sak för./ och.^ Decimalkomma istället för punkt: 2,5 är talen 2 och 5 2.5 är ett decimaltal
Vanliga fel >>Log(10) = 2.3 %dvs ln(10) i vanlig notation >>Log10 ( 10) = 1 %dvs log(10) i vanlig notation >> 50e-3 = 0.05 %dvs 5 10-3 >>50*exp(3) 1000 % dvs 50e 3
Tips I Kommentera med % Städkommandon: close all %stäng alla figurer clear all %ta bort alla variabler clearvars except x y %ta bort alla variable UTOM x & y clear mitttal1 mitttal2 %ta bort valda variabler clc %ta bort alla kommandon i kommandoprompten Semikolon efter rad = ingen utskrift Ctrl + C = avbryt
Tips II Skriv allt i m-filer Enkelt gå tillbaka och ändra om man gjort fel Variabel-editor dubbelklicka på variabel Bra för inmatning av data (t.ex. i laborationerna) Använd bra variabelnamn & kommentera koden
Tips III Upp/ner = gå igenom tidigare kommandon Kan också börja skriva följt av uppåt-pil: >>plo går genom alla kommandon du skrivit som börjar med plo TAB = autokomplettera Skriv början på ett variabelnamn/inbyggd funktion, tryck TAB I.m-fil: markera kod och högerklicka Automatisk kommentering (ctrl+r) Ta bort kommentering (ctrl+t) Automatiskt radinhopp (ctrl+i)
Tips IV Lär dig nya plotkommandon: 1. Skapa figur 2. Lägg till axlar, legend etc. 3. View property editor korrigera ex typsnitt, graf 4. File generate code I den skapade filen finns alla plotkommandon du behöver! (Dock lite svårtolkade ibland.)
Guide till fina grafer Loren Shure: http://blogs.mathworks.com/loren/2007/12/11/making-pretty-graphs/
KÖRT FAST?
Hjälp i MatLab I matlab >>help plot % visar textfil om kommandot help kräver att man vet vad kommandot heter >>lookfor histogram%söker igenom alla funktionsbeskrivningar och letar efter strängen hist
Hjälp utanför MATLAB Hur skriver man ψ? Googla Matlab greek letters >>title( \psi(x) ) Fråga övningsledare Fråga varandra
Lär dig mer Per Jönsson, MATLAB beräkningar inom teknik och naturvetenskap Kurslitteratur i Nanoteknikens Matematiska Metoder UB/Fysikbiblioteket/Studiecentrum 474:- på Adlibris Distanskurs på Uppsala Universitet Användning av MATLAB, 7.5hp Både HT och VT, 25% studietakt. Ingen förkunskap http://www.uu.se/utbildning/utbildningar/selma/kurser/?kkod=1td311&lasar=14/15&typ=1 Skriv demo i matlab för introduktionsfilmer
LYCKA TILL!
TVÅ SÄTT ATT LÖSA INTRODUKTIONSÖVNING 1 A
Skriv vektorn i kommandoprompten Tryck enter
Utskrift av variabeln Variabeln har sparats till workspace Klart!
Skapa ny m-fil Metod 2
Skriv koden och spara filen i din MATLAB-mapp
Spara filen i din MATLAB-mapp Filnamnet får inte börja med en siffra
Exekvera koden!
Utskrift av variabeln Variabeln minvektor har sparats till workspace Klart! Två sätt att göra samma sak. Skriv alltid koden i en m-fil så är det enkelt att gå tillbaka och se vad du gjort!