Matlab - случайная прогулка с границами, векторизация

Предположим, у меня есть вектор J размеров прыжков и начальная начальная точка X_0. Также у меня есть границы 0, B (предположим, 0 < X_0 < Б). Я хочу сделать случайную прогулку, где X_i = [min (X_ {i-1} + J_i, B)] ^ +. (положительная часть). В основном, если он проходит через границу, он становится равным границе. Кто-нибудь знает векторизованный способ сделать это? Текущий способ, которым я делаю это, состоит в том, чтобы делать cumsums и затем находить места, где это нарушает условие, и затем начиная с этого и повторяя вычисление cumsum, и т.д., пока я не обнаружу, что я перестаю нарушать границы. Это работает, когда границы попадают редко, но если они попадают постоянно, это в основном становится циклом for.

В приведенном ниже коде я делаю это во многих примерах. Кисправить» те, которые выходят за границы, я должен пройтись по образцам, чтобы проверить ... (нене думаю, что есть векторизациянаходить')

% X_init is a row vector describing initial resource values to use for
% each sample

% J is matrix where each col is a sequence of Jumps (columns = sample #)
% In this code the jumps are subtracted, but same thing

X_intvl = repmat(X_init,NumJumps,1) - cumsum(J);
X = [X_init; X_intvl];
for sample = 1:NumSamples
    k = find(or(X_intvl(:,sample) > B, X_intvl(:,sample) < 0),1);
    while(~isempty(k))
        change = X_intvl(k-1,sample) - X_intvl(k,sample);
        X_intvl(k:end,sample) = X_intvl(k:end,sample)+change;
        k = find(or(X_intvl(:,sample) > B, X_intvl(:,sample) < 0),1);
    end
end

Ответы на вопрос(2)

Ваш ответ на вопрос