matlab - 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 方向”。
解决方案
推荐阅读
- python - driver.press_keycode(84):全局名称“驱动程序”未定义
- sharepoint - LinkedIn API 不工作,返回错误:HTTP GET - 远程服务器返回错误:(410)消失
- python - 如何在 Python 中以递归方式使用运行长度编码
- javascript - BrowserFS没有将数据写入文件?
- onelogin - 从 dotnetcore 应用程序注销,由 onelogin 使用 oauth 进行身份验证
- php - 在 laravel 4.2 中登录后如何重定向?
- c# - 使用 ASPNETCORE_ENVIRONMENT 在 Azure 上覆盖 appsettings.json
- python-3.x - Python Diffie-Hellman 交换密码库。共享密钥不相同
- javascript - 在导出的函数中访问调用方法的上下文
- c - 如何在 C\C++ 中使用一段时间循环(system.ping)ping 一些 ip