Desidero scrivere un codice per generare un percorso casuale tramite un rettangolo di una determinata dimensione.Percorso casuale attraverso un rettangolo
inizierò dal punto (0,0)
e andare up
o right
per raggiungere xlim
e ylim
.
Ecco il mio codice,
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
Il codice ha un while loop
, e termina quando uno dei x
o y
raggiunge il suo limite.
Quindi funziona bene fornito x = y
.
Tuttavia, quando y > x
è più probabile che il percorso raggiunga xlim
prima.
per 12 corse di x = 10, y = 10
ottengo (ho fatta colorato a guardare meglio!),
Impostazione x = 10, y = 20
, ottengo,
Come si può vedere Perdo la casualità in quest'ultimo caso, poiché aumenta la probabilità di raggiungere il limite di x
.
Qualche suggerimento su come conservare la casualità in caso di x~=y
?
Grazie.
Non sono sicuro del downvote sull'altra soluzione. Penso che il problema potrebbe essere se y non è un multiplo di x quando y> x o x non è un multiplo di y quando x> y, altrimenti mi sembra a posto. Cosa ne pensi? – Divakar
@Divakar La tua soluzione sembra a posto finchè OP va bene con la movimentazione di movimenti non interi. Le differenze tra le due soluzioni (Arpi/mia e la tua) sono che cambiamo la * probabilità * di movimento e cambi la quantità di movimento * per mantenere la probabilità di colpire entrambi i limiti allo stesso modo. Due soluzioni diverse e valide per la stessa domanda. – Luigi
Va bene come un sollievo per me che sembra in qualche modo valido. Quindi, per quanto riguarda il downvote, è stato per qualche altro motivo? Mi dispiace disturbare, se non fosse stato tu. – Divakar