MATLAB: Conditional cumsum – how to create

conditionalcumsumMATLAB

This is probably easy, but my brain isn't working today…
How can you do the following operation in a vectorized way? I'd think it should be possible with some combination of cumsum, diff & logical indexing:
input = rand(10,1);
output = zeros(size(input);
output(1) = input(1);
for ind = 2:numel(input)
dif = input(ind) - input(ind-1);
if dif < 0
output(ind) = output(ind-1) + dif;
else
output(ind) = output(ind-1);
end
end

Best Answer

Try this.
outp = cumsum([inp(1);min(diff(inp),0)]);