Subtracting elements with constraints
1 回表示 (過去 30 日間)
古いコメントを表示
Nikolas Spiliopoulos
2017 年 2 月 27 日
コメント済み: Nikolas Spiliopoulos
2017 年 2 月 27 日
Hi all,
I have an array A and I need to subtract the elements of each column using the cumsum function:
B=bsxfun(@minus, A(1,:), cumsum(A(2:end,:)));
However I have some constraints that should not violated (min=1.3, max=11.7) Is there any way to do the calculations within these limits?
thanks
3 件のコメント
採用された回答
Stephen23
2017 年 2 月 27 日
編集済み: Stephen23
2017 年 2 月 27 日
Your question is not clear where you want these constraints applied.
Option one: constrain output values:
B = bsxfun(@minus, A(1,:), cumsum(A(2:end,:)));
B = max(1.3, min(11.7, B));
Options two: constrain cumsum values:
tmp = max(1.3, min(11.7, cumsum(A(2:end,:))));
B = bsxfun(@minus, A(1,:), tmp);
3 件のコメント
Walter Roberson
2017 年 2 月 27 日
Another possibility: that at each point the sum needs to be in that range, and if adding the next element would move it out of the range then clamp it at the edge of the range, but allow the next element to move it away from the edge of the range. For example, if the lower limit was 1, then for
A = 6 2 2 2 2 -3
cummulative
C = 4 2 1 1 4
^ ^
the clamping has been applied at the ^ points, but no history of how far outside the range it would go, so the -(-3) moves it 3 away from the bottom of the range
I am not sure at the moment that a vectorized version of this approach is possible.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!