我想验证对称Kronecker运算符实现的正确性,但是我很难找到任何库或“正确”的实现。我设法找到的一种实现是在here的MATLAB中实现的,但我认为这是不正确的:
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方向”。