Matlab - passeio aleatório com limites, vetorizado

Suponha que eu tenha um vetor J de tamanhos de salto e um ponto de partida inicial X_0. Também tenho limites 0, B (suponha 0 <X_0 <B). Eu quero fazer um passeio aleatório onde X_i = [min (X_ {i-1} + J_i, B)] ^ +. (parte positiva). Basicamente, se ultrapassar um limite, é feito igual ao limite. Alguém conhece uma maneira vetorizada de fazer isso? A maneira atual que estou fazendo consiste em fazer cumsums e, em seguida, encontrar lugares onde viola uma condição e, em seguida, começando a partir daí e repetindo o cálculo cumsum, etc até que eu acho que eu pare de violar os limites. Ele funciona quando os limites raramente são atingidos, mas se eles são atingidos o tempo todo, basicamente se torna um loop for.

No código abaixo, estou fazendo isso em muitas amostras. Para 'consertar' os que saem do limite, eu tenho que percorrer as amostras para checar ... (não pense que existe um 'achado' vetorizado)

% 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

questionAnswers(2)

yourAnswerToTheQuestion