私は合成画像の信号強度を変えています。私は0と0.1の間で変化する信号が必要ですが、もっと多くは.01/.02の範囲に収まるようにガンマ分布でこれを行う必要があります。問題は、gamrnd
関数がライブラリの一部でないStatistics Toolboxなしで2010バージョンのMatlabを使用していることです。Statistics Toolboxを使用せずにガンマ分布から乱数を引き出す方法は?
何かすべてのヘルプは大歓迎です。
私は合成画像の信号強度を変えています。私は0と0.1の間で変化する信号が必要ですが、もっと多くは.01/.02の範囲に収まるようにガンマ分布でこれを行う必要があります。問題は、gamrnd
関数がライブラリの一部でないStatistics Toolboxなしで2010バージョンのMatlabを使用していることです。Statistics Toolboxを使用せずにガンマ分布から乱数を引き出す方法は?
何かすべてのヘルプは大歓迎です。
あなたは、他のディストリビューションへの均一な分布を変換する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
与える:
編集:統計ツールボックスなし
は、あなたがrand
とrandn
でガンマ分布から乱数を生成するために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
は以下のとおりです。
しかし、ガンマ分布は、ので、あなたのニーズに適合しない場合がありますことを心に留めておきますそれはno specific upper boundを持っています(すなわち、無限に行きます)。したがって、ベータ版を10で割ったような別の(有界の)分布を使いたいかもしれません。
このバージョンのmatlabでは、gaminvの意味を理解できません。 – Kelsey
奇妙なことに、ドキュメントには「R2006aより前に導入されました」* ... – EBH
@Kelsey ** Statistics Toolbox **はありますか? – EBH