Inleiding Matlab en Simulink - stoorvogelaa/156056/matlabintroo.pdf · Het interactieve van Matlab...

5

Click here to load reader

Transcript of Inleiding Matlab en Simulink - stoorvogelaa/156056/matlabintroo.pdf · Het interactieve van Matlab...

Page 1: Inleiding Matlab en Simulink - stoorvogelaa/156056/matlabintroo.pdf · Het interactieve van Matlab (en Maple) mag dan handig zijn, je wilt de commando’s en uitvoer ook kun-nen bewaren.

Inleiding Matlab &Simulink

voor gebruik bij het vakInleiding Wiskundige Systeemtheorie

1 Matlab

Dit is een beknopte, telegram-stijl inleiding tot Mat-

lab en Simulink. Het pakket Matlab is bij uitstekgeschikt voor numeriek werk en voor het rekenen metvectoren en matrices. Matlab kenmerkt zich doorkorte en efficiente code en het is makkelijk in gebruik.Elke paragraaf behandelt een beperkt aantal onderwer-pen. Aan de hand van vele korte opgaven (de grijzekadertjes) leiden we de onderwerpen in.

Opdracht -1: Start Matlab op.

Als het goed is zie je nu zoiets als dit:

Het grote venster rechts heet het command window endat is waar je interactief de Matlab commando’s kuntintikken (we maken ons niet druk om de kleine ven-stertjes links). De twee groter-dan tekens >> in hetcommand window geeft aan dat Matlab klaar is voorinvoer.

Opdracht -2: Selecteer met de muis het commandwindow en tik vervolgens exit <return>

Hiermee verlaat je Matlab. In het vervolg laten we<return> achterwege en veronderstellen we dat hetcommand window al is geselecteerd.

2 Getallen en online help

Okay, start Matlab weer op.

Opdracht -3: Tik in 2+3

Zoals je ziet laat Matlab het resultaat 5 zien.

Opdracht -4: Tik in a=2+3;

Dit definieert de variabele a en zijn waarde is 5. DatMatlab het resultaat niet laat zien is omdat het com-mando eindigt met ;

Opdracht -5: Tik in a=2+3*sqrt(-1)

Aha, Matlab kent dus complexe getallen. Je had ove-rigens ook gewoon a=2+3*i in kunnen tikken. Matlab

heeft heel veel functies die op getallen werken. Bijvoor-beeld sin(1) geeft wat je verwacht. Als je niet weethoe een functie werkt of of een functie uberhaupt bin-nen Matlab gedefinieerd is kun ‘help’ roepen:

Opdracht -6: Tik in help abs

Als je ‘iets’ wil met tangens (Engels: tangent) maarje weet niet precies hoe en wat, dan doe je ‘lookfor’.Dat geeft een overzicht van alle commando’s die ietsmet tangens te maken hebben:

Opdracht -7: Tik in lookfor tangent

(overigens, dit kan een tijdje duren)

Opdracht -8: Tik in x=1/0

Opdracht -9: Tik in y=1/x

Opdracht -10: Tik in z=-Inf

Jawel, Matlab kan overweg met oneindig!

3 Vectoren

Opdracht -11: v=[1 2 3 4 5]

Dit definieert de rij-vector v∈ R1×5. Om bijvoorbeeld

het tweede element ervan te zien doe je v(2). Hetveranderen van de waarden gaat bijvoorbeeld zo:

Opdracht -12: v(2)=-2

Opdracht -13: v(8)=8

1

Page 2: Inleiding Matlab en Simulink - stoorvogelaa/156056/matlabintroo.pdf · Het interactieve van Matlab (en Maple) mag dan handig zijn, je wilt de commando’s en uitvoer ook kun-nen bewaren.

Je ziet, je hoeft in Matlab vectoren niet vooraf tedeclareren: op het moment dat je v(8) nodig hebt ge-bruik je het gewoon. Matlab geeft de door jou nogniet gedefinieerde v(6) en v(7) de waarde nul. Ove-rigens, het voortdurend laten groeien van de dimensievan een vector kost erg veel tijd en geheugen en is hetbeste te vermijden. Het laatste element van een vectorkan heel handig zo worden achterhaald:

Opdracht -14: z=v(end)

Nog een paar vectorconstructies:

Opdracht -15: nul=zeros(1,5)

Opdracht -16: een=ones(5,1)

Opdracht -17: rij=1:5

Opdracht -18: kolom=(1:5)’

Opdracht -19: rij=10:-2:3

De laatste behoeft wellicht enige uitleg. De constructiea:b:c betekent de rij-vector

[

a a + b a + 2b a + 3b · · · a + b c−a

bcb

]

