Statistikk og Simulering

Økt 25. Slumptalsgeneratorar

Fyrste test i Matlab

18.1. Fyrste test i Matlab

Me kan implementera kongruensgeneratoren i Matlab som fylgjer:

1function [x] = rng25(n,x0) 
2 
3a = int32(6) ;     % Multiplicative constant 
4c = int32(7) ;     % Additive constant 
5m = int32(25) ;    % Modulus 
6persistent s       % State 
7 
8if nargin > 1, 
9   % If x0 is given, we use it as the seed 
10   s = int32(x0) ; 
11elseif isempty(s), 
12   % If no state is set, we use a hardcoded one. 
13   s = int32(11) 
14end 
15 
16% Start with an empty array 
17x = [] ; 
18 
19% Iterate n times to generate an array of random numbers 
20for i=1:n, 
21   s = mod(a*s + c, m ) ; 
22   x = [ x s ] ; 
23end
Legg merke til eit par finessar i Matlab.
1.
Kodeordet persistent let oss definera lokale variablar som funksjonen hugsar frå kall til kall. Dette svarer til static i C.
2.
Me reknar med 32-bits heiltal. Sidan Matlab elles bruker flyttal, må alt konverterast med int32()-funksjonen.
3.
Me kan sjekka om me har fått alle argumenta, ved å sjekka nargin som gjev talet på argument.

Oppgåve 18.1 Last ned fila rng25.m. Dette er den same funksjonen som er gjengjeve over. Test funksjonen på kommandolina og genererer 25 tilfeldige tal. Vel din eigen verdi for frøet s.

1rng25(25,s) Drøft med sidemannen: ser tala tilfeldige ut?

Oppgåve 18.2 Prøv funksjonen over igjen, og generer 100 tilfeldige tal. Drøft med sidemannen: ser tala tilfeldige ut?

Oppgåve 18.3 Kopier fila rng25.m og lag ein ny funksjon der du endrar den multiplikative parameteren til a = 9. Kva skjer? Kva fortel dette oss om desse slumptalsgeneratorane?

Oppgåve 18.4 Lag ein tredje variant, med a = 10. Kva skjer denne gongen?