MATLAB中的对称Kronecker积

MATLAB中的对称Kronecker积,matlab,math,matrix,Matlab,Math,Matrix,我想验证我的对称Kronecker运算符实现的正确性,但是我很难找到任何库或其他“正确”的实现。我在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';

我想验证我的对称Kronecker运算符实现的正确性,但是我很难找到任何库或其他“正确”的实现。我在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方向”。

虽然问题本身没有问题,但我真的怀疑是否有人会阅读整篇文章来证实你的结果。我希望你能找到一个对这件事很了解的人,但这不太可能。也许你应该在math.stackexchange中提问。谢谢,我不确定是在这里提问还是在math.stackexchange中提问。我不希望有人读这篇文章,只是希望有人知道一些晦涩难懂的数学库,它有一个对称Kronecker算子的实现,我可以用它来验证我的解决方案。很多库,比如numpy,都有Kronecker操作符,但不是对称版本。我建议你也去问一下。在这里你可以得到一个软件解决方案,在那里你可以有人来验证你的代码在数学上是正确的。也就是说,我还认为它是1/sqrt(2)