2

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

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

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自然对称而无需任何后处理?

4

1 回答 1

1

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

于 2016-08-02T21:09:32.733 回答