2

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

4

0 に答える 0