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

Matrix 对称矩阵的逆在Julia中是不对称的,matrix,julia,linear-algebra,Matrix,Julia,Linear Algebra,我使用的是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 logical 1 log

我使用的是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
logical 1
logical 1
我还尝试了以下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))
输出是

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

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

A = inv(mat)
(A+A.')/2
也许更干净的方法是

smat = Symmetric(mat)
B = inv(smat)
现在
B
(以及
smat
)通过
issymmetric
。此外,在类型级别(
symmetric
)可以确保它是对称的,一些函数可能会利用这些附加信息。这正是
inv
smat
所做的


编辑:该问题也发布在上,您可以在那里找到关于
对称

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

A = inv(mat)
(A+A.')/2
也许更干净的方法是

smat = Symmetric(mat)
B = inv(smat)
现在
B
(以及
smat
)通过
issymmetric
。此外,在类型级别(
symmetric
)可以确保它是对称的,一些函数可能会利用这些附加信息。这正是
inv
smat
所做的


编辑:这个问题也被发布在了,你可以在那里找到关于
对称

性能的更多讨论。从数字上看,它几乎从来都不是完全对称的。MATLAB可能在其检查中设置了一个公差,以忽略对称矩阵的“浮点差”。@ChrisRackauckas我在Julia中使用MvNormal函数,该函数将检查给定矩阵是否对称。那么这是否意味着我需要手动将这个等距矩阵转换为对称矩阵呢?同样发布在这里:@David BTW,你可以把这个结构放到一个理解中:
[exp(-I-j)^2)对于I=1:6,j=1:6]
。从数值上看,它几乎从来都不是完全对称的。MATLAB可能在其检查中设置了一个公差,以忽略对称矩阵的“浮点差”。@ChrisRackauckas我在Julia中使用MvNormal函数,该函数将检查给定矩阵是否对称。那么这是否意味着我需要手动将这个等距矩阵转换为对称矩阵呢?同样发布在这里:@David BTW,你可以把这个结构放到一个理解中:
[exp(-(I-j)^2)for I=1:6,j=1:6]