You are on page 1of 11

Les 1: Inleiding

De Desktop van Matlab bestaat uit verschillende vensters:


Command Window
Current Directory of Workspace
Command History
In principe kun je je commandos invoeren in het Command Window.
MAAR: dat doen we niet!

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.

Gebruik hiervoor het pijltje naar beneden.


Command History staat.

en plaats de editor bijvoorbeeld in het vak waar de

Commandos uitvoeren kun je voorlopig het beste doen als volgt:


de betreffende commandos selecteren, toets F9
Deze manier is in het begin vooral handig om losse commandos of kleine commandoseries direct uit te
voeren. Je kunt dan alle commandos van een les in n bestand (m-file) opslaan, in plaats van allemaal
losse bestandjes.
Sla je m-file op met een naam die aan de volgende eisen moet voldoen:
Alleen letters en cijfers (en eventueel underscore _ ), dus geen punt, spatie, komma en dergelijke.
Met een letter beginnen!
Goede namen zijn bijvoorbeeld: matlabweek1.m of matlab_week_1.m
De standaardmap voor Matlab is al aangemaakt. Het is handig om deze map ook voor al je m-files te
gebruiken!
Zet de Current Folder standaard in op deze map.

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)

Het aantal elementen in de rij x kun je opvragen met het commando:


length(x)
De eerste helft van een rij met een even aantal elementen, bij voorbeeld rij y, krijg je met:
y(1:length(y)/2)
Met het commando clear maak je jouw eigen gedefinieerde variabelen weer leeg.
Het is verstandig om bij nieuwe opgaven te beginnen met clear, zodat je met een schone lei kunt beginnen.
Opdracht 1
Maak een rij x van getallen van 1 tot en met 5 met stapgrootte 0.2
e
Wat is van deze rij het 19 elementl? Hoeveel elementen zitten er in de rij?
Opdracht 2
Maak een rij x van 100 oplopende getallen, beginnend met 35 en eindigend met 47, met onderling gelijke
afstanden.
Wat zijn van deze rij de 19e tot en met de 22e elementen?

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)

Matlab notaties vergeleken met wiskunde notaties.


Matlab gebruikt in enkele situaties een notatie voor een wiskundige functie die afwijkt van wat je in de
wiskunde gewend bent. Een overzicht vind je op Blackboard: mathematicalnotation.pdf
Opdracht 3
Maak grafieken van de volgende functies, elk apart. Kies daarbij steeds zelf een geschikt domein en een
redelijk aantal x-waarden. Bedenk dat de resolutie van het scherm hooguit rond 1200 pixels is.

y = 31 x
1
y=
x
x+4
y= 2
x 3x + 2
y = x 2 + 4x 6

y = sin 2 x +
3

y = 4 x 5 (Let op het juiste domein! )


y = 2 log(2 x 3) (idem)
y = 23 x

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.

Let op de frequenties van de verschillende functies.


Teken in n figuur de grafieken van de volgende functies. Geef elke grafiek een eigen kleur.

y1 = sin( x + )
3

y 2 = sin(2 x + )
3

y 3 = sin(3 x + ) Neem als domein [-4,13]


3

Let op de fase en de frequenties.

Les 2: Bijzondere functies en Complexe getallen


Opdracht 5
Teken de grafieken (elk apart) van de volgende bijzondere functies op de aangegeven domeinen.
Neem steeds 100 waarden voor x, met behulp van linspace.
a.

y = e3 x op [-1, 1]

b.

y = ln x 3 op [0.5, 10]

c.

y = 3ln ( x ) op [0.5, 10]. Vergelijk met b.

d.

y = sin1 ( x ) op [-1, 1]

e.

( )

y = tan1 ( 21 x ) op [-10, 10]

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

d. Bereken modulus en argument van z3

Plotten van complexe getallen


Een complex getal kan geplot worden.
Let op:
bij het plot-commando voor de grafiek van een functie heb je TWEE invoervariabelen nodig (x en y).
Maar: bij het plot-commando voor complexe getallen heb je aan EEN invoervariabele genoeg. Matlab
gebruikt het rele deel als x-waarde (horizontaal), en het imaginaire deel als y-waarde (verticaal).
Voorbeeld:
z=2+3j
plot(z)
Om hem iets zichtbaarder te maken (anders krijg je alleen een puntje te zien) kun je er een tekentje aan
geven, bijvoorbeeld een rondje. Gebruik hiervoor de letter o, dus niet het cijfer 0.
plot(z,'o')
Interessanter wordt het, als je in n figuur een complex getal en een aantal machten ervan wilt zien.
Laten we twaalf machten van het complexe getal z =

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)

Meer plots tegelijk op je scherm.


