MATLAB
En kort praktisk introduktion
Olof Hultin [email protected]
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!
MATLAB
• Matrix Laboratory • Skapat av MathWorks • 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
• 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
Övningsuppgifter
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.
Skalärprodukt av två radmatriser går inte!
1 23 4
5 67 8 = 1 ∙ 5 + 2 ∙ 7 1 ∙ 6 + 2 ∙ 8
3 ∙ 5 + 4 ∙ 7 3 ∙ 6 + 4 ∙ 8 = 19 2243 50
1 2 3 4 5 1 2 3 4 5
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
12345
= 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:
• Plot(x,y, 'r--', 'linewidth',2)
• Ger en röd streckad linje med tjocklek 2
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
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!
Exekvera koden med run!
Skapa ny .m-fil i din MATLAB-mapp OBS: Filnamnet får inte börja med en siffra
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 50e3
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
• 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 III
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!