我正在使用命令wblrnd(12.34,1.56)
来获取具有这些参数的Weibull分布中的100个不同值。
但是我希望那些100点/值具有与参数给出的相同的分布。这不会发生。
基本上我想要的是,获得100个值,这些值给出了我以前完全相同的分布。
答案 0 :(得分: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。
您可以查看wikipedia: weibull distribution如何从形状和比例参数中检索平均值,即12.34和1.56给出的理论平均值。
答案 1 :(得分:0)
在命令之前使用rand('seed',0);
会纠正您的问题吗?
答案 2 :(得分:0)
根据wblrnd documentation获得100个参数为12.34和1.56的威布尔分布值,您应该这样做:
wind_velocity = wblrnd(12.34 , 1.56 , 1 , 100);
这将返回1x100值的向量,从第1天到第100天 要获得这100天的平均速度,请执行以下操作:
mean(wind_velocity)
希望这是你所需要的。
此致
答案 3 :(得分:0)
如果不是获取随机点而是实际想要指定概率(在0和1之间)并从具有参数A
和B
的Weibull分布中获取值,那么您想要的是逆CDF:
X = wblinv(P,A,B)
这实际上是wblrnd
所基于的(它是一种称为inverse sampling的技术,通常用于从许多分布中生成随机变量)。在wblrnd
,P = rand(...)
有效。但是,如果您想通过其他方法选择概率,wblinv
允许您获取与X
对应的P
值(其中P(X)是概率分布函数) ,或PDF)。
答案 4 :(得分:0)
在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
。
>> 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')