Re: a random number obeying Gaussian + within a range
- From: "Bruno Luong" <b.luong@xxxxxxxxxxxxxxxxxxxx>
- Date: Sun, 19 Apr 2009 13:30:04 +0000 (UTC)
Here is a function generating truncated Gaussin with correct standard deviation:
% Save this in TruncatedGaussian.m file (included 2 nested function)
function x = TruncatedGaussian(sigma, range, n)
% x = TruncatedGaussian(sigma, range, n)
% Generate a random vector of length n; truncated Gaussian Distribution X
% in [-range,range]; mean(X) = 0 and std(X)=sigma
% Search for "sigmac" such that the truncated Gaussian having sigmac in
% the formula in the pdf procides a standard deviation equal to sigma
[sigmac res flag] = fzero(@scz,1.5*sigma,[],sigma,range);
if flag<0 % Someting is wrong
fprintf('warning=range and sigma incompatible\n');
sigmac = sigma;
else
fprintf('sigmac=%g\n',sigmac)
sigtarget=stdtrunc(range, sigmac);
fprintf('sigma=%g\n',sigtarget)
end
% Inverse pg the cdf
c=1/(sqrt(2)*sigmac);
cdfinv = @(y) erfinv(y*2*erf(c*range) + erf(-c*range))/(c);
% Generate random
x=cdfinv(rand(1,n));
end
function stdt=stdtrunc(upper, sigma)
% Compute the standard deviation of a trunctated gaussian distribution
aa=upper./sigma;
it=erf(aa/sqrt(2));
corr=erf(aa/sqrt(2))-(2*aa)/sqrt(2*pi).*exp(-aa.^2/2);
stdt = sigma.*sqrt(corr./it);
end
function res=scz(sc, sigma, upper)
% Gateway for fzero
res = stdtrunc(upper, sc) - sigma;
end
% End of TruncatedGaussian.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Test this on command line:
sigma=2;
range=4;
x=TruncatedGaussian(sigma, range, 1e5);
mean(x)
std(x)
hist(x,64)
% Bruno
.
- Follow-Ups:
- Re: a random number obeying Gaussian + within a range
- From: Bruno Luong
- Re: a random number obeying Gaussian + within a range
- References:
- a random number obeying Gaussian + within a range
- From: hailiang shen
- Re: a random number obeying Gaussian + within a range
- From: Roger Stafford
- Re: a random number obeying Gaussian + within a range
- From: Bruno Luong
- a random number obeying Gaussian + within a range
- Prev by Date: 2d vectorization challenge
- Next by Date: Re: 2d vectorization challenge
- Previous by thread: Re: a random number obeying Gaussian + within a range
- Next by thread: Re: a random number obeying Gaussian + within a range
- Index(es):
Relevant Pages
|
Loading