Matlab 通过矩形的随机路径

Matlab 通过矩形的随机路径,matlab,loops,random,path,while-loop,Matlab,Loops,Random,Path,While Loop,我想写一段代码,通过给定大小的矩形生成一条随机路径 我将从点(0,0)开始,然后向上或向右到达xlim和ylim 这是我的密码 y = 10; x = 10; yOld = 0; xOld = 0; figure axis([0 x 0 y]) while yOld < y && xOld < x DirectionChange = randi([0 1],1); if DirectionChange == 0 yNew = yOld

我想写一段代码,通过给定大小的矩形生成一条随机路径

我将从点
(0,0)
开始,然后向上
向右
到达
xlim
ylim

这是我的密码

y = 10;
x = 10;
yOld = 0;
xOld = 0;
figure
axis([0 x 0 y])
while yOld < y && xOld < x
    DirectionChange = randi([0 1],1);
    if DirectionChange == 0
        yNew = yOld + 1;
        xNew = xOld;
    else
        xNew = xOld + 1;
        yNew = yOld;
    end
    line ([xOld xNew],[yOld yNew],'LineWidth',3);hold on
    yOld = yNew;
    xOld = xNew;
end
line ([xNew x],[yNew y],'LineWidth',3);hold off 
y=10;
x=10;
yOld=0;
xOld=0;
图形
轴([0 x 0 y])
而yOld
代码有一个
while循环
,当
x
y
中的一个达到其极限时结束

因此,只要
x=y
,它就可以正常工作

但是,当
y>x
时,路径更可能提前到达
xlim

对于12次运行的
x=10,y=10
我得到了(我把它弄得五颜六色以便看起来更好!)

设置x=10,y=20,我得到

正如你所见,在后一种情况下,我失去了随机性,因为
x
达到极限的概率增加了

在出现
x~=y
的情况下,如何保持随机性,有什么建议吗


谢谢。

您要做的是使
p(x增加)=x/(x+y)
p(y增加)=y/(x+y)
。这样,
x
达到极限的概率与
y
达到极限的概率相同

示例:对于给定的
xlim
为5和给定的
ylim
为10,从连续间隔
[0,1]
生成一个随机数。如果此随机数小于.333,即
xlim/(xlim+ylim)
,则应增加
xOld
。否则,增加
yOld


使用
rand
而不是
randi

一个选项是根据尺寸比来调整方向选择,例如:

DirectionChange = rand(1);

if DirectionChange < y/(x+y)
    yNew = yOld + 1;
    xNew = xOld;
 else
    xNew = xOld + 1;
    yNew = yOld;
 end
DirectionChange=rand(1);
如果方向改变

是否有任何需要遵守的要求?e、 g.恒定步长

编辑: 避免撞到“墙”的更有效策略:

DirectionChange = rand(1);

% distance left to the end
xLeft = x - xOld;
yLeft = y - yOld;

if DirectionChange < yLeft/(xLeft+yLeft)
    yNew = yOld + 1;
    xNew = xOld;
else
    xNew = xOld + 1;
    yNew = yOld;
end
DirectionChange=rand(1);
%离终点的距离
xLeft=x-xOld;
yLeft=y-卵黄;
如果方向改变
您始终需要向右走x步,向上走y步。因此,制作一个包含这些步骤的数组作为编码指令(这里一个简单的数组就可以了,我们可以使用0表示水平步骤,1表示垂直步骤)。然后洗牌数组。这是保证击中角落没有任何调整,而且所有可能的路径将同样有可能(随机你可以得到)


您的编辑不会保留随机性——如果位置不在右上角和左下角之间的对角线上,它会使您不太可能朝一个方向移动。OP可能会喜欢这种行为,但我想确保指出,您(和我)最初使用的方法正确地扩展到
xy
感谢您的评论,我知道,但OP没有指定要求。我认为我的编辑仍然保留了随机性,但以一种非平稳的方式。不确定对另一种解决方案的否决票。我认为问题可能是,当y>x时,y不是x的倍数,或者当x>y时,x不是y的倍数,否则对我来说很好。你觉得怎么样?@Divakar只要OP可以处理非整数移动,你的解决方案看起来就不错。两种解决方案(Arpi的/我的和你的)之间的区别在于,我们改变了移动的概率,而你改变了移动量,以保持达到任一极限的概率相同。对同一个问题有两种不同的有效解决方案。好吧,听起来让我松了一口气,因为它在某种程度上看起来是有效的。那么,否决票又是什么原因呢?抱歉打扰了,如果不是你的话。不过那是个很好的谎言!:)但没关系,可能不是最好的答案。
x = 10;
y = 20;
steps = [ zeros(1,x) ones(1,y) ];
steps = steps( randperm(x+y) );

figure
hold on;

xOld = 0;
yOld = 0;
axis([0 x 0 y])
for step = steps,
    if (step == 1)
        yNew = yOld + 1;
        xNew = xOld;
    else
        xNew = xOld + 1;
        yNew = yOld;
    end
    line ([xOld xNew],[yOld yNew],'LineWidth',3);
    yOld = yNew;
    xOld = xNew;
end
line ([xNew x],[yNew y],'LineWidth',3);
hold off