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,[]...)
我有一个简单的二次函数。
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,[]...)