对称矩阵的逆在 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
) 上得到了保证——某些函数可能会利用此附加信息。这正是 inv
为 smat
所做的。
编辑:问题也发布在 Discourse 上,您可以在其中找到有关 Symmetric
.
性能的其他讨论
我正在使用 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
) 上得到了保证——某些函数可能会利用此附加信息。这正是 inv
为 smat
所做的。
编辑:问题也发布在 Discourse 上,您可以在其中找到有关 Symmetric
.