Для простого случайного блуждания рассмотрите возможность использования нормального распределения со средним 0 (также называемым «дрейфом») и ненулевой дисперсией. Обратите внимание, поскольку среднее значение равно нулю, а распределение симметрично, это симметричное случайное блуждание. На каждом шаге процесс одинаково похож на движение вверх или вниз, влево или вправо и т. Д.
Один простой способ:
Шаг 1: Генерируйте каждый шаг
Шаг 2: Получите совокупную сумму
Это можно сделать для любого количества измерений.
% MATLAB R2019a
drift = 0;
std = 1; % std = sqrt(variance)
pd = makedist('Normal',drift,std);
% One Dimension
nsteps = 50;
Z = random(pd,nsteps,1);
X = [0; cumsum(Z)];
plot(0:nsteps,X) % alternatively: stairs(0:nsteps,X)
И в двух измерениях:
% Two Dimensions
nsteps = 100;
Z = random(pd,nsteps,2);
X = [zeros(1,2); cumsum(Z)];
% 2D Plot
figure, hold on, box on
plot(X(1,1),X(1,1),'gd','DisplayName','Start','MarkerFaceColor','g')
plot(X(:,1),X(:,2),'k-','HandleVisibility','off')
plot(X(end,1),X(end,2),'rs','DisplayName','Stop','MarkerFaceColor','r')
legend('show')
Дисперсия повлияет на «волатильность», поэтому более высокая дисперсия означает более «скачкообразный» процесс по сравнению с более низкой дисперсией.
Примечание: я намеренно избегал броуновской реализации типа движения (масштабирование, уменьшение размера шага в пределе и т. Д.), Так как OP специальнопопросил случайную прогулку. Реализация броуновского движения может связать дисперсию с индексом времени из-за свойств Гаусса.
ОП пишет:
случайное блуждание всегда имеет одинаковую дисперсию
Это верно дляшаги (каждый шаг обычно имеет одинаковое распределение). Однако дисперсия процесса на временном шаге (или в определенный момент времени) должна увеличиваться с увеличением количества шагов (или с увеличением времени).
Связано:
MATLAB: построение случайной прогулки