Matrix 对称矩阵的逆在Julia中是不对称的
我使用的是Julia版本0.6.2,我面临这个问题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
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]
。