Просто напишите код, как обычно. Почти все функции Matlab могут принимать и возвращать векторизованный ввод. Например, для моделирования броуновского движения N частиц в 1 измерении
position = zeros([N 1]); %start at origin
sigma = sqrt(D * dt); %D is diffusion coefficient, dt is time step
for j = 1:numSteps
position = position + sigma*randn(size(position));
end
если бы вы хотели иметь разные сигмы для каждой позиции, вы бы сделали сигма вектором того же размера, что и положение, и использовали бы нотацию "точек раз", чтобы указать элемент при операции элемента
position = position + sigma.*randn(size(position));
если бы рассеяние было произвольной функцией положения и некоторого случайного элемента, вам просто нужно написать векторизованную функцию, например
function newstep = step(position)
%diffusion in a overdamped harmonic potential
newstep = -dt*k*position + D*randn(size(position));
for j = 1:numsteps; position = position + step(position);
и т. Д.