Трассировка в пакете CVX
Я использую трассировку в своем коде 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