2017-01-31 6 views
2

Ich variiere die Signalstärke für synthetische Bilder. Ich brauche das Signal zwischen 0 und 0,1 zu variieren, aber ich muss dies mit einer Gamma-Verteilung tun, so dass mehr von ihnen im Bereich von 0,01/0,02 liegen. Das Problem ist, dass ich die 2010-Version von Matlab ohne die Statistics Toolbox verwende, die die gamrnd Funktion einen Teil seiner Bibliothek nicht enthält.Wie zeichne ich Zufallszahlen aus einer Gammaverteilung ohne die Statistics Toolbox?

Jede und alle Hilfe wird sehr geschätzt.

Antwort

4

können Sie die Inverse transform sampling method verwenden, um eine gleichmäßige Verteilung auf andere Verteilung zu konvertieren:

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

Hier ist eine litle Demonstration:

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

Welche gibt:

gamma dist


Edit:

Ohne die Statistik-Toolbox können Sie die Marsaglia's simple transformation-rejection method verwenden Zufallszahlen aus Gamma-Verteilung zu erzeugen, mit rand und randn:

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; 

Jetzt wird Y wie Gamma verteilt (a, b) . Wir können das Ergebnis testen Sie die gamrnd Funktion:

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

Und die Histogramme von Y und X sind:

gamma dist 2

jedoch bedenken, dass Gamma-Verteilung nicht Ihren Bedürfnissen passen könnte, weil es hat no specific upper bound (dh geht in die Unendlichkeit). Vielleicht möchten Sie eine andere (beschränkte) Verteilung, wie Beta, geteilt durch 10.

+0

Diese Version von Matlab weiß nicht, was Gaminv bedeutet. – Kelsey

+0

Seltsam, in der Dokumentation heißt es * "Eingeführt vor R2006a" * ... – EBH

+0

@Kelsey hast du die ** Statistics Toolbox **? – EBH

Verwandte Themen