Случайные числа в MATLAB, что делает этот код - PullRequest
2 голосов
/ 12 июня 2019

Я сталкивался с этим кодом,

По существу мне нужно сгенерировать два вектора случайных чисел,

Вот код,

T = 500
     e = normrnd(0,1,[2*T,k]);

        T = size(e,1);
        e = [e(ceil(rand(T,1)*T),:);e];

Почему этот метод используется с ceil? Любые идеи о том, почему кто-то будет использовать этот метод?

1 Ответ

1 голос
/ 12 июня 2019
  • Индексирование Matlab начинается с 1, ceil() преобразуется 0.8 to 1
  • Индекс Matlab может принимать только целые значения ceil() всегда возвращает целое число
   >> x = rand(3,1)*5

    x =

        4.3117
        4.4820
        0.9451

    >> ceil(x)

    ans =

         5
         5
         1

ceil(rand(m,n)*imax) and randi([1, imax], [m, n]) are equivalent. 

Чтобы подтвердить предпочтение использования ceil(), нужно взглянуть на документацию по этим методам, набрав open ceil в командной строке, например

  • rand()
Copyright 1984-2017 The MathWorks, Inc.
  • ceil()
Copyright 1984-2005 The MathWorks, Inc.
  • randi()
Copyright 2008-2013 The MathWorks, Inc.

В более ранней версии Matlab 1984~2008a, randi() не было доступно.

Единственной альтернативой было использование rand() and ceil() or rand() and floor() для генерации равномерно распределенных случайных целых чисел.

Короче говоря, используя ceil() and rand(), вы можете генерировать случайные числа на всех версиях Matlab , тогда как randi() работает только на версиях более поздних, чем версия 2008b.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...