我在我的CVX (MATLAB)代码中使用跟踪。有时它工作正常,但有时它显示一些错误。错误信息如下——
“trace”以前似乎被用作函数或命令,与这里用作变量的名称相冲突。此错误的一个可能原因是您忘记初始化变量,或者您已使用 load 或 eval 隐式初始化它。
我在 CVX 网站上搜索,我发现了这个-
仅当沿对角线的元素具有相同的曲率时,trace(Z)才有效。
我无法理解它。期待任何慷慨的建议。
我在下面摘录了我的 MATLAB 代码的一部分,以清楚地说明我的问题。
它正常工作的程序 -
%% Calling CVX Package
G = zeros((M+1)*d,(M+1)*d);
for i = 0:M
G(i*d+(1:d),i*d+(1:d)) = eye(d);
end
cvx_precision best;
cvx_begin
variable G((M+1)*d,(M+1)*d) semidefinite % Defining variables
minimize(trace(C*G)) % Objective function
subject to
% Constraints
for i = 0:M
G(i*d+(1:d),i*d+(1:d)) == eye(d);
end
cvx_end
它给出错误的程序 -
%% Calling CVX Package
Q = zeros(N,N);
Mij = zeros(N,N);
cvx_precision best;
cvx_begin
variable Q(N,N) semidefinite % Defining variables
minimize(trace(Q)) % Objective function
subject to
% Constraints
for i = 1:N-1
for j = i:N
if E(i,j) ~= 0
Mij = Mij-Mij;
Mij(i,j) = -1;
Mij(j,i) = -1;
Mij(i,i) = 1;
Mij(j,j) = 1;
trace(Mij*Q) = E(i,j);
end
end
end