Page 4
Matlab: Buffon's Needle Problem throws = 10000; % percent makes the rest of the line a comment x=rand(1,throws); % a vector of 10000 pseudorandom numbers % in the range [0,1) theta=rand(1,throws); % semicolon supresses printing theta=0.5*pi*theta; % theta now 10000 random numbers between 0 and pi/2 hits= x<=0.5*sin(theta); % hits is a vector of 0's where false % and 1's where true sum(hits) % no semicolon prints the number of hits out of the 10000 throws piEst=throws/sum(hits)
Page 6
Matlab: Histogramming Buffon's Needle Problem throws = 100; % 100 trials replications=2000; for i=1:replications x=rand(1,throws); theta=0.5*pi*rand(1,throws); hits= x<=0.5*sin(theta); y(i)=sum(hits)/throws; % y= result vector end hist(y) % let hist pick the bins recipEst=sum(y)/replications vVec=(y-recipEst).*(y-recipEst); % vector of sqr deviations v=sum(vVec)/(replications-1); % sample variance stddev=sqrt(v) % sample standard deviation piEst=1/recipEst
Page 9
Matlab: Gambler's Ruin R=zeros(1,2000000); % vector of 2,000,000 zeros i=1; R(i)=100; % gambler's initial fortune while( R(i) > 0 & R(i) < 2100 ) i=i+1; W = (rand < 0.5); % random value of 0 or 1 W = 2*W - 1; % random value of +/-1 R(i)= R(i-1)+W; % gamblers new fortune end plot(1:length(R),R) % plot R against its index %%% run for investigating running time for j=1:20 i=1; R(i)=100; while( R(i) > 0 & R(i) < 2100 ) i=i+1; W = 2*(rand < 0.5)-1; R(i)= R(i-1)+W; end T(j)=i end hist(T)
Page 13
Matlab: Dice Rolls red = floor(6*rand(1,1000))+1; % vector of 1000 random values 1,2,...,6 green = floor(6*rand(1,1000))+1; % ditto for 2nd die dice = red+green; x=0:0.1:13; % vector of values from 0 to 13 incrementing by 0.1 for i=1:length(x) cdf(i)=sum(dice <= x(i)); end plot(x,cdf)
Page 31
Matlab: Middle Sine Random Number Generator tenpow5 = 100000; x=0.5; for i=1:10 x=tenpow5*sin(x); w = floor(x); % first 5 digits x = x-w % digits after the 5th end % now do some timing tic for i=1:100000 x=tenpow5*sin(x); w = floor(x); x = x-w; end toc %0.5314 % compare with Matlab's built-in generator tic; x=rand(1,100000); toc; %0.0193
Page 32
Matlab: Middle Square Random Number Generator tenpow7 = 1000000; x = 0.1234567; % initial seed for i=1:10 x = x*tenpow7; % x now an integer w = x*x; % square w = floor(w/1000); % drop last three digits w = w/tenpow7; % 7 decimal digits x = w - floor(w) % drop the integer digits
Page 39
Matlab: Pi Estimation nTrials = 10000; x=rand(1,nTrials); y=rand(1,nTrials); hits=sum(x.^2+y.^2 < 1) piEst = 4*hits/nTrials
Page 40
Matlab: Coupon Collecting nLetters = 9; %ANGELFISH nTrials = 10000; for i=1:nTrials success = 0; nTries(i) = 0; for j=1:nLetters ANGELFISH(j)=0; %reset to letter not achieved end while success == 0 nTries(i) = nTries(i)+1; %inc. count buy = 1+floor(nLetters*rand); %letter obtained ANGELFISH(buy) = 1; if sum(ANGELFISH)==nLetters success = 1; end end end hist(nTries)
Page 42
Matlab: Card Shuffling n = 4; % a permutation of 4 objects m = n; % do the whole deck perm = 1:n %identity permutation for i=1:m % if m=n the last is superfluous j = i+floor((1+n-i)*rand); % from the remaining swap = perm(i); perm(i) = perm(j); perm(j) = swap; end perm
Page 47
Matlab: Exercise 27. low=0; high=0; for i=1:10000000 x=rand; if x < 0.1 low = low + 1; y=rand; % for baseline comment this out else high = high + 1; y=rand; z=rand; % for baseline comment out end end low high