Anders gezegd, het is de doorsnijding van het rijtje[

a a + b a + 2b · · ·]

met het interval [a, c]. Nogeen paar andere constructies:

Opdracht -20: x=1:4

Opdracht -21: v=[-2 x x 10]

Opdracht -22: x([1 3])=[-11 -33]

Het laatste commando is een compacte manier om tezeggen dat x(1)=-11 en x(3)=-33. Je kunt vectorenoptellen en scalair vermenigvuldigen, bijvoorbeeld

Opdracht -23: x=[1 2 4]; y=x+x

Opdracht -24: y=3*x

Matlab kent daarnaast ook het zeer handige ele-

mentsgewijze product, quotient et cetera van vectorenen matrices. Als de elementsgewijze operaties wordenbedoeld dan moet de operatie worden voorafgegaandoor een . zoals in

[2 5].*[2 5]

Dat geeft de rijvector [4 25]. Dergelijke operaties zijno.a. zinvol als er functies geplot moeten worden (zieverderop).

Opdracht -25: x=[1 -2 3]; y=x.*x

Opdracht -26: y=x./x

Opdracht -27: y=x.^x

Opdracht -28: y=x+10

Dat laatste verhoogt elk element van x met 10. Eenvector kan in Matlab ook een polynoom represente-ren. Zo geeft bijvoorbeeld het commando

x =[1 -2 3]; roots(x)

de nulpunten van de polynoom 1 · t2 − 2 · t + 3. Merkop dat x(1) de coefficient is van de term van hoogste

graad.

Opdracht -29: Bepaal de nulpunten van de polynoomt3 + 3t2 + 3t + 1.

4 Matrices

Opdracht -30: A = [1 2; 4 5] % 2*2 matrix

Opdracht -31: X=A’ % getransponeerde

Opdracht -32: A(1,2) % laat A(1,2) zien

Opdracht -33: B=A(:,1) % eerste kolom van A

Opdracht -34: C=A(2,:) % tweede rij van A

Opdracht -35: det(A) % determinant van A

Opdracht -36: inv(A) % inverse

Opdracht -37: A^(-1) % inverse

Opdracht -38: A^10 % machtsverheffen

Opdracht -39: v=[3;5] % een kolomvector

Opdracht -40: A*v % matrix product

Opdracht -41: x=A\v % oplossing van A*x=v

Opdracht -42: I=eye(3) % 3*3 eenheidsmatrix

Opdracht -43: We kunnen de elementen van de matrixook met een for-loop vullen:

A=zeros(3,4);

for i=1:3,

for j=1:4,

A(i,j)=i*j;

end

end

A

Opdracht -44: [n,m]=size(A) % aantal rij,kolom

2

Page 3: Inleiding Matlab en Simulink - stoorvogelaa/156056/matlabintroo.pdf · Het interactieve van Matlab (en Maple) mag dan handig zijn, je wilt de commando’s en uitvoer ook kun-nen bewaren.

Verder kunnen op matrices ook weer elementsgewijzeoperaties uitgevoerd worden zoals

Opdracht -45: A=[1 2; 3 4]; 1./A

Opdracht -46: A.*A

5 Plotten

Om de grafiek van y = t2 te plotten zou je bijvoorbeeldkunnen doen:

t=1:6; % da’s [1 2 3 4 5 6]

y=t.*t; % da’s [1 4 9 16 25 36]

plot(t,y);

Het commando plot zet hier de elementen van de vec-tor y uit tegen de elementen van t. Iets geavanceerderis dit plotje van sin(t):

t=0:0.01:20;

y=sin(t);

plot(t,y);

Hier gebeurt iets bijzonders: t is een vector dusy=sin(t) geeft aan dat we de sinus van een vectorkunnen bepalen! De sinus van een vector is de vector

van de sinussen, bijvoorbeeld

sin([3 5]) == [sin(3) sin(5)]

Opdracht -47: t=0:0.01:20;

Opdracht -48: y=sin(t);

Opdracht -49: plot(t,y,’b’,t+1,y/2,’ro’);

Toont twee grafieken met wat toeters en bellen.

Met help plot zie je dat plot nog veel meer toetersen bellen kent, zoals

t=0:0.01:20;

y=sin(t);

plot(t,y);

xlabel(’x-as’);

ylabel(’y-as’);

title(’een sinus’);

Opdracht -50: Bepaal de plot van cos(t)/(1 + t) op[0,10]

We hebben tot dusver steeds in een figuur-venster denieuwe plot weergegeven. Vaak wil je meerdere plotstegelijk kunnen weergeven, ofwel in een venster of juistin meerdere vensters. Met het commando hold on

