我正在使用命令wblrnd(12.34,1.56)
获取具有这些参数的Weibull分布中的100个不同值。
但我希望这些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。
您可以检查wikipedia: weibull distribution如何从形状和比例参数中检索平均值,即12.34和1.56给出的理论平均值。
在你的命令之前使用rand('seed',0);
纠正你的问题?
根据wblrnd documentation获得的100个值遵循Weibull分布,参数为12.34和1.56,您应该:
wind_velocity = wblrnd(12.34 , 1.56 , 1 , 100);
这将返回1x100值的向量,从第1天到100。 要获得那100天的平均速度,请执行以下操作:
mean(wind_velocity)
希望这是你需要的。 问候
如果不是获取随机点而是实际想要指定概率(在0和1之间)并从Weibull分布中获取具有参数A
和B
的值,那么您想要的是逆CDF:
X = wblinv(P,A,B)
这实际上是wblrnd
所基于的(它是一种称为inverse sampling的技术,通常用于从许多分布中生成随机变量)。在wblrnd
,P = rand(...)
有效。但是,如果您想通过其他方法选择概率,wblinv
允许您获得对应于任何X
的P
值(其中P(X)是概率分布函数,或PDF)。
未来的求助者可能会在MATLAB中使用新的概率分布对象。这突出了makedist
,random
和pdf
函数的实用性(尽管其他人也有效)。见documentation。
您可以先定义概率分布对象(如下所示,输出)。
>> pd = makedist('Weibull',12.34,1.56)
pd =
WeibullDistribution
Weibull distribution
A = 12.34
B = 1.56
然后轻松获得理论上的mean
,median
,std
或var
is。
>> 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')