Matlab:对具有限制的列元素求和

时间:2012-12-05 17:08:04

标签: matlab sum col

我们有一个MxN矩阵和一个约束cstrn = 100;

约束是列元素的总结限制(每列):

sum(matrix(:,:))<=cstrn

对于给定的示例如下:

Columns 1 to 5:
  15  18  -5 22 19
  50  98 -15 39 -8
  70 -15  80 45 38
  31  52   9 80 72
  -2  63  52 71  6
   7  99  32 58 41 

我想找到满足此约束的每列元素的最大数量。

如何将每个列元素与同一列中的其他元素进行汇总,并找出哪些总和组合使用每列的最大元素数?

在给定的示例中,解决方案是:

   4  3  5  2  5

其中

column 1: 15 + 50 + 31 +7 +(-2)

column 2: 18 +(-15) + 52 or 63等。

提前谢谢。

3 个答案:

答案 0 :(得分:4)

由于将小元素组合成总和更容易,您可以执行sort,然后是累计和:

m= [
  15  18  -5 22 19
  50  98 -15 39 -8
  70 -15  80 45 38
  31  52   9 80 72
  -2  63  52 71  6
   7  99  32 58 41]; 

cs = cumsum(sort(m))
cs =
    -2   -15   -15    22    -8
     5     3   -20    61    -2
    20    55   -11   106    17
    51   118    21   164    55
   101   216    73   235    96
   171   315   153   315   168

现在,您可以轻松识别跨越阈值cnstrn的元素(感谢@sevenless)!

out = sum(cs <= cnstrn)

out =
     4     3     5     2     5

答案 1 :(得分:3)

我想补充Jonas的答案,你可以以一种输出逻辑矩阵的方式施加约束,然后对该矩阵的1和0进行求和,如下所示:

cstrn = 100
m= [
  15  18  -5 22 19
  50  98 -15 39 -8
  70 -15  80 45 38
  31  52   9 80 72
  -2  63  52 71  6
   7  99  32 58 41]; 

val_matrix = cumsum(sort(m))
logical_matrix = val_matrix<=cstrn
output = sum(logical_matrix)

给出输出:

cstrn =

   100


val_matrix =

    -2   -15   -15    22    -8
     5     3   -20    61    -2
    20    55   -11   106    17
    51   118    21   164    55
   101   216    73   235    96
   171   315   153   315   168


logical_matrix =

     1     1     1     1     1
     1     1     1     1     1
     1     1     1     0     1
     1     0     1     0     1
     0     0     1     0     1
     0     0     0     0     0


output =

     4     3     5     2     5

答案 2 :(得分:1)

这是一个逻辑,在移动设备上所以无法给出代码。

检查一下。转到列,按升序排序,循环求和,点击&lt; = 100时断开。得到反击。请参阅原始列,获取与您刚刚总结的元素匹配的元素索引:-)