이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.
불완전 LU 분해
ilu(A,setup)
[L,U] = ilu(A,setup)
[L,U,P] = ilu(A,setup)
ilu
는 단위 하부 삼각 행렬, 상부 삼각 행렬, 치환 행렬을 생성합니다.
ilu(A,setup)
은 A
의 불완전 LU 분해를 계산합니다. setup
은 최대 5개의 설정 옵션을 가진 입력 구조체입니다. 필드는 아래의 표와 같이 정확하게 명명해야 합니다. 이러한 필드는 구조체에 원하는 수 만큼 포함시키고 원하는 순서로 정의할 수 있습니다. 추가 필드는 무시됩니다.
필드 이름 | 설명 |
---|---|
| 행렬 분해의 유형.
|
| 불완전 LU 분해의 기각 허용오차입니다.
abs(U(i,j)) >= droptol*norm(A(:,j)), 기준의 충족 여부와 관계없이 유지되는 대각선 항목은 예외입니다. abs(L(i,j)) >= droptol*norm(A(:,j))/U(j,j). |
| 수정된 불완전 LU 분해.
|
|
|
|
|
ilu(A,setup)
은 L+U-speye(size(A))
를 반환합니다. 여기서 L
은 단위 하부 삼각 행렬이고 U
는 상부 삼각 행렬입니다.
[L,U] = ilu(A,setup)
는 L
에 단위 하부 삼각 행렬을 반환하고 U
에 상부 삼각 행렬을 반환합니다.
[L,U,P] = ilu(A,setup)
는 L
에 단위 하부 삼각 행렬을 반환하고, U
에 상부 삼각 행렬을 반환하며, P
에 치환 행렬을 반환합니다.
ilu
는 희소 정사각 행렬에 대해서만 동작합니다
희소 행렬을 만들고 LU 분해를 계산합니다.
A = gallery('neumann', 1600) + speye(1600); setup.type = 'crout'; setup.milu = 'row'; setup.droptol = 0.1; [L,U] = ilu(A,setup); e = ones(size(A,2),1); norm(A*e-L*U*e) ans = 1.4251e-014
이것은 A
와 L*U
가 행 합계가 동일하다는 것을 보여줍니다. 여기서 L
과 U
는 수정된 크라우트(Crout) ILU
로 주어집니다.
희소 행렬을 만들고 LU 분해를 계산합니다.
A = gallery('neumann', 1600) + speye(1600); setup.type = 'nofill'; nnz(A) ans = 7840 nnz(lu(A)) ans = 126478 nnz(ilu(A,setup)) ans = 7840
이것은 A
가 7840
개의 0이 아닌 수, 완전 LU 분해가 126478
개의 0이 아닌 수, 필인(Fill-in)의 0
레벨을 갖는 불완전 LU 분해가 A
와 같이 7840
개의 0이 아닌 수를 가지고 있음을 보여줍니다.
이러한 불완전 분해는 BICG(쌍켤레 기울기법), GMRES(일반화된 최소 잔차법) 등과 같은 반복 방법으로 풀려는 선형 연립방정식에 대한 선조건자(Preconditioner)로 유용하게 사용할 수 있습니다.
[1] Saad, Yousef, Iterative Methods for Sparse Linear Systems, PWS Publishing Company, 1996, Chapter 10 - Preconditioning Techniques.