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