首页 > 解决方案 > MATLAB 中的对称克罗内克积

问题描述

我想验证我的对称 Kronecker 运算符实现的正确性,但我很难找到任何库或其他“正确”实现。我设法找到的一种实现是在 MATLAB from here中,但我认为它是不正确的:

function M = sk(A,B)
    % symmetric kronecker product for two square matrices, each of size nxn
    n = size(A,1);
    U = eye(n^2);
    a = reshape(1:n^2,n,n);
    b = a';
    U = U + U(b(:),:);
    c = tril(a);
    c = c(:);
    c(c==0) = [];
    U = U(c,:);
    U(U==1) = sqrt(2);
    U(U==2) = 1;
    M = (1/2)*U*kron(A,B)*U';
end

矩阵 U 的非零索引的计算与我的一致,但我认为倒数第四行应该是U(U==1) = 1/sqrt(2),倒数第二行应该是M = (1/2)*U*(kron(A,B)+kron(B,A))*U';。我们似乎都使用过的对称 Kronecker 积的定义来自 Todd、Toh 和 Tutuncu 的“半定规划中的 Nesterov-Todd 方向”。

标签: matlabmathmatrix

解决方案


推荐阅读