对称矩阵的逆在 Julia 中不对称

inverse of symmetric matrix is not symmetric in Julia

我正在使用 Julia 版本 0.6.2,我遇到了这个问题。

mat = zeros(6, 6)
for i = 1 : 6
    for j = 1 : 6
        mat[i, j] = exp(-(i - j)^2)
    end
end
issymmetric(mat)
issymmetric(inv(mat))

输出为

Main> issymmetric(mat)
true
Main> issymmetric(inv(mat))
false

我也尝试了下面的 Matlab 代码

mat = zeros(6, 6);
for i = 1 : 6
    for j = 1 : 6
        mat(i, j) = exp(-(i - j)^2);
    end
end
issymmetric(mat)
issymmetric(inv(mat))

输出为

logical 1
logical 1

除了按照您的建议手动使矩阵对称,例如取矩阵的平均值及其转置

A = inv(mat)
(A+A.')/2

可能更简洁的方法是

smat = Symmetric(mat)
B = inv(smat)

现在 B(以及 smat)通过 issymmetric。此外,它是对称的这一事实在类型级别 (Symmetric) 上得到了保证——某些函数可能会利用此附加信息。这正是 invsmat 所做的。

编辑:问题也发布在 Discourse 上,您可以在其中找到有关 Symmetric.

性能的其他讨论