我想通过生成一个大小= 100的随机变量的样本来模拟玩骰子100次。计算事件'偶数概率的点估计值P.
这是我的功能,我评论“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中的元素数必须相同。” 知道如何调用我的函数?
答案 0 :(得分:2)
<强> 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