최근에 유한 요소법에 대한 코드를 작성했습니다. 내 알고리즘은 대칭 행렬을 생성하므로 각 요소에 대한 데이터를 모은 후에 결과 행렬은 대칭이어야합니다.대칭 행렬이 대칭이 아닙니다.
그러나 요소 위로 루프를 실행 한 결과 전역 행렬은 대칭이 아닙니다. 기본 코드 구조는 다음과 같습니다.
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
을 대칭 적으로 만드는 다른 해결책이 있습니까?
대칭 행렬은 또한 대칭 행렬을 생성합니다. 귀하의 이론은 옳지 만, 귀하의 코드에 문제가 있다고 의심됩니다. 의사 코드 대신 사용중인 실제 코드 스 니펫을 표시하십시오. 내 직감은 당신이 뭔가를 올바르게 코딩하고 있지 않다는 것입니다. – rayryeng
진짜 질문은 : 행렬이 비대칭 적이 지요? 나는'(A-A. ')/norm (A)'또는 무엇인가와 같은 것을 의미합니다. 이것이 아주 작은 경우에, 진행하고 손으로 대칭 화하십시오. 크기가 작지 않은 경우 버그를 찾으십시오. 또한 행렬이 진짜인지 확인하십시오. –
'A (K, K)'는 생각하는 것처럼 길이 (K) 원소를주지 않습니다. 그것은 당신에게'K'와'K'의 모든 순열을줍니다. – Suever