我最近编写了有限元方法的代码。由于我的算法生成对称矩阵,因此在收集每个元素的数据后,生成的矩阵应该是对称的。
但是,在运行元素循环后,生成的全局矩阵不对称。基本代码结构如下:
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
自然对称而没有任何后处理?
答案 0 :(得分:0)
这是由于舍入错误(除非您的代码中有明显的错误)。这个问题通常由A = (A+A')/2
解决(这不是一个昂贵的操作),或者你可以告诉解算器你的全局矩阵是对称的(一些解算器(即MUMPS)有这样的选项。)