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:
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:
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.
Diese Version von Matlab weiß nicht, was Gaminv bedeutet. – Kelsey
Seltsam, in der Dokumentation heißt es * "Eingeführt vor R2006a" * ... – EBH
@Kelsey hast du die ** Statistics Toolbox **? – EBH