Matlab矩阵内维必须一致

Matlab Matrix inner dimension must agree

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

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';

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

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

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

会完成任务的。

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

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

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

然后调用fmincon(qo,x0,[]...)