0

我正在使用该命令wblrnd(12.34,1.56)获取 100 个不同的值,这些值位于带有这些参数的 Weibull 分布中。

但我希望这 100 个点/值具有与参数给定的分布相同的分布。这不会发生。

基本上我想要得到 100 个值,这些值给我以前的完全相同的分布。

4

5 回答 5

4

除非您执行的抽奖次数是无限的,否则您的分布不能与您从中采样的分布相同。

为了给你一个实际的例子,你可以比较你的绘图的经验分布,即直方图,如何匹配拟合的 pdf:

subplot(121)
sample = wblrnd(12.34,1.56,100,1);    
histfit(sample,100,'wbl')
title('100 draws')

subplot(122)
sample = wblrnd(12.34,1.56,1e5,1);    
histfit(sample,100,'wbl')
title('100,000 draws')

在此处输入图像描述

另外,请注意均值和标准差不是 的参数wblrnd(A,B)。换句话说,mean(sample)不应该收敛到 12.34。

您可以查看维基百科:weibull 分布如何从形状和比例参数中检索平均值,即 12.34 和 1.56 给出的理论平均值。

于 2013-06-06T19:42:53.057 回答
1

在 MATLAB中使用新的概率分布对象可能对未来的寻求者有用。这突出了 、 和 函数的实用性makedist()random()尽管pdf()其他函数也可以)。请参阅文档

您可以先定义概率分布对象(如下图所示)。

>> pd = makedist('Weibull',12.34,1.56)
pd = 
  WeibullDistribution

  Weibull distribution
    A = 12.34
    B =  1.56

然后获得理论mean(), median(), std(), 或var()很容易。

>> mean(pd)
ans =
   11.0911
>> var(pd)
ans =
   52.7623
>> median(pd)
ans =
    9.7562

然后使用命令生成随机变量很简单random()

n = 2500;    
X = random(pd,n,1);

威布尔分布

注意:R2013a 中引入的概率分布对象。

figure, hold on, box on
histogram(X,'Normalization','pdf','DisplayName','Empirical (n = 2500)')
plot([0:.01:50],pdf(pd,[0:.01:50]),'b-','LineWidth',2.5,'DisplayName','Theoretical')  

参考:威布尔分布

于 2018-11-13T19:13:09.253 回答
0

在你的命令之前使用会rand('seed',0);纠正你的问题吗?

于 2013-06-06T15:13:49.863 回答
0

根据wblrnd 文档获取 100 个遵循 Weibull 分布且参数为 12.34 和 1.56 的值,您应该这样做:

wind_velocity = wblrnd(12.34 , 1.56 , 1 , 100);

这将返回一个 1x100 值的向量,从第 1 天到第 100 天。
要获得这 100 天的平均速度,请执行以下操作:

mean(wind_velocity)

希望这是你需要的。

于 2013-06-06T18:17:54.813 回答
0

如果不是获取随机点,您实际上想要指定一个概率(在零和一之间)并从带有参数A和的 Weibull 分布中获取一个值B,那么您想要的是逆 CDF:

X = wblinv(P,A,B)

这实际上wblrnd是基于(这是一种称为逆采样的技术,通常用于从许多分布中生成随机变量)。在wblrndP = rand(...)有效地。但是,如果您想通过其他方法选择概率,则wblinv允许您获得X对应于 any的值P(其中 P(X) 是概率分布函数或 PDF)。

于 2013-06-07T00:15:22.500 回答