MATLAB中的双重求和表达式

时间:2018-09-05 13:13:47

标签: matlab mathematical-optimization

我有一个参数矩阵C,大小为2x2。看起来像这样。

C= [2 4; 6 8]

我有一个决策变量X,大小为2x2。看起来像这样

[ X('S1', 'D1')    X('S1', 'D2') ]
[ X('S2', 'D1')    X('S2', 'D2') ]

我想将我的目标函数表述为一系列双重表达式(请参阅附件),

enter image description here

扩展后的外观如下。

Z = 2*X('S1', 'D1')  + 4*X('S1', 'D2') + 6*X('S2', 'D1')  + 8*X('S2', 'D2') 

我尝试以下方法。

Z = sum(C.*X,1);

但这会创建大小为1x3的OptimizationExpression,这是不希望的。

我在做什么错?有没有使用for循环的更简单方法?我今天才刚刚开始在MATLAB中学习“基于问题的优化”。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

由于CX是2x2矩阵,所以C.*X给出了2x2矩阵。使用sum(C.*X,1);,沿第一个维度进行求和(即添加行)。但是您想对所有元素求和。因此,如果您将矩阵转换为向量,然后逐个元素相乘然后应用sum,它将添加所有元素,即

Z = sum(C(:).*X(:));

或者,您可以先相乘然后将结果转换为向量,然后再应用sum

CX = C.*X;
Z = sum(CX(:));

或沿所有维度一一求和。但是我会采用开始时建议的解决方案。