Main Content

희소 행렬의 그래픽 표현

이 예제에서는 두 개의 뒷전 플랩(Trailing Flap)을 포함한 NASA 에어포일의 유한 요소 메시를 보여줍니다. 에어포일의 역사에 대한 자세한 내용은 NACA 에어포일(nasa.gov)에서 확인할 수 있습니다.

데이터는 airfoil.mat 파일에 저장되어 있습니다. 이 데이터는 메시 점 (x,y) 좌표 4,253쌍으로 구성되어 있으며, 메시 점 사이의 연결을 지정하는, 12,289쌍의 인덱스로 구성된 배열 (i,j)도 포함하고 있습니다.

데이터 파일을 작업 공간으로 불러옵니다.

load airfoil

유한 요소 메시 보기

먼저 [0,1] 범위가 되도록 xy2-32로 스케일링합니다. 그런 다음, (i,j) 연결에서 희소 인접 행렬을 생성하고 양의 정부호 행렬로 만듭니다. 마지막으로, (x,y)를 꼭짓점(메시점)의 좌표로 사용하여 인접 행렬을 플로팅합니다.

% Scaling x and y
x = pow2(x,-32); 
y = pow2(y,-32);

% Forming the sparse adjacency matrix and making it positive definite
n = max(max(i),max(j));
A = sparse(i,j,-1,n,n);
A = A + A';
d = abs(sum(A)) + 1;
A = A + diag(sparse(d));

% Plotting the finite element mesh
gplot(A,[x y])
title('Airfoil Cross-Section')

Figure contains an axes object. The axes object with title Airfoil Cross-Section contains an object of type line.

희소성 패턴 시각화하기

spy를 사용하여 행렬의 0이 아닌 요소를 시각화할 수 있습니다. 이 함수는 희소 행렬의 희소성 패턴을 표시하는 데 특히 유용합니다. spy(A)는 행렬 A의 희소성 패턴을 플로팅합니다.

spy(A)
title('Airfoil Adjacency Matrix')

Figure contains an axes object. The axes object with title Airfoil Adjacency Matrix, xlabel nz = 28831 contains a line object which displays its values using only markers.

대칭적 재정렬(Reordering) - 컷힐-맥키(Cuthill-McKee) 역치환

symrcm은 인접 행렬을 재정렬하는 데 컷힐-맥키 역치환 기법을 사용합니다. r = symrcm(A)A(r,r)의 대각선 요소들을 A보다 더 대각선에 가깝게 만들어 주는 치환 벡터 r을 반환합니다. 이 형식은 "행이 많고 열이 적은(long and skinny)" 문제에서 비롯된 행렬의 LU 분해 또는 촐레스키 분해를 구할 때 유용한 전위 정렬 기법입니다. symrcm은 대칭 행렬일 때는 물론, 비대칭 행렬일 때에도 동작합니다.

r = symrcm(A);
spy(A(r,r))
title('Reverse Cuthill-McKee')

Figure contains an axes object. The axes object with title Reverse Cuthill-McKee, xlabel nz = 28831 contains a line object which displays its values using only markers.

대칭적 재정렬 - 열 치환

j = COLPERM(A)를 사용하면 0이 아닌 요소의 개수를 기준으로 비내림차순으로 희소 행렬 A의 열들을 재정렬하는 치환 벡터가 반환됩니다. 이 형식은 경우에 따라 LU 분해 lu(A(:,j))에 대한 전위 정렬 기법으로 유용하게 활용할 수 있습니다.

j = colperm(A);
spy(A(j,j))
title('Column Count Reordering')

Figure contains an axes object. The axes object with title Column Count Reordering, xlabel nz = 28831 contains a line object which displays its values using only markers.

대칭적 재정렬 - 대칭적 AMD(Approximate Minimum Degree)

symamd는 대칭적 AMD(Approximate Minimum Degree) 치환을 제공합니다. A가 양의 정부호 대칭 행렬인 경우, 명령 p = symamd(S)S(p,p)S보다 더 희소한 촐레스키 인수를 갖는 경향이 있는 치환 벡터 p를 반환합니다. 경우에 따라 symamd는 부정부호 대칭 행렬에 대해서도 효과적으로 동작합니다.

m = symamd(A);
spy(A(m,m))
title('Approximate Minimum Degree')

Figure contains an axes object. The axes object with title Approximate Minimum Degree, xlabel nz = 28831 contains a line object which displays its values using only markers.

참고 항목

| | |