Matlab Matrix内部维度必须一致

时间:2016-08-03 05:44:34

标签: matlab matrix-multiplication

我有一个简单的二次形式函数。

function [y, grady] = quadobj(x)
global Q
y = x*Q*x';
if nargout > 1
    grady = 2*Q*x;
end

当我在命令行上简单地计算二次形式时,它可以工作。

>> [1 1 1]*Q*[1 1 1]'

ans =

   -2.5977


>> Q

Q =

   -1.0000   -0.0731    0.3043
   -0.0731   -1.0000   -0.0300
    0.3043   -0.0300   -1.0000

但是当我尝试评估函数时,我收到错误

>> quadobj([1 1 1])
Error using  * 
Inner matrix dimensions must agree.

Error in quadobj (line 3)
y = x*Q*x';

3   y = x*Q*x';

为什么会出现这种行为?在我看来,尺寸按照我写的二次形式函数的第三行的方式排列。请帮忙!

2 个答案:

答案 0 :(得分:1)

原因是,Q不是全局可用的工作空间(而是自动解释为0x0 double矩阵)。

global Q;
Q = rand(3);
quadobj([1,1,1])

将完成这项工作。

注意:下次您可以使用调试器轻松找到它。

答案 1 :(得分:1)

不要使用global Q,而是将其作为常量传递给您的匿名函数:

Q = rand(3);
qo = @(x) quadobj(x,Q)

然后拨打fmincon(qo,x0,[]...)