Matlab intro van functies - Vrije Universiteit Amsterdam

Numerieke Methoden I
Matlab:
Scripts versus functions
A.A.N. Ridder
Department EOR
Vrije Universiteit Amsterdam
Huispagina: http://personal.vu.nl/a.a.n.ridder/numprog/default.htm
3 september 2014
c Ad Ridder (VU)
Numerieke Methoden I – Najaar 2014
1/9
Wat is een script file?
I
Een tekst bestand (file) met extensie .m;
I
Iedere regel is een Matlab opdracht (commando);
I
Uitvoer door in het commandoscherm de naam van het bestand in te tikken;
I
Gelijkwaardig is om alle opdrachten direct in het commandoscherm in te tikken
regel voor regel direct achter de prompt;
c Ad Ridder (VU)
Numerieke Methoden I – Najaar 2014
2/9
Voorbeeld
Het volgende programma staat in het bestand testprog1.m
x = linspace(-pi,pi,200);
y1 = cos(x);
y2 = 1 - 0.5*x.ˆ2;
plot(x,y1,’k’,x,y2,’r’,’LineWidth’,2);
c Ad Ridder (VU)
Numerieke Methoden I – Najaar 2014
3/9
Nadelen script file (voordelen?)
I
Werkt alleen met globale variabelen;
I
Variabelen blijven in geheugen;
I
Resultaten blijven in geheugen;
I
Grote programma’s worden spaghetti-code;
I
Niet flexibel;
I
Onoverzichteljk;
I
¨
Lastige te verifieren;
I
...
c Ad Ridder (VU)
Numerieke Methoden I – Najaar 2014
4/9
Modulair programmeren
Bron: http://nl.wikipedia.org/wiki/Modulair_programmeren
I
Splits je programma op in modules die elk een logische functie uitvoeren;
I
Een module roept eventueel een andere module aan om zijn doel te bereiken,
maar werkt anderszins zoveel mogelijk zelfstandig;
I
Modules kunne apart gecompileerd worden ter verificatie van correctheid;
I
Vele voordelen: zie de WiKi pagina.
c Ad Ridder (VU)
Numerieke Methoden I – Najaar 2014
5/9
Modulair programmeren in Matlab
I
Een module is in Matlab een enkele function;
I
Elke function kan gecodeerd worden in een aparte function file met dezelfde
naam als de naam van de function;
I
Function file heeft ook extensie .m;
I
In feite is ook de code van alle Matlab functies die je aanroept (bv sin(pi/3),
exp(sqrt(2)),... geschreven in function files (sin.m, sqrt.m, exp.m
etc.
c Ad Ridder (VU)
Numerieke Methoden I – Najaar 2014
6/9
Een bestand per programma
I
Handiger en aangeraden: schrijf alle functions van een bepaald programma in
´ bestand;
e´ en
I
Althans, zolang je nog geen complexe projecten uitvoert met programma’s van
duizenden/tienduizenden/..., regels;
I
Zo doe je dat (meestal) ook in Java (en C++, en Python, en ...);
I
Elk programma komt zo in zijn eigen bestand;
I
Om het programma uit te voeren wordt ook het hele programma een function en
het bestand krijgt de naam van deze function;
I
Voorbeeld op volgende slide;
c Ad Ridder (VU)
Numerieke Methoden I – Najaar 2014
7/9
Voorbeeld
Gevraagd:
I
Construeer de rij van Fibonacci 0, 1, 1, 2, 3, 5, 8, . . .;
I
Noem deze fi , i = 1, 2, . . .;
I
Druk de 10-de t/m 15-de uit deze rij af (f10 , . . . , f15 );
I
Bereken de ratio’s φi = fi+1 /fi en de verschillen vi = φi − φ, waarin φ het gulden
snede getal is:
√ φ = 21 1 + 2 ≈ 1.618033988749895
I
Maak een plot van deze verschillen tot en met v50 ;
c Ad Ridder (VU)
Numerieke Methoden I – Najaar 2014
8/9
Programma
De file heet fibonacci.m
function fibonacci
main; % roept de eerste (sub)functie van het programma aan
function main
L = input(’Geef lengte rij L>=55: ’);
if L<55
error(’te kleine rij’);
end
...
end
function rij = construeer_fibonacci_rij(n)
...
end
...
end
Te vinden op de website
http://personal.vu.nl/a.a.n.ridder/numprog/matlab/default.htm
c Ad Ridder (VU)
Numerieke Methoden I – Najaar 2014
9/9