You are on page 1of 13

Latin Hypercube Sampling Example

Jake Blanchard Spring 2010

Uncertainty Analysis for Engineers

Example
Z=XY X and Y follow exponential distributions x x=1 pdf f e y=1/2

cdf

F 1 e 1 mean

Uncertainty Analysis for Engineers

Step 1

Divide cdfs into even intervals (vertical axis)


1 0.9 0.8

CDF - =1

0.7 0.6 0.5 0.4 0.3 0.2 0.1 0

10

x
Uncertainty Analysis for Engineers 3

Step 2
Now sample a number in each section For example, pick a random number between 0.8 and 1.0 and use it to get a random value for x xx=expinv(rx,mux);

Uncertainty Analysis for Engineers

Step 3
Sort the values (shuffle) nux=xx(randperm(n));

25 20

20
15
yy

10

15

nyy
0 1 2 3 4 5 xx 6 7 8 9 10

10

6 8 nux Uncertainty Analysis for Engineers

10

An Alternative
Instead of using expinv, we can generate the inverse ourselves Just take the CDF and solve for x xx=-mux*log(1-rx);

Uncertainty Analysis for Engineers

First Script
n=10000000; mux=1; muy=2; x=exprnd(mux,n,1); y=exprnd(muy,n,1); mz=mean(x.*y); error=abs(mz-mux*muy)/mux/muy d=linspace(0,1,n+1); rx=unifrnd(d,d+1/n); ry=unifrnd(d,d+1/n); xx=expinv(rx,mux); yy=expinv(ry,muy); nux=xx(randperm(n)); nuy=yy(randperm(n)); mz=mean(nux.*nuy);
Uncertainty Analysis for Engineers

Alternative
n=10000000; mux=1; muy=2; x=exprnd(mux,n,1); y=exprnd(muy,n,1); mz=mean(x.*y); error=abs(mz-mux*muy)/mux/muy d=linspace(0,1,n+1); rx=unifrnd(d,d+1/n); ry=unifrnd(d,d+1/n); xx=-mux*log(1-rx); yy=-muy*log(1-ry); nux=xx(randperm(n)); nuy=yy(randperm(n)); mz=mean(nux.*nuy);
Uncertainty Analysis for Engineers 8

Test
Z=XY X and Y are beta with mean of 1 and 2, respectively Use simple Monte Carlo Then use LHS without sorting Then use LHS with sorting N=100,000 For each case, find mean 100 times and then take standard deviation of results

Uncertainty Analysis for Engineers

Case 1
n=100000; ntrials=100; mz=zeros(ntrials,1); for i=1:ntrials x=exprnd(mux,n,1); y=exprnd(muy,n,1); mz(i)=mean(x.*y); end std(mz)
Uncertainty Analysis for Engineers 10

Case 2
d=linspace(0,1,n+1); for i=1:ntrials rx=unifrnd(d,d+1/n); rx=rx(1:end-1); ry=unifrnd(d,d+1/n); ry=ry(1:end-1); x=expinv(rx,mux); y=expinv(ry,muy); mz(i)=mean(x.*y); end std(mz)
Uncertainty Analysis for Engineers 11

Case 3
d=linspace(0,1,n+1); for i=1:ntrials rx=unifrnd(d,d+1/n); rx=rx(1:end-1); ry=unifrnd(d,d+1/n); ry=ry(1:end-1); x=expinv(rx,mux); y=expinv(ry,muy); nux=x(randperm(n)); nuy=y(randperm(n)); mz(i)=mean(nux.*nuy); end std(mz)
Uncertainty Analysis for Engineers 12

Results
Mean(mz) Case 1 Case 2 Case 3 1.9999 4.0000 1.9998 Std(mz) 0.0098 0.00029 0.0064

Uncertainty Analysis for Engineers

13

You might also like