Matlab:从定制的概率密度函数生成随机数

时间:2017-12-19 20:47:51

标签: matlab random histogram probability-density probability-distribution

我有一个1977年至1983年1月份降雨量为3小时的数据集(见附件)。但是,我想根据这些数据生成1984 - 1990年期间的降水数据。因此,我想知道是否有可能创建降水量(1977-1983)的定制概率密度函数,并由此生成所需时期(1984-1990)的随机数(降水数据)。

Matlab中是否可以这样做,有人可以通过这样做帮助我吗?

提前致谢!

Click to see an example of the data

3 个答案:

答案 0 :(得分:1)

直方图将为您提供PDF估算 - 只需将箱数除以样本总数。从那里你可以通过整合来估计CDF。最后,您可以选择介于0和1之间的均匀分布的随机数,并估计将产生该数字的CDF的参数。也就是说,如果y是您选择的随机数,那么您希望找到x,使得CDF(x)= y。 x的值将是带有所需PDF的随机数。

答案 1 :(得分:0)

如果您拥有“统计和机器学习工具箱”,则可以使用'Kernel Distribution'方法评估数据的PDF:

Percip_pd = fitdist(Percip,'Kernel');

然后使用它从同一分布中生成N个随机数:

y = random(Percip_pd,N,1);

答案 2 :(得分:0)

引用@ AnonSubmitter85:

  

"通过整合估算CDF。最后,你可以统一选择   分布在0和1之间的随机数并估计参数   CDF会产生这个数字。也就是说,如果y是随机的   你选择的数字,那么你想找到x,使得CDF(x)= y。该   x的值将是带有所需PDF的随机数。"

%random sampling
 N=10; %number of resamples

 pdf = normrnd(0, 1, 1,100); %your pdf
 s = cumsum(pdf); %its cumulative distribution

 r = rand(N,1); %random numbers between 0 and 1
 for ii=1:N
   inds = find(s>r(ii));
   indeces(ii)=inds(1); %find first value greater than the random number
 end
 resamples = pdf(indeces) %the resamples