Matlab zet bij een nieuw plot-commando de gevraagde plot automatisch in het plot-window dat al geopend
is. Als je verschillende plots wilt vergelijken die verschillende schaalverdelingen op de assen hebben, kun je
een nieuw window openen met de nieuwe plot. Gebruik dan voorafgaand aan je volgende plot-commando
het commando:
figure
Voorbeeld:
x=[0.1:0.1:10];
y1=x.^2;
y2=log(x);
y3=exp(x);
plot(x,y1)
figure
plot(x,y2)
figure
plot(x,y3)

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

Maak drie aparte grafieken:


een met het commando plot(n,abs(y))
een met het commando plot(y)
een met het commando plot(n,y)
Let op de waarschuwing in het commandwindow.

Les 3: Toepassingen en Vectorrekening


Opdracht 9
Gegeven is: z =

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

Maak een plot van de modulus van Rv als functie van

als gegeven

is: R = 10 L = 550mH C = 40F


doorloopt waarden van 0.1 tot 1000, met stappen van 0.1
Opdracht 11
Gegeven zijn de wisselsignalen
1

f (t ) = 3 cos 5t + g (t ) = 2 sin 5t
4
3

k (t ) = f (t ) g (t ) kan geschreven worden in de vorm A cos ( t + )

Bereken in vier decimalen nauwkeurig de waarden van A, en .


Plot ter controle de grafieken van k (t ) en van

A cos ( t + )

+ x
2

Hint: Gebruik sin( x ) = cos

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])

Voorbeelden van het invoeren van kolomvectoren:


a = [2; 4; 7]
(puntkommas tussen de kentallen)
b = [0:0.1:5]
(transponeren)
c = [ 1
2
5
-1]
(de getallen worden gewoon onder elkaar ingevoerd)
Het punt O (de oorsprong) wordt aangeduid met de nulvector: alle kentallen zijn gelijk aan 0.

uuur

Een willekeurig punt A wordt aangeduid met de vector a = OA (begint in O, eindigt in A)


De vector die begint in een willekeurig punt P en eindigt in willekeurig punt Q is

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

Punt M is het midden van lijnstuk AB. Bereken de vector CM

uuur

uuur

Bereken het inproduct van AB en AC

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

krijg je weer met het teken.

Matrixvermenigvuldiging is alleen mogelijk als de dimensies kloppen, dat wil zeggen:


A is een p bij q matrix, B is een r bij s matrix.
A*B bestaat alleen als q=r.
Het resultaat is een p bij s matrix.
Als je matrixvermenigvuldiging probeert bij matrices, die niet passen, dan geeft Matlab de melding:
??? Error using ==> *
Inner matrix dimensions must agree.
Opdracht 14

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 =

Stelsels vergelijkingen oplossen


Matrixrekening wordt veel toegepast bij het oplossen van stelsels lineaire vergelijkingen.
We kunnen een stelsel lineaire vergelijkingen omzetten in een matrixnotatie:
A.x = b
A is de cofficintenmatrix
x is de kolomvector van de onbekenden x1 t/m xn
b is de kolomvector van de rechterleden van de vergelijkingen.

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

In bovenstaand netwerk zijn de spanningen en weerstanden bekend, en moeten de stroomsterktes berekend


worden.
Dit probleem kun je vertalen in een stelsel lineaire vergelijkingen, dat je vervolgens in Matlab kunt oplossen.
Je vindt de bijbehorende vergelijkingen, door eerst een stroomrichting te kiezen: zie plaatje.
Het voltage wordt positief gerekend als de stroom in de +pool binnenkomt, en het voltage van een weerstand
is positief voor stromen in de gekozen richting.
De wet van Kirchoff zegt dan bijvoorbeeld:

V 3 + R 4 I 3 + R5 I 3 R5 I 4 V 2 + R1 I 3 R1 I1 = 0
Opdracht 17a

Schrijf ook de overige vergelijkingen op.


Dit levert uiteindelijk vier vergelijkingen op.
Nu moeten deze vergelijkingen zo opgeschreven worden, dat er een cofficintenmatrix gemaakt kan
worden, waarin de onbekenden zijn: I1, I2, I3 en I4.
Dat betekent: alle termen met I1 bij elkaar nemen, alle termen met I2 ook, enz.
Verder moeten alle constante termen naar het rechterlid verplaatst worden.
Opdracht 17b

Werk alle vergelijkingen uit op deze manier.


Los vervolgens het stelsel vergelijkingen op in Matlab, voor de volgende gegevens:
V1=20, V2=12, V3=40, R1=18, R2=10, R3=16, R4=6, R5=15, R6=8.

11

You might also like