Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Latin Hypercube Sampling Example Jake Blanchard Spring 2010 Uncertainty Analysis for Engineers 1 Example Z=XY X and Y follow exponential distributions x=1 x y=1/2 pdf f e cdf F 1 e mean x 1 Uncertainty Analysis for Engineers 2 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 0 1 2 3 4 5 6 7 8 9 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 4 Step 3 Sort the values (shuffle) nux=xx(randperm(n)); 25 20 20 yy 15 15 nyy 10 5 0 0 1 2 3 4 5 xx 6 7 8 9 10 10 5 0 0 2 4 6 8 nux Uncertainty Analysis for Engineers 10 5 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 6 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); error=abs(mz-mux*muy)/mux/muy Uncertainty Analysis for Engineers 7 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); error=abs(mz-mux*muy)/mux/muy 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 9 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) Std(mz) Case 1 1.9999 0.0098 Case 2 4.0000 0.00029 Case 3 1.9998 0.0064 Uncertainty Analysis for Engineers 13