我正在使用该命令wblrnd(12.34,1.56)
获取 100 个不同的值,这些值位于带有这些参数的 Weibull 分布中。
但我希望这 100 个点/值具有与参数给定的分布相同的分布。这不会发生。
基本上我想要得到 100 个值,这些值给我以前的完全相同的分布。
我正在使用该命令wblrnd(12.34,1.56)
获取 100 个不同的值,这些值位于带有这些参数的 Weibull 分布中。
但我希望这 100 个点/值具有与参数给定的分布相同的分布。这不会发生。
基本上我想要得到 100 个值,这些值给我以前的完全相同的分布。
除非您执行的抽奖次数是无限的,否则您的分布不能与您从中采样的分布相同。
为了给你一个实际的例子,你可以比较你的绘图的经验分布,即直方图,如何匹配拟合的 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 给出的理论平均值。
在 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')
参考:威布尔分布
在你的命令之前使用会rand('seed',0);
纠正你的问题吗?
根据wblrnd 文档获取 100 个遵循 Weibull 分布且参数为 12.34 和 1.56 的值,您应该这样做:
wind_velocity = wblrnd(12.34 , 1.56 , 1 , 100);
这将返回一个 1x100 值的向量,从第 1 天到第 100 天。
要获得这 100 天的平均速度,请执行以下操作:
mean(wind_velocity)
希望这是你需要的。
如果不是获取随机点,您实际上想要指定一个概率(在零和一之间)并从带有参数A
和的 Weibull 分布中获取一个值B
,那么您想要的是逆 CDF:
X = wblinv(P,A,B)
这实际上wblrnd
是基于(这是一种称为逆采样的技术,通常用于从许多分布中生成随机变量)。在wblrnd
,P = rand(...)
有效地。但是,如果您想通过其他方法选择概率,则wblinv
允许您获得X
对应于 any的值P
(其中 P(X) 是概率分布函数或 PDF)。