Matlab: Генерация чисел своими руками

by

Четыре маленьких программки для генерации случайных чисел:

Алгоритм для генерации равномерных случайных чисел.
Разумеется, в матлабе есть свой генератор равномерных случайных чисел (он вызывается функцией rand), но его можно написать и самостоятельно.

Например, так:

function [U] = gen_uniform(n)
% Генерирует n равномерно распределенных случайных чисел на отрезке [0;1]
% см. Шведов А.С. "Теория вероятностей и математическая статистика - 2"
% стр. 211

% Задаем настраивающие константы.
a = 16807;
b = 0;
m = 2147483647;

N = zeros(n+1, 1);
% N(1,1) - в книге обозначено N0
N(1,1) = 1000000000;

X = zeros(n,1);

for i=2:(n+1)
N(i,1) = mod(a*N(i-1,1) + b, m);
X(i-1,1) = N(i,1)/m;
end

U = X;

Алгоритм для генерации показательно распределенных случайных чисел:

function [E] = gen_exponential(n, lambda)
% Генерирует n экспоненциально (показательно) распределенных случайных
% чисел с параметром lambda.
% см. Шведов А.С. "Теория вероятностей и математическая статистика - 2"
% стр. 222; пример 4.3

U = gen_uniform(n);
E = -log(1 - U)/lambda;

Алгоритм для генерации стандартных нормальных случайных случайных величин.

function [Z] = gen_normal_stand(n)
% Генерирует n стандартных нормальных случайных чисел
% см. Шведов А.С. "Теория вероятностей и математическая статистика - 2"
% стр. 224

if (mod(n,2) == 0)
n1 = n;
else n1 = n + 1;
end
U = gen_uniform(n1);

Z = zeros(n1, 1);
for i=1:2:n1
Z(i,1) =   cos(2*pi*U(i,1))*sqrt(-2*log(U(i + 1,1)));
Z(i+1,1) = sin(2*pi*U(i,1))*sqrt(-2*log(U(i + 1,1)));
end

Z = Z(1:n, 1);

Функция, которая генерирует две коррелированные случайные выборки одинакового объема n:

E( X(i) ) = mx; E( Y(i) ) = my; D( X(i) ) = varx; D( Y(i) ) = vary; corr( X(i), Y(i) ) = p;   (i=1,…,n)


function [X, Y] = generate_x_e(n, mx, my, varx, vary, p)
 sx = sqrt(varx);
 sy = sqrt(vary);
 b = p * sy/sx;
 a = my - mx * p * sy / sx;
 X = sx * randn(n,1) + mx;
 se = sqrt(sy^2 + b^2 * sx^2 - 2 * p^2 * sy^2);
 e = se * randn(n,1);
 Y = a + b * X + e;

Реклама

Метки: , ,

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s


%d такие блоггеры, как: