2017-01-31 6 views
2

私は合成画像の信号強度を変えています。私は0と0.1の間で変化する信号が必要ですが、もっと多くは.01/.02の範囲に収まるようにガンマ分布でこれを行う必要があります。問題は、gamrnd関数がライブラリの一部でないStatistics Toolboxなしで2010バージョンのMatlabを使用していることです。Statistics Toolboxを使用せずにガンマ分布から乱数を引き出す方法は?

何かすべてのヘルプは大歓迎です。

答えて

4

あなたは、他のディストリビューションへの均一な分布を変換するInverse transform sampling methodを使用することができます。ここでは

P = rand(1000); 
X = gaminv(P(:),2,2); % with k = 2 and theta = 2 

はlitleデモンストレーションです:

for k = [1 3 9] 
    for theta = [0.5 1 2] 
     X = gaminv(P(:),k,theta); 
     histogram(X,50) 
     hold on 
    end 
end 

与える:

gamma dist


編集:統計ツールボックスなし

は、あなたがrandrandnでガンマ分布から乱数を生成するためにMarsaglia's simple transformation-rejection methodを使用することができます。

N = 10000; % no. of tries 
% distribution parameters: 
a = 0.5; 
b = 0.1; 
% Marsaglia's simple transformation-rejection: 
d = a - 1/3; 
x = randn(N,1); 
U = rand(N,1); 
v = (1+x./sqrt(9*d)).^3; 
accept = log(U)<(0.5*x.^2+d-d*v+d*log(v)); 
Y = d*(v(accept)).*b; 

を今すぐYがガンマのように分布している(a、b)は。私たちは、gamrnd機能使用して結果をテストすることができます。

n = size(Y,1); 
X = gamrnd(a,b,n,1); 

そしてYのヒストグラムを、そしてXは以下のとおりです。

gamma dist 2

しかし、ガンマ分布は、ので、あなたのニーズに適合しない場合がありますことを心に留めておきますそれはno specific upper boundを持っています(すなわち、無限に行きます)。したがって、ベータ版を10で割ったような別の(有界の)分布を使いたいかもしれません。

+0

このバージョンのmatlabでは、gaminvの意味を理解できません。 – Kelsey

+0

奇妙なことに、ドキュメントには「R2006aより前に導入されました」* ... – EBH

+0

@Kelsey ** Statistics Toolbox **はありますか? – EBH

関連する問題