2014-04-22 2 views
2

, 그 행렬 A가 scipy LU 인수 분해 순열 행렬

그러나 기능 U.

하부 삼각 행렬 L과 상부 삼각 행렬 A = LU로 기록 될 수 있음을 의미 LU 분해 ( lu, lu_factor, lu_solve)와 관련된 scipy는 A = PLU이고 P는 순열 행렬 (그리고 L, U는 이전과 같습니다)과 같은 세 번째 행렬 P를 포함하는 것 같습니다.

이 순열 행렬의 요점은 무엇입니까? "참"LU 인수 분해가 항상 가능하다면 왜 P는 항등 매트릭스가 아닌 다른 것일 수 있습니까?

답변

3

모든 매트릭스가 LU 분해를 갖는 것은 아닙니다. 그러나 모든 정사각형 행렬에는 LU 분해가있는 하나 이상의 행 순열이 있습니다.

8

가우시안 제거 프로세스를 고려하십시오. 피봇에 0이 있으면 어떻게합니까? P 행렬을 도입하는 행을 전환해야합니다.

매우 작은 0이 아닌 피벗 값은 부동 소수점 환경에서 수치 안정성을 초래합니다. 기본 알고리즘은 피벗 열의 절대 값이 가장 큰 항목을 검색하고 피벗 행을 사용하여 해당 행을 전환함으로써이를 방지합니다.

이 스위치는 비쌀 수 있으므로 가장 큰 절대 값 입력은 피벗의 절대 값보다 몇 배 더 커야합니다. 10, 스위치가 발생합니다. 이렇게하면 스위치 수는 줄어들지 만 부동 소수점 오류를 제한하는 데 필요한 스위치는 유지됩니다.

"문제를 해결할 수있는 여러 가지 리소스에 대해"부분 회전을 사용하는 LU 분해 "를 검색하십시오.

주 : P는 순열 행렬이므로 P^T = P^(- 1)입니다. 따라서 Ax = b는 LUx = P^T b와 같은 해를 갖습니다. (어떤 구현은 당신이 P라고 부른 것을 반환합니다. 반면에 어떤 것은 P^T라고 부르는 것을 반환하고 그것을 P라고 부릅니다 - 어떤 것을 알고 있는지 확인하십시오 'PA = LU'와 'A = PLU'의 차이점입니다. P는 각 경우마다 동일하지 않습니다.

1

@DomJack에 추가하려면 : 순열 (일명 재정렬)을 변경하면 L 및 U 요인의 0이 아닌 숫자에도 영향을 줄 수 있습니다. 따라서 순서 재 지정은 메모리 효율적으로보다 효율적으로 인수 분해 할 수 있습니다.