Генерация гамма-случайных величин в Matlab - PullRequest
0 голосов
/ 01 августа 2020

У нас есть массив параметров масштаба и формы, и мы хотим сгенерировать n гамма-случайных величин (например, это может быть 10 ^ 6) для каждой пары параметров масштаб-форма, без использования al oop . Что мы можем сделать?

Есть какой-нибудь трюк, потому что, по-видимому, нет способа, по крайней мере, в Matlab, чтобы помочь? Заранее спасибо ... Если это поможет, я поделюсь своим кодом, который фактически посвящен моделированию адаптивной передачи для сети HARQ:

    % simulation for Throughput FAM/ S-HARQ
clear all
clc
L = 5; K = 20;a = 3;b = 1/a; N = 6; Nmax = 0; M = 128; n =10^5;
Rn = [0.5   1   1.5  2.25   3   4.5];
gn = [7.99  3.49    1.68    0.66    0.37    0.09];
an = [274.72    90.25   67.61   50.12   53.39   35.35];
lambdandB = [-1.53  1.09    3.97    7.70    10.24   15.97];
lambdan = 10.^(lambdandB/10); Ploss = 0.01;
Ptarg = Ploss^(1/(Nmax + 1));
B1 = dlmread('D:\My-Thesis\My work 2\General PDF\betaL=1.txt');
B2 = dlmread('D:\My-Thesis\My work 2\General PDF\betaL=2.txt');
B3 = dlmread('D:\My-Thesis\My work 2\General PDF\betaL=3.txt');
B4 = dlmread('D:\My-Thesis\My work 2\General PDF\betaL=4.txt');
B5 = dlmread('D:\My-Thesis\My work 2\General PDF\betaL=5.txt');
BT = [B1;B2;B3;B4;B5];
%--------------------------------------------------------------
P = linspace(0.01,10,20);
Throughput = zeros(length(P),1);
SINR_th = dlmread('D:\My-Thesis\My work 2\CAL_SINR\FAMC\SIRN_th1.txt');
SINR_th(N+1) = 10^3;
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

for i = 1:length(P)
for ii = 1 : L
for k = 1 : K
    de = 0;
    SUM = 0;
    beta1 = BT(ii,:);
beta1(k) = [];
%______________simulation generator___________________________________
num = P(i)*gamrnd(a,BT(ii,k),n,1).*gamrnd(M,1,n,1);
gam = zeros(n,1);
for h = 1: K*L-1
    gam = gam + exprnd(1,n,1).*gamrnd(a,beta1(h),n,1);
end
den = 1 + P(i) * gam ;
SINR = num./den;
%_____________________________________________________________________
for j = 1:N
Lambda = linspace(SINR_th(j),SINR_th(j+1),500);
a2 = SINR_th(j+1);a1 = SINR_th(j);
    sinr1 = SINR(a1<= SINR );
    sinr2 = sinr1(sinr1 < a2);
    percentage1 = length(sinr2)/n;
            de = de + Rn(j)*percentage1;
            PER = an(j)*exp(-gn(j)*length(sinr2))/n;
            
SUM = SUM + Rn(j)*PER;
end

if de == 0
    thr = 0;
else
p = SUM/de;
average_number = (1 - p^(Nmax + 1))/(1 - p);
thr = de/average_number;
end;
Throughput(i) = Throughput(i) + thr;
end
end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...