对称矩阵不对称

时间:2016-06-06 00:36:36

标签: matlab matrix symmetric

我最近编写了有限元方法的代码。由于我的算法生成对称矩阵,因此在收集每个元素的数据后,生成的矩阵应该是对称的。

但是,在运行元素循环后,生成的全局矩阵不对称。基本代码结构如下:

A=zeros(dof,dof)

for (each element)
    loc_A = v'*(diagonal matrix)*v
         % (v is 1xN row vector)
         % loc_A is symmetric matrix

    A(K,K) = A(K,K)+loc_A
                 % (K is Nx1 column vector)
end

由于我添加了对称矩阵,因此得到的矩阵也应该是对称的。

但是,生成的矩阵不对称(我用issymmetric(A)检查了它)。我认为这是因为四舍五入错误。如果我添加A =(A + A')/ 2,则得到的矩阵是对称的(当然......)。但是我不想做这样的事情。是否有任何其他补救办法使A自然对称而没有任何后处理?

1 个答案:

答案 0 :(得分:0)

这是由于舍入错误(除非您的代码中有明显的错误)。这个问题通常由A = (A+A')/2解决(这不是一个昂贵的操作),或者你可以告诉解算器你的全局矩阵是对称的(一些解算器(即MUMPS)有这样的选项。)