Inleiding MATLAB (2) Stefan Becuwe Johan Vervloet november 2
Octave gratis MATLAB kloon Min of meer MATLAB compatibel http://www.octave.org/
% Script PlotVb % % Plot regelmatige driehoek t/m tienhoek PlotVb.m subplotnr = ; for sides = [3:] theta = linspace(, 2*pi, sides + ); % Verdeel de grafiek in 3 x 3 subplots, en activeer de juiste subplotnr = subplotnr + ; subplot(3, 3, subplotnr); % De plot zelf plot(sin(theta), cos(theta)) % Plaats een label onder de grafiek, en pas assen aan xlabel(sprintf( %2.fhoek, sides)) axis([-.2.2 -.2.2]) % Voor octave is het noodzakelijk dat na wijziging van label, assen, %... het replot commando aangeroepen wordt. Maar dan nog werkt % niet alles optimaal. % MATLAB daarentegen kent het replot commando dan weer niet. % Onderstaand MATLAB commando is niet ondersteund door octave. % Het zorgt ervoor dat de verhoudingen x-as / y-as gelijk zijn. axis( square ) end 2
.5.5 3hoek.5.5 6hoek.5.5 9hoek.5.5 4hoek.5.5 7hoek.5.5 hoek.5.5 5hoek.5.5 8hoek.5.5 hoek Figuur : Output van PlotVb.m 3
Oplossen van lineaire stelsels Als A een n m matrix is, en b een m matrix, dan kunnen we het stelsel A X = b oplossen met het MATLAB commando A\b 4
Stelsels : voorbeeld 3x 6y = 8 x + 2y = komt overeen met dit stelsel : 3 6 X = 2 8 In MATLAB : >> [3-6; 2]\[-8;] 5
>> X = rand(2, 5) Willekeurige getallen X =.4857.965.2462.92.7535.7257.24.8567.894.6487 >> X = randn(2, 5) X =.34 -.5823 -.6733.665.35.885 -.776 -.397.63.35 6
% Script Histogrammen % % Plot een histogram voor rand en randn Histogrammen.m % histogram voor rand subplot(2,, ) % vul x met willekeurige getallen x = rand(, ); % deel het interval [min(x), max(x)] op in 6 gelijke stukjes, en % maak een plot die aangeeft hoeveel elementen uit x er in elk stukje % zitten. hist(x, 6); % histogram voor randn subplot(2,, 2) % vul x met willekeurige getallen x = randn(, ); % deel het interval [min(x), max(x)] op in 6 gelijke stukjes, en % maak een plot die aangeeft hoeveel elementen uit x er in elk stukje % zitten. hist(x, 6); 7
35 3 25 2 5 5..2.3.4.5.6.7.8.9 5 4 3 2 3 2 2 3 Figuur 2: Output van Histogrammen.m 8
uniforme verdeling op [.,.].8.6.4.2..2.3.4.5.6.7.8.9.4 normaalverdeling, mu =., sigma =..3.2. 3 2 2 3 Figuur 3: Uniforme en standaardnormaalverdeling (zie Verdelingen.m) 9
Willekeurige getallen rand levert willekeurige getallen volgens de uniforme verdeling U(, ) randn levert willekeurige getallen volgens de standaardnormaalverdeling N(, ) Voorbeeldjes : floor(rand(, )*6) % dobbelsteensimulator :) rand(, )*5 + % will. getal uit [, 5]
BenaderPi.m % Script BenaderPi % % Deze functie benadert pi d.m.v. een zogenaamde Monte Carlo methode. % Een dergelijke benadering is bijzonder onbetrouwbaar. pogingen = ; % genereer pogingen punten (x, y) met % x en y in [-, ] x = - + 2*rand(pogingen, ); y = - + 2*rand(pogingen, ); puntincirkel = (x.^2 + y.^2 <= ); % puntincirkel(i) is nu als % x(i)^2 + y(i)^2 <= % puntincirkel(i) is in het andere geval. % m.a.w. puntincirkel(i) is als en slechts als % x(i),y(i) in de cirkel met middelpunt (,) en straal ligt. som = sum(puntincirkel); % de functie sum sommeert alle elementen van de array. % som bevat nu dus het aantal punten (x, y) die binnen de cirkel liggen. % Wanneer we nu het aantal punten binnen de cirkel delen door het % aantal punten dat we gegenereerd hebben, hebben we een benadering % voor de verhouding van de oppervlakte van de cirkel t.o.v. de % oppervlakte van [-, ]^2. % we verkrijgen dus een benadering van pi/4 benadering = som/pogingen; % als we deze benadering dus vermenigvuldigen met 4, hebben we een % benadering van pi. benadering*4 % geen kommapunt zodat output getoond wordt
Monte Carlo methoden Convergentie in het algemeen zeer traag Absoluut geen zekerheid over de precisie. Het is enkel mogelijk de kans te bepalen dat de fout kleiner is dan een gegeven ɛ. 2
ExpPoging.m % Functie ExpPoging(x, n) % % Berekent een n-de orde Taylorbenadering van e^x % x MOET een x matrix zijn!!! % % Voor diegenen die het niet meer moesten weten : de n-de orde % Taylorbenadering van e^x = % % x^/! + x^/! + x^2/2! +... + x^n/n! % function y = ExpPoging(x, n) y = ; term = ; for k = :n term = x*term / k; y = y + term; end 3
Oefeningen. Gegeven volgende matrices: A = 64992 59872 C = 486952.5 255896 257922 B = 837394 (a) Bereken A C. (ter info: exacte oplossing is B) (b) Bereken A\B. (ter info: exacte oplossing is C) 2. Benader 2 d.m.v. een Monte Carlo methode. 3. Pas het scriptje ExpPoging.m aan zodat het ook matrices aanvaardt als argument, en het in zo n geval van elk element van de matrix de exp berekent. 4