MatLab为什么赢了';我的随机游走者不会在捕获区内突破吗?

MatLab为什么赢了';我的随机游走者不会在捕获区内突破吗?,matlab,break,random-walk,Matlab,Break,Random Walk,嗨,我编程了一个1d随机漫游器,我正在尝试实现一个捕获区域,如果漫游器在特定的值范围内保持一定的时间,程序将停止。我的代码如下所示: steps = 1000; %sets the number of steps to 1000 rw = cumsum(-1 + 2 * round(rand(steps,1)),1); %Set up our random walk with cumsum %Now we will set up our capture zone between 13-18 f

嗨,我编程了一个1d随机漫游器,我正在尝试实现一个捕获区域,如果漫游器在特定的值范围内保持一定的时间,程序将停止。我的代码如下所示:

steps = 1000; %sets the number of steps to 1000
rw = cumsum(-1 + 2 * round(rand(steps,1)),1); %Set up our random walk with cumsum

%Now we will set up our capture zone between 13-18 for fun
if rw >= 13 & rw <= 18
    dwc = dwc + 1 %Dwelling counted ticks up every time walker is in 13-18
else dwc = 0;     %Once it leaves, it returns to 0
end

while dwc >= 5
    fprintf('5 steps or more within range after %d steps, so so breaking out.\n', rw);
break
end

figure(7)
comet(rw); %This will plot our random walk
grid on;   %Just to see the capture zone better
hold on;
line(xlim, [13, 13], 'Color', 'r');
line(xlim, [18, 18], 'Color', 'r');
hold off;
title('1d Random Walk with Capture Zone');
xlabel('Steps');
ylabel('Position');
steps=1000;%将步数设置为1000
rw=cumsum(-1+2*round(rand(steps,1)),1);%使用cumsum设置我们的随机行走
%现在我们将在13-18岁之间设置我们的捕获区,以供娱乐
如果rw>=13&rw=5
fprintf('5步或更多步在%d步之后的范围内,因此会中断。\n',rw);
打破
结束
图(7)
彗星(rw);%这将绘制我们的随机行走
网格打开;%只是为了更好地看到捕获区
等等
行(xlim,[13,13],'Color','r');
行(xlim,[18,18],'Color','r');
拖延;
标题(“带捕获区的1d随机行走”);
xlabel(“步骤”);
ylabel(‘位置’);

它将穿过人行道,但它永远不会在捕获区中断。我相信它已经在多个场合的捕捉区超过5步,但它仍然在运行。非常感谢您的帮助。

您的代码没有按照您的想法执行。没有可单步执行的循环来计算步骤和检查捕获(…无论如何,您不需要循环)

第一个问题:rw是一个1000x1阵列。因此,如果语句条件
rw>=13&rw 0)))numel(captureCheck)+1])-1;
fprintf('区域中连续步骤的最大数量为:%d\n',最大(连续步骤sinzone));

我想代码不完整吧?测试捕获区域的代码没有循环。它只测试一次!另外,当
循环处于
时,您的
中断
会中断
,但该循环中不会发生任何事情。使用
if
测试
dwc
。老实说,我认为代码是完整的。这是我第一次随机行走,我以前从未使用过休息。你介意告诉我这个代码可能的解决方案是什么样的吗?谢谢,期待着看到需要改进的地方。很多时候,我都很难对这些事情了如指掌。请参阅编辑以查看随机行走区域中的步数。这非常有效,谢谢。但是,如果步行者在捕获区连续走了10步,我怎么才能让它“停下来?”@GarrettPenna没有什么可以停的,所以我不知道你的意思。由于此代码已线性化(无循环),因此没有需要停止的运行。第二行代码已经确定了行走的所有1000步。但是,当您达到10步阈值时,您可以在
rw
中找到,然后将行走
rw
裁剪到该点。这就是你的意思吗?
while dwc >= 5
...
break
end
steps = 1000; %sets the number of steps to 1000
rw = cumsum(-1 + 2 * round(rand(steps,1)),1); %Set up our random walk with cumsum

%Now we will set up our capture zone between 13-18 for fun
captureCheck      = rw >= 13 & rw <= 18;

%Counts the number of consecutive steps within the capture zone.
consecStepsInZone = diff([0 (find( ~(captureCheck(:).' > 0))) numel(captureCheck) + 1])- 1;  

fprintf('The max number of consecutive steps in the zone is: %d\n',max(consecStepsInZone));