zorg je er voor dat de volgende plot aan de huidigewordt toegevoegd (dus zonder de huidige te overschrij-ven). Het commando hold off zorgt ervoor dat devolgende plot de huidige plot weer overschrijft.

Opdracht -51: Teken de grafieken van sin(t), sin(2t)en sin(4t) op het interval [−π, π] in een figuur-venster.

Wil je een tweede figuur-venster, dan kun je deze ope-nen met figure(2). Soortgelijk kun je een derde, vier-de, etc. figuur-venster openen.

Opdracht -52: Teken de grafieken van sin(t), sin(2t)en sin(4t) op het interval [−π, π] in drie verschil-lende figuur-vensters.

Bewaren van figuren. Tenslotte nog een opmerkingover het bewaren van figuren. Onder het kopje File

in het figuur-venster vind je Export... Dit commandostelt je in staat om je figuur te bewaren als o.a. eps-bestand of pdf-bestand (beide van goede kwaliteit). Jeplaatst een figuur in de clipboard door onder Edit opCopy Figure te klikken. Dit laatste resulteert even-wel in een bitmap van de figuur en is daarom van ietsmindere kwaliteit.

6 Scripts en functies (m-files)

Het interactieve van Matlab (en Maple) mag danhandig zijn, je wilt de commando’s en uitvoer ook kun-nen bewaren. De makkelijkste manier is door alle com-mando’s in een bestand te bewaren. Dergelijke bestan-den moeten als extensie .m hebben vandaar dat menspreekt over m-files.

Opdracht -53: Tik in edit

Dit opent een editor.

Opdracht -54: Tik in in deze editor:

disp(’Goedendag’);

Opdracht -55: Bewaar dit bestand onder de naamdag.m

Opdracht -56: Tik in in het command window dag

Als het goed is antwoordt Matlab met een welge-meende Goedendag. Als Matlab klaagt met

Undefined function or variable ’dag’

dan kan Matlab je bestand dag.m niet vinden. Ditkun je verhelpen door bovenin het Matlab-windowde Current directory aan te passen. Overigens, hetaardige van Matlab is dat je m-files niet hoeft te de-clareren, te laden of te compileren: als Matlab hetbestand dag.m kan vinden dan kun je de commando’s

3

Page 4: Inleiding Matlab en Simulink - stoorvogelaa/156056/matlabintroo.pdf · Het interactieve van Matlab (en Maple) mag dan handig zijn, je wilt de commando’s en uitvoer ook kun-nen bewaren.

in dat bestand uitvoeren door simpelweg dag in te tik-ken in Matlab’s command window. We gaan nu eenfunctie aan Matlab toevoegen waarmee je minimum,maximum en gemiddelde van een rijtje (vector) kanbepalen:

Opdracht -57: Open de editor weer en tik in deze edi-tor in:

function [mi,ma,gem]=stats(v);

% dit is commentaar

mi=min(v);

ma=max(v);

n=length(v);

gem=sum(v)/n;

Bewaar dit bestand onder de naam stats.m

De eerste regel is hier van de vorm

function uitvoer=naam(invoer);

waarbij naam ook de naam van het bestand moet zijn.Je hebt nu een functie aan Matlab toegevoegd.

Opdracht -58: w=[1 2 3 4];

Opdracht -59: [mii,maa,gemm]=stats(w)

Als het goed is zijn mii, maa en gem het mini-mum, het maximum respectievelijk het gemiddelde van[1 2 3 4].

7 Een simulatievoorbeeld

We gaan nu de simulatie in voorbeeld 2.1.1 uit hetIWS-dictaat uitvoeren. Het handigste is om dit te doenmet behulp van een script.

Opdracht -60: Kies in het menu File voor New en ver-volgens voor M-file. Voer de volgende regels in:

k=2;

r=1/2;

m=1;

A=[0 1; -k/m -r/m];

B=[0; 1/m];

C=[1 0];

D=0;

x0=[1; 0];

h=0.1;

t=0:h:40;

u=stepfun(t,20);

lsim(A,B,C,D,u,t,x0);

Opdracht -61: Sla het bestand op als, bijvoorbeeld,simvb211.m (in de current directory).

Opdracht -62: Ga terug naar het command windowen tik in simvb211.

Het script simvb211wordt nu in zijn geheel uitgevoerd.Als alles goed is ingevoerd verschijnt op het scherm eenwindow Figure No. 1 met een plaatje als in figuur 2.3van het dictaat. Deze figuur is door lsim gemaakt. Wekunnen ook zelf een dergelijk plaatje maken.

