Как мне вызвать мои случайные числа с размером 100, чтобы имитировать игру в кости 100 раз? - PullRequest
0 голосов
/ 29 мая 2018

Я хочу симулировать игру в кости 100 раз, сгенерировав выборку с размером = 100 случайной величины. Вычислить точечный оценщик P для вероятности события 'even.

Это моя функция, якомментарий "i-loop", потому что я хочу написать в другой функции и при вызове myRand ()

function [result]=myRand()

%generate a sample with size = 100

 X = [1 2 3 4 5 6];
 P = [1/6 1/6 1/6 1/6 1/6 1/6];


size=100;
%n=100;  % playing dice 100 times
result=zeros(100,1);
  %for i=1:n
    for j=1:size 

         result(j,:)=randsample(X,1,true,P);
    end
  %end
end

Моя проблема в том, что когда я вызываю myRand ()

function simulate()

    % simulate trowing dice

    countEven = 0; % count even
    n=100;  % playing dice 100 times
    throw_dice = zeros(n,2);
    for i = 1:n

        throw_dice(i) = myRand();

    end
end

ОпределенноУ меня есть ошибка «В назначении A (:) = B количество элементов в A и B должно быть одинаковым».Есть идеи, как мне вызвать мою функцию?

1 Ответ

0 голосов
/ 29 мая 2018

myRand:

Сначала в myRand плохая практика - использовать size в качестве имени переменной, поскольку это уже функция в Matlab.

Во-вторых, вы можете сгенерировать все 100 переменных за один раз с помощью

randsample(X,100,true,P)

В-третьих, вы должны принять число переменных в качестве аргумента myRand(number)

Ввсего:

function [result]=myRand(number)

%generate a sample with size = number

X = [1 2 3 4 5 6];
P = [1/6 1/6 1/6 1/6 1/6 1/6];

result=randsample(X,number,true,P);

myRand теперь вернет number повторений броска кубика.

Имитация:

Относительно вашего simulate функция, то вы повторяете myRand сто раз.В вашей версии myRand сгенерируйте сотню случайных величин.Другими словами, вы просите сто переменных сто раз.

Таким образом, вы должны сделать выбор, если myRand сгенерирует 100 переменных, или вы должны вызывать его 100 раз (где он равен 1 ввремя).Как правило, быстрее генерировать все сразу.

Таким образом, ваш simulate теперь:

function simulate()

% simulate trowing dice
n=100;  % playing dice 100 times
throw_dice = myRand(n); %Ask for n rolls

%*************
%Insert code to count even rolls.
%*************

В качестве альтернативы:

function simulate()
% simulate trowing dice
n=100;  % playing dice 100 times
even_rolls = 0;
for i = 1:n %Roll the die n times
    throw_dice = myRand(1); %Ask for 1 number
    %*************
    %Insert code to count even rolls.
    %*************
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...