Matlab 如何解决“;内部矩阵尺寸必须符合”;错误?

Matlab 如何解决“;内部矩阵尺寸必须符合”;错误?,matlab,mathematical-optimization,convex-optimization,cvx,Matlab,Mathematical Optimization,Convex Optimization,Cvx,这是我在CVX中的代码: load('C') r=C(:,4); t=C(:,5); n = size(C,1); N = 100; for i=1:n eta(i,1) = randn()/2; end cvx_begin variable x(n,1) maximize r'*x - t'*x subject to ones(n,1)'*x == N x >= zeros(n,1) exp(-x

这是我在CVX中的代码:

load('C')

r=C(:,4);
t=C(:,5);

n = size(C,1);
N = 100;

for i=1:n
    eta(i,1) = randn()/2;
end

cvx_begin
    variable x(n,1)

    maximize r'*x - t'*x

    subject to
        ones(n,1)'*x == N
        x >= zeros(n,1)
        exp(-x/N) >= eta
cvx_end
它在声明目标函数的行中给出以下错误:

“内部矩阵尺寸必须一致。”

我做错了什么

即使我按如下方式写入最后一个约束,错误仍然存在:

for i=1:n
    exp(-x(i,1)/N) >= eta(i,1)
end

错误在于我没有在目标函数周围加括号,这在这个特殊情况下是必需的,因为它有两个项。因此,
maximize(r'*x-t'*x)
解决了错误。

是的,因为
r
x
t
都是
nx1
向量,
r'*x-t'*x
应该是标量。请等待修改错误消息。错误发生在哪一行?@AnderBiguri是的,我刚刚弄明白了为什么
目标函数不是标量的
错误出现了。这是因为当声明变量
x
时,我应该将其声明为
x(n,1)
,否则,正如您所说,
CVX
会认为它是一个标量,如果我简单地将其声明为
x
。现在这是固定的,但我有一个不同的错误,这就是我编辑问题所反映的。@AnderBiguri得到了错误。需要在目标函数周围加括号,这是必需的,因为它有两个术语:
最大化(r'*x-t'*x)
回答您自己的问题;)