这是我们的讲师给出的MATLAB问题:
这是我如何解决问题的代码。我查看了答案键并意识到我的教授使用了cumsum,但我无法理解它在我的代码中实际上在概率方面做了些什么。我得到了正确的输出,但我想澄清一下:
clear; clc;
m = input('Type size of map : ');
totalSteps = 0;
x = 0;
y = 0;
Prob = [ 2 3 4 5 6 5 4 3 ]/32;
trials = input('Type number of trials : ');
CumProb = Prob;
for i = (0:length(trials));
for n = 2:length(Prob)
CumProb(n) = CumProb(n-1) + Prob(n);
end
while abs(x)<m || abs(y)<m
r = rand(1,1);
if r <= CumProb(1)
x=x+1;
elseif r<=CumProb(2)
x=x+1 ; y=y+1;
elseif r<= CumProb(3)
y=y+1;
elseif r<=CumProb(4)
x = x-1 ; y=y+1;
elseif r<=CumProb(5)
x=x-1;
elseif r<=CumProb(6)
x=x-1; y=y-1;
elseif r<=CumProb(7)
y=y-2;
else
x = x+1 ; x=y;
end
totalSteps = totalSteps+1;
end
i = i+1;
end
averagesteps = totalSteps/length(trials)
我的问题是,为了获得正确的概率,cumsum实际上在做什么?我觉得,如果我没有被告知,那么你可能会给我错误的答案,因为我不会使用它。
答案 0 :(得分:0)
cumsusm
可帮助您为每个步骤的方向生成加权选项。
Prob = [ 2 3 4 5 6 5 4 3 ]/32;
CumProb = cumsum(Prob);
p = rand;
Direction = find(CumProb > p,1);
为了帮助理解这个问题,让我们把它简化为两个选择:左或右,概率为0.2和0.8:Prob = [0.2 0.8]; CumProb = [0.2 1]
。当您将p
生成为0到1之间的随机数时,CumProb
中第一个值大于p
的索引就是您所采用的方向:
p = 0.1
=&gt;左p = 0.2
=&gt;左p = 0.3
=&gt;右p = 0.4
=&gt;右p = 0.5
=&gt;对,等等。答案 1 :(得分:0)
您的代码:
CumProb = Prob;
for n = 2:length(Prob)
CumProb(n) = CumProb(n-1) + Prob(n);
end
等于:
CumProb = cumsum(Prob)