Introduktion till Matlab
Matlab som räknedosa
Allt som en räknedosa klarar av, kan Matlab göra minst lika bra. För den som har glömt sin multiplikationstabell går det t.ex. alldeles utmärkt att använda Matlab så här:
7*8Matlab svarar:
ans = 56Även för den som kan sin multiplikationstabell kan Matlab användas som räknedosa. De vanliga elementära funktionerna finns med hela gänget så det går utmärkt att beräkna uttryck som t.ex.
exp(-1.23)*sin(0.456) + 7.89^2*atan(0.13579)Matlab svarar:
ans = 8.5305Observera att Matlab alltid förutsätter att enheten är radianer då man använder trigonometriska funktioner (sin, cos och tan). Det finns vissa fördefinierade konstanter t.ex. pi. Om man exempelvis skriver
x = sin(pi/4)så svarar Matlab
x = 0.7071
exp(i*pi)Tydligen så finns den imaginära enheten i också med som fördefinierad konstant i Matlab. Detta gör det smidigt att räkna med komplexa tal i Matlab. En division mellan två komplexa tal kan se ut så här:
(1 + 3*i) / (2 + i)vilket ger
ans = 1.0000 + 1.0000iFör att räkna ut absolutbeloppet av ett komplext tal används funktionen abs:
abs(4 + 3*i)som ger
ans = 5
Vektorräkning är enkelt i Matlab. Om man vill addera två vektorer x1=(1, 2, 3) och x2=(7, -5, 2) räcker det att utföra följande kommandon:
x1 = [1 2 3]; x2 = [7 -5 2]; x1 + x2Ett semikolon i slutet av kommandot gör att resultatet inte skrivs ut. Den sista raden ger därför utskrift av resultatet eftersom kommandot inte avslutas med något semikolon. Ett snabbare sätt är att inte mellanlagra i variabler:
[1 2 3] + [7 -5 2]I båda fallen blir resultatutskriften så här:
ans = 8 -3 5Om man inte anger något namn på den variabel som resultatet skall lagras i så hamnar resultatet i en variabel med namnet ans (vilket ni antagligen redan listat ut vid det här laget).
[1; 2; 3] + [7; -5; 2]Utskriften blir
ans = 8 -3 5Uppgift 2. Beräkna summan av vektorerna x1=(-2.5, 2, 1.8) och x2=(4.7, -8.3, -4.6) med hjälp av Matlab.
Uppgift 3. Räkna ut vektorn 7*(1, 2, 3, 4) - 2*(2, 3, 5, 8).
För att omvandla en radvektor till en kolonnvektor (eller vice versa) använder man transponeringsoperatorn ' (apostrof eller prim). Exempel:
a = [1 6 8 5], b = a'ger resultatet
a = 1 6 8 5 b = 1 6 8 5Adressering av enskilda vektorelement utförs med vanliga ("runda") parenteser (och inte "klamrar" som i t.ex. Java och C):
a(2), b(3)ger (med a och b som ovan)
ans = 6 ans = 8Uppräkning av tal i en vektor kan göras t.ex. så här
x = 1:9med utskriften
x = 1 2 3 4 5 6 7 8 9
Uppgift 4. Skriv in kommandot
hej = 3:2:16och förklara resultatet.
Olika sätt att plocka ut delar av en vektor visas här:
v = 0:8 v1 = v(2:4) v2 = v([1 3 7]) v3 = v([2 5:8]) v4 = v([3 8 2])vilket ger följande utskrift
v = 0 1 2 3 4 5 6 7 8 v1 = 1 2 3 v2 = 0 2 6 v3 = 1 4 5 6 7 v4 = 2 7 1Fundera gärna på varför resultatet blir så.
Uppgift 5. Egentligen är inte addition av en vektor (av dimension minst 2) och ett tal matematiskt definierat. Undersök ändå vad som händer i Matlab då man skriver in följande
[1 2 3 4] + 7Detta är ett typiskt exempel där Matlab har hittat på egna praktiska konventioner. Däremot finns ingen vettig tolkning av följande
[1 2 3 4] + [7 8]vilket resulterar i en felutskrift (pröva själv).
För två vektorer av samma dimension fungerar inte vanlig matrismultiplikation. Därför ger inmatningen
[1 2 3 4] * [2 3 5 7]en felutskrift. Däremot finns en uppfinning i Matlab kallad elementvis multiplikation som ser ut så här:
[1 2 3 4] .* [2 3 5 7]och fungerar så här
ans = 2 6 15 28Observera punkten (innan multiplikationstecknet) som indikerar att operationen ska ske elementvis.
Naturligtvis kan man även beräkna den vanliga skalärprodukten. För detta krävs att man utnyttjar transponering:
[1 2 3 4] * [2 3 5 7]'med resultatet
ans = 51I detta fall ska man inte ha punkt före multiplikationsoperatorn.
Matlab är speciellt avsett för räkning med matriser. Rader separeras med semikolon medan kolonner antingen kan separeras med kommatecken eller bara med blanktecken. Här följer ett exempel på addition respektive multiplikation av två matriser:
A = [1 2; 3 4]; B = [-5 6; 7 -8]; C = A + B, D = A*BObservera att Matlab skiljer mellan versaler och gemener ("stora" respektive "små" bokstäver) så att t.ex. a och A är två olika variabler.
Uppgift 6. Beräkna matrisen
A*B + 2*A - 3*B*Cdå matriserna A, B och C ges av:
A = [1 3 2; -1 0 1; 2 1 0], B = [-2 1 0; 1 1 2; 0 1 -1], C = [0 1 1; -1 1 0; 1 0 1],Matrisoperationer som transponering och invertering utförs med lätthet. Att räkna ut matrisuttrycket
  (I + A TB) -1
