我有一个参数矩阵C,大小为2x2。看起来像这样。
C= [2 4; 6 8]
我有一个决策变量X,大小为2x2。看起来像这样
[ X('S1', 'D1') X('S1', 'D2') ]
[ X('S2', 'D1') X('S2', 'D2') ]
我想将我的目标函数表述为一系列双重表达式(请参阅附件),
扩展后的外观如下。
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中学习“基于问题的优化”。任何帮助将不胜感激。
答案 0 :(得分:2)
由于C
和X
是2x2矩阵,所以C.*X
给出了2x2矩阵。使用sum(C.*X,1);
,沿第一个维度进行求和(即添加行)。但是您想对所有元素求和。因此,如果您将矩阵转换为向量,然后逐个元素相乘然后应用sum
,它将添加所有元素,即
Z = sum(C(:).*X(:));
或者,您可以先相乘然后将结果转换为向量,然后再应用sum
。
CX = C.*X;
Z = sum(CX(:));
或沿所有维度一一求和。但是我会采用开始时建议的解决方案。