Professional Documents
Culture Documents
Afspraak:
Omdat het command-window van Matlab maar zeer beperkte edit mogelijkheden heeft, en omdat je je
ingevoerde commandos na afloop van het practicum graag wilt bewaren, voeren we alle commandos in in
een m-file.
(New M-File), en er wordt een nieuwe m-file geopend.
Klik op het witte icoontje linksboven,
In deze m-file kun je al je commandos invoeren en eventueel aanpassen. Een voordeel is bijvoorbeeld dat
de haakjes paarsgewijs zichtbaar worden als je er met de cursor overheen gaat.
Het is mogelijk (en handig) om je Desktop aan te passen, door de editor te docken in je Desktop.
Variabelen
We gaan veel gebruik maken van variabelen in Matlab. In een variabele kan een enkele waarde gestopt
worden, maar ook een hele rij of een hele matrix (een blok getallen).
Het toekennen van een waarde aan een variabele gebeurt met het = teken.
De naam van de variabele moet links van het = teken staan, de waarde staat rechts.
Let op bij het bedenken van namen van variabelen: Matlab kent al heel veel standaardvariabelen. Gebruik
die namen niet voor je eigen variabelen.
Matlab is case-sensitive, dat betekent dat de variabele x een andere is dan X.
Verder geldt dat variabelenamen net als file-namen aan de volgende eisen moet voldoen:
Alleen letters en cijfers (en eventueel underscore _ ), dus geen punt, spatie, komma en dergelijke.
Met een letter beginnen!
Voorbeelden:
x = 3
y = [1, 4, 2, 9, 0, 1]
z = x*y;
Selecteer de commandos en toets F9.
Hiermee worden 3 variabelen gecreerd. Je ziet x en y in het Command Window, maar z niet.
Kijk ook in je Workspace (op je Desktop): daar zie je dat alle variabelen zijn aangemaakt, ook z.
Dat komt door de puntkomma aan het eind: die dient ervoor om de resultaten (output) niet zichtbaar te
maken in het Command window. Het onderdrukt (suppress) dus de output.
Die puntkomma is niet noodzakelijk, maar vaak wel handig als er heel veel elementen in een variabele zitten,
die je niet allemaal op het scherm wilt zien.
De getallen van de array (of vector) y staan NAAST elkaar.
Als je dat op het scherm ziet, zou je het misschien liever ONDER elkaar hebben.
Dat kan: zet een accent (') achter de definitie (dit heet TRANSPONEREN)
y = [1, 4, 2, 9, 0, 1]'
Er zijn twee manieren om snel een regelmatige rij getallen te definiren in Matlab.
Met de ene manier bepaal je van tevoren de stapgrootte (het verschil tussen twee opeenvolgende
elementen), en dan berekent Matlab zelf het aantal elementen van de rij.
Met de andere manier bepaal je van tevoren hoeveel elementen je in de rij wilt hebben, en dan berekent
Matlab zelf de stapgrootte.
Eerste manier
x = [start:stapgrootte:eind]
Tweede manier
x = linspace(start,eind,aantal)
Voorbeelden:
x = [-10:1:10]'
is een rij met 21 getallen, van -10 tot en met 10, met stapjes van 1, onder elkaar. (Ga dit na!)
y = linspace(-10,10,20)'
is een rij met 20 getallen van -10 tot en met 10, onder elkaar, met onderling gelijke afstanden.
Het zevende getal uit de rij x kun je opvragen met het commando (let op de RONDE haken):
x(7)
e
e
Het 10 tot en met het 15 getal uit de rij y kun je opvragen met het commando:
y(10:15)
Valkuilen
Matlab is een programma dat denkt in matrices.
(De naam van het programma slaat op Matrix Laboratory.)
Dit heeft grote voordelen voor de ingewikkelde berekeningen die je er mee kunt uitvoeren, maar het kan ook
onverwachte foutmeldingen opleveren als je voor het eerst kennismaakt met dit programma.
Voorbeeld: typ de volgende commandos in de editor in:
clear
x = [-10:0.1:10]'
y = sin(x)
plot(x,y)
NB: met het laatste commando wordt een grafiek getekend, waarbij horizontaal de x-waarden staan, en
verticaal de y-waarden.
Selecteer de commandos en toets F9.
Het resultaat is precies wat je verwacht. (NB: het is handig om ook het plotvenster in je Desktop te docken.)
Maar: typ nu het volgende commando in en voer het uit:
z = x^2
Het resultaat is een foutmelding:
??? Error using ==> mpower
Inputs must be a scalar and a square matrix.
Wat is hier aan de hand?
Blijkbaar accepteert Matlab niet dat je de machtsverheffing ^ gebruikt, omdat de matrix vierkant moet zijn.
Dat komt, omdat Matlab de variabele x ziet als matrix, van 201 getallen, allemaal op een rij.
Je kunt een matrix die niet vierkant is (zoals deze x dus) niet tot een macht verheffen.
Bij y = sin(x) was er geen probleem: Matlab begrijpt dat je van elk getal in de rij x apart de sinus wilt
berekenen, en het resultaat in de rij y zetten.
Maar bij machtsverheffen (en ook bij vermenigvuldigen en delen) is er een probleem, omdat daar binnen de
matrixrekening speciale methodes voor zijn,
Maar je wilt nu helemaal niet die speciale matrix-machtsverheffing! Je wilt elk getal in de rij x apart in het
kwadraat nemen, en niet de hele matrix.
De oplossing is eenvoudig:
In plaats van ^ gebruik je .^ (dus een punt en dan een dakje).
Iets dergelijks voor vermenigvuldigen en delen:
.* (punt en maal-teken) als je wilt vermenigvuldigen
./ (punt en deelstreep) als je wilt delen.
Voor optellen en aftrekken, of voor het berekenen van 3*x, is er wederom geen probleem: hierbij is de
matrix-berekening hetzelfde als de gewone berekening. Hier hoeft dus geen punt voor.
Er is ook geen probleem als je variabele x maar uit n getal bestaat. Je kunt dus gewoon de volgende
commandos uitvoeren:
clear
x = 1.43
y = x^2 + 1/(x^2+1)
z = (x*y + 1)/y^2
Maar als x een hele rij (een array) van getallen is, moet je dus steeds een punt zetten voor het
bewerkingsteken ^ of * of /
Voorbeeld:
clear
x = [-10:0.1:10]'
y = x.^2 + 1./(x.^2+1)
plot(x,y)
z = (x.*y + 1)./y.^2
plot(x,z)
y = 31 x
1
y=
x
x+4
y= 2
x 3x + 2
y = x 2 + 4x 6
y = sin 2 x +
3
Als je twee grafieken in n figuur wilt tekenen, (dat is alleen zinvol als de bijbehorende x-waarden
overeenkomen, en bovendien de functiewaarden niet te ver uit elkaar liggen), dan kan dat bijvoorbeeld als
volgt (de puntkommas dienen weer om de output op het scherm te onderdrukken):
clear
x = linspace(-6,6,100);
y = sin(x/2);
z = sin(x) + cos(x);
plot(x,y,'r',x,z,'g')
De r betekent dat de eerste grafiek in het rood getekend wordt, en de g betekent voor de tweede grafiek
dus de groene kleur. Let op frequentie, amplitude en fase van de verschillende grafieken en probeer deze te
begrijpen uit de functievoorschriften.
Je kunt de kleurcodes ook weglaten: dan kiest Matlab zelf verschillende kleuren voor de verschillende
grafieken.
Opdracht 4
a. Teken in n figuur de grafieken van de volgende functies. Geef elke grafiek een eigen kleur.
y1 = sin( x ) y 2 = cos( x ) y 3 = 3 sin( x ) + 4cos( x ) . Neem als domein [-4,13]
Let op de amplitude van de grafiek van y3(x).
b. Teken in n figuur de grafieken van de volgende functies. Geef elke grafiek een eigen kleur.
y1 = sin( x ) y 2 = sin(2 x ) y 3 = sin(3 x ) Neem als domein [-4,13]
c.
y1 = sin( x + )
3
y 2 = sin(2 x + )
3
y = e3 x op [-1, 1]
b.
y = ln x 3 op [0.5, 10]
c.
d.
y = sin1 ( x ) op [-1, 1]
e.
( )
e x + ex
op [-2, 2]
2
g. y = cosh ( x ) op [-2, 2]. Vergelijk met f.
y=
f.
Complexe getallen
Matlab rekent ook met complexe getallen. Een complex getal kun je op de volgende manieren invoeren:
z = 2 + 3i
of
z = 2 + 3*i
of
z = 2 + 3j
of
z = 2 + 3*j
Merk op dat Matlab de complexe j hetzelfde behandelt als de i, maar dat het resultaat toch weer met i
geschreven wordt.
Het *teken is dus niet verplicht. Maar: als er een variabele gebruikt wordt voor de i, is het *teken wel weer
verplicht.
a = 3;
z = 2 + aj (geeft een foutmelding)
z = 2 + a*j
Van een complex getal z = a + bj kun je het rele deel en het imaginaire deel opvragen, en ook de modulus
(absolute waarde of lengte) en het argument (de hoek).
Let op! Matlab berekent afgeronde waarden, dus niet exact!
z =
a =
b =
r =
phi
(3-5j)*(4-2j)
real(z)
imag(z)
abs(z)
= angle(z)
Opdracht 6
Gegeven zijn de complexe getallen z1 = 3 + 4 j en z2 = 1 + j
a. Bereken modulus en argument van z1 en van z2
b. Bereken z1 z2 en
c.
z1
z2
1
1 1
= + . Bereken z3
z3 z1 z2
1
2
3 + 21 j plotten.
z=.5*sqrt(3) + .5i
plot(z.^[1:12],'o')
Let op het puntje voor de ^
Nog iets mooier wordt het (het moet immers een echte cirkel zijn, en geen ellips)
plot(z.^[1:12],'o'), axis equal
Als je het plot-commando met twee invoervariabelen gebruikt, terwijl daarvan de y ook complexe waarden
bevat, geeft Matlab een waarschuwing, dat de imaginaire delen van y genegeerd worden.
Voorbeeld:
x = linspace(-10,10,1000);
y = sqrt(x);
plot(x,y)
Warning: Imaginary parts of complex X and/or Y arguments ignored
Je ziet dat alleen de rele delen van y geplot worden (als x negatief is, dan is y imaginair)
Opdracht 7
De variabele x bevat 100 waarden tussen -5 en 5.
y = x2
Maak twee aparte grafieken (gebruik figure): een met het commando plot(x,y) en een met het commando
plot(y)
Let goed op het verschil! (kijk naar de assen).
Opdracht 8
De variabele n bevat 100 waarden tussen 0 en 25.
z = 1+ j
y = zn
1+ j
.
1 + j 2
doorloopt waarden van 0.1 tot 10, met stappen van 0.1
Maak drie verschillende plots in drie verschillende figures:
a. Een plot van z zelf
b. Een plot van de modulus van z als functie van
c. Een plot van het argument van z als functie van .
Opdracht 10
In het gegeven netwerk geldt:
Er geldt: z1 =
Rv =
1
j C
U2
z2
=
U1 z1 + z2
z2 = R + j L
z2
z1 + z2
als gegeven
f (t ) = 3 cos 5t + g (t ) = 2 sin 5t
4
3
A cos ( t + )
+ x
2
Vectorrekening
Een punt in de ruimte kun je aanduiden met een vector (een array) van de cordinaten.
Als de getallen horizontaal staan, spreken we van een rij-vector; bij verticaal spreken we van een
kolomvector.
Je kunt in Matlab eenvoudig van een rijvector een kolomvector maken, en andersom, door het accent
achter de vector te zetten. (transponeren.)
Voorbeelden van het invoeren van rijvectoren:
clear
p = [3 4 6 7 1]
(spaties tussen de
q = [1, 4, -3]
(kommas tussen de
r = [3:1:10]
(de rijvector [3 4
s = linspace(3,10,8)
(de rijvector [3 4
kentallen)
kentallen)
5 6 7 8 9 10])
5 6 7 8 9 10])
uuur
uuur
uuur
PQ .
Er geldt: PQ = q - p ,
Het midden van een lijnstuk PQ vind je met:
1
(p + q )
2
Het aantal kentallen van een vector heet ook wel de dimensie. In Matlab kun je de dimensie van een vector
opvragen met het commando length(x)
Er zijn drie verschillende manieren om twee vectoren (van gelijke dimensie) met elkaar te
vermenigvuldigen.
De eerste manier is al vaker gellustreerd: de vermenigvuldiging met de punt.
Dit noemen we ook wel: element-by-element-operation.
Voorbeeld:
clear
x = [2, 5, 3]
y = [4, 1, 3]
x.*y
geeft als resultaat [8, 5, 9]
In de vectorrekening kennen we ook het inwendig product, kortweg inproduct, ook wel inner product of dotproduct genoemd. De uitkomst hiervan is een GETAL
In Matlab kun je dit op verschillende manieren laten uitrekenen. In dit geval kiezen we:
dot(x,y)
Dit geeft het juiste resultaat: 2*4 + 5*1 + 3*3 = 22
Opdracht 12
Gegeven zijn de punten A(2, 1, 4), B(1, -2, 3) en C(4, 5, 2).
uuur
uuur
uuur
Maak de vectoren a = OA , b = OB en c = OC
d = a + b - 3c
uuur uuur
uuur
Bereken de vectoren AB, AC en BC
Bereken de vector
uuur
uuur
uuur
Alleen voor vectoren waarvan de dimensie gelijk is aan 3, geldt nog een derde vorm van vermenigvuldiging:
het uitwendig product, kortweg uitproduct, ook wel cross product genoemd.
Het resultaat is weer een vector.
In Matlab:
z = cross(x,y)
Het resultaat is een vector die loodrecht staat op x en op y. De lengte van deze vector is juist gelijk aan de
oppervlakte van het parallellogram waarvan x en y de zijden vormen.
NB: de lengte van een vector x kan in Matlab opgevraagd worden met het commando: norm(x)
Opdracht 13
Gegeven zijn de punten A(2, 1, 4), B(1, -2, 3) en C(4, 5, 2).
Deze drie punten vormen een driehoek.
Bereken de oppervlakte van deze driehoek.
Les 4: Matrixrekening
Een matrix in Matlab voer je in met een openings-blokhaak [, gevolgd door de eerste rij, dan ENTER, dan de
tweede rij, enz. en na de laatste rij geef je de afsluitende blokhaak ]
Vb:
A = [1 2
3 4]
T
De getransponeerde matrix A
AT = A
1 6 5
3 1
en B =
2 0 2
4 1
T
Bereken (indien mogelijk): AB, BA, A B
Gegeven zijn de matrices A =
Voorbeeld:
3 x1 2 x 2 = 12
3 2
12
is te schrijven als A.x = b, waarbij A =
, b =
2 5
17
2x1 + 5 x 2 = 17
Het mooie van deze notatie is, dat we hiermee ook de oplossing voor x kunnen beschrijven.
A = [3 -2
2 5]
b = [12 17]
Let op: dit is een kolomvector.
x = A\b
Merk op, dat dit niet hetzelfde is als b/A.
Opdracht 15
Los het volgende stelsel vergelijkingen op in Matlab:
5x + 4y = 4
3x + 6y = 16
Opdracht 16
Los het volgende stelsel vergelijkingen op in Matlab:
5x + 4y - 2z + 6w = 4
3y + 6w 13 = z + x
6x + 12z 2y + 16w = 20
42y + 2z 4w = 6
10
Toepassing in de elektrotechniek
V 3 + R 4 I 3 + R5 I 3 R5 I 4 V 2 + R1 I 3 R1 I1 = 0
Opdracht 17a
11