Opdracht -63: Tik de volgende commando’s in (in hetcommand window):

y = lsim(A,B,C,D,u,t,x0);

figure(2);

plot(t,y,’r-’,t,u,’b--’);

legend(’y’,’u’);

text(20,1.1,’u(t)’);

text(26,0.7,’\leftarrow y(t)’);

axis([0,40,-0.6,1.1]);

title(’Simulatie mechanisch systeem’);

xlabel(’tijd t’);

ylabel(’u(t), y(t)’)

8 Simulink

We gaan nu een zelfde simulatie met Simulink doen.

Opdracht -64: Tik in simulink of klik op hetsimulink-icoontje .

Dit opent de simulatie-omgeving Simulink.

Opdracht -65: Kies in het menu File van de Simu-link Library Browser voor New en vervolgens voorModel.

Een nieuw venster opent waarin je je Simulink modelkunt invoeren.

Opdracht -66: Klik in de Library Browser op Simu-link en dan op de map Continuous. Sleep eenIntegrator naar het model venster, sleep uitde map Math Operations de blokken Gain enSum naar je model. Voeg verder nog uit de mapSources de Clock en de Step en uit de mapSinks de blokken Scope en To Workspace aanje model toe.

Nu heb je alle elementen die nodig zijn om een simu-latie te doen.

4

Page 5: Inleiding Matlab en Simulink - stoorvogelaa/156056/matlabintroo.pdf · Het interactieve van Matlab (en Maple) mag dan handig zijn, je wilt de commando’s en uitvoer ook kun-nen bewaren.

Opdracht -67: Maak het schema van figuur 1.

y

To Workspace1

t

To Workspace

Step Scope

1s

Integrator2

1s

Integrator1

1/m

Gain3

−r/m

Gain2

−k/m

Gain1

Clock

x2u x1

Figuur 1: Simulink model

Tips: een blok kun je kopieren door het te slepen ter-wijl je de control toets ingedrukt houdt. Je kunt lijnentrekken van het ene blok naar het andere. Als je metde rechtermuisknop op een blok klikt, kun je het om-keren (flip) en roteren, klik daartoe op format. Eenlijn van een andere lijn “aftappen” doe je door controlingedrukt te houden en te slepen vanaf de “aftap”-lijn.Je kunt tekst aan je model toevoegen door er in te dub-belklikken. Door op een blok te dubbelklikken, kun jede parameters instellen.

Opdracht -68: Verander in de To Workspace blokkenVariable name in t respectievelijk y, en Save

format in Array.

Dit laatste is van belang omdat we straks het comman-do plot willen gebruiken.

Opdracht -69: Verander in het Step blok Step time

in 20.

Opdracht -70: Verander de Gains zoals in het plaatje.(1/m voor u, −r/m voor x2 en −k/m voor x1).

Het kan zijn dat de gain-factor niet zichtbaar is in hetgain-blok. Het blok wat groter maken is de oplossing.

Opdracht -71: Voer bij de Integratoren van x1 en x2

bij Initial condition respectievelijk x0(1) enx0(2) in.

Opdracht -72: Kies Simulation Parameters... uithet Simulation menu.

Opdracht -73: Verander Stop time in 40.

Opdracht -74: Verander bij Solver options, Type infixed step en kies vervolgens als integratieme-thode ode5.

Opdracht -75: Vul bij Fixed step size 0.1 in.

Opdracht -76: Sla het model op, bijvoorbeeld onderde naam vb211.mdl in de current directory.

Opdracht -77: Voer in het command window in: k=2;r=1/2; m=1; x0=[1;0];

Je kunt het model nu simuleren:

Opdracht -78: Kies Start uit het Simulation menu(of tik in sim vb211 in het command window).

Het resultaat kun je zien door plot(t,y) in te voeren.Als je voor het simuleren het Scope blok opent (dub-belklikken) kun je tijdens de simulatie het resultaat alzien.

9 Tot slot

We hebben slechts een klein tipje van Matlab’s slui-er opgelicht. Voor meer informatie doe demo of doc.Dit opent een apart venster van waaruit vele demon-straties geselecteerd kunnen worden. Als je help doetdan krijg je een compact overzicht van de verschillendetoolboxen te zien (waaronder ops). Elke toolbox kun jeapart bekijken door, bijvoorbeeld, help ops in te tik-ken. Dat geeft dan weer een lijst, die je ook weer methelp verder kan bekijken, zoals help punct. Als jebijvoorbeeld wilt weten hoe je de uitvoer kan bewarendoe dan help print of help save. Als je wilt wetenhoe for-loops en while-loops werken doe dan help for

en help while et cetera.

5