在CVX包中跟踪

时间:2015-05-18 11:19:13

标签: matlab cvx

我在 CVX(MATLAB)代码中使用 trace 。有时它工作正常,但有时它显示一些错误。错误信息如下 -

  

"跟踪"以前似乎被用作函数或命令,与此处作为变量名称的使用冲突。   导致此错误的一个原因是您忘记初始化变量,或者您已使用隐式初始化它   加载或评估。

我在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




0 个答案:

没有答案