在matlab中如何求连续值之和的最大值

vltsax25  于 2023-10-23  发布在  Matlab
关注(0)|答案(1)|浏览(231)

我有一个包含12行50列的数据矩阵。例如,这里是第一列(z)的数据,第一和第二行的值是负数,接下来的4个数字是正数,接下来的1个是负数,接下来的2个是正数,最后3个数字是负数。例如,我想计算第一和第二行(连续负数)的和,然后计算第七行,然后计算第10、11和12行(连续负数)的和,最后取3中的最大值作为输出。

z= (-1.24;-2.36;1.24;2.14;3.14;1.08;-1.12;3.56;4.89;-1.12;-2.74;-3.45)

M = (-3.6; -1.12;-7.31)

result = max(M)
-7.31
ma8fv8wu

ma8fv8wu1#

正如你在你的例子中所展示的,你实际上想要的是总和的最小值,而不是最大值(最小值-7.31,最大值-1.12)。无论如何,这应该可以做到这一点:

z =[-1.24;-2.36;1.24;2.14;3.14;1.08;-1.12;3.56;4.89;-1.12;-2.74;-3.45]';
zNgv = z < 0;
h = cumsum(diff([0;zNgv(:)]) == 1).*zNgv(:);
S = accumarray(h + 1,z);
nSum = nan(numel(S)*2-1,1);
nSum(1:2:end) = S;

maxS=min(nSum(2:end));

要使其适应矩阵,只需循环遍历列(请注意,在我的代码中z是转置的)

相关问题