går till så här i Matlab:
inv((eye(3) + A'*B))där vi förutsätter att matriserna A och B är definierade som ovan (eller åtminstone är av dimension 3x3). Som man kan ana så ger funktionen eye en enhetsmatris av given storlek. Ett prim (') transponerar en matris (egentligen konjugeras matrisen också om den skulle råka innehålla något komplext tal). Funktionen inv inverterar en matris.
Uppgift 7. Räkna ut inversen av matrisen I - A B C där A, B och C är matriserna i föregående uppgift.
Tidsdiskreta signaler kan i Matlab representeras med vektorer. För att visa en sinussignal kan man gå tillväga på följande sätt (raderna med procenttecken i början är bara kommentarer och behöver inte skrivas in):
% Tillverka en tidsvektor med värden från 0 till 2 s % i steg om 1 ms (0.001 s) t = 0:0.001:2; % Beräkna en sinussignal med frekvensen 20 Hz och rita kurvan x = sin(2*pi*20*t); plot(t, x);
Eftersom kurvan som visas motsvarar 2*20=40 perioder av sinussignalen blir det svårt att se sinusformen. För att titta på en enda period kan man använda följande kommando:
plot(t(1:50),x(1:50));
Detta ritar bara de 50 första punkterna på kurvan vilket motsvarar precis en period av sinussvängningen (varför?).
Uppgift 8. Utnyttja tidsvektorn t för att göra en signal x1 som består av en sinussignal med frekvensen 50 Hz samt rita denna signal med plot (på samma sätt som med x ovan).
Uppgift 9. Tillverka en signal x2 som består av en summa av två sinussvängningar, en med frekvensen 30 Hz och en med frekvensen 100 Hz. Visa signalen med plot. Plotta också de 200 första värdena av signalen för att lättare kunna se hur svängningarna ser ut.
Till sist ska vi se hur en dämpad sinussvängning kan se ut.
Uppgift 10. Beräkna och rita kurvan (grafen) för funktionen
f(t) = e-2t sin 20 t
för t mellan 0 och 4 s i steg om 0.01 s. Tips: Utnyttja elementvis multiplikation (.*).