2009-01-07 5 views
13

몇 가지 기본 선형 대수 연산을 구현하려고하는데 이러한 연산 중 하나는 삼각형 (위 및/또는 아래) 행렬의 반전입니다. 거기에 쉽고 안정적인 알고리즘을 할 수 있습니까?삼각형 (위 또는 아래) 행렬을 뒤집을 수있는 간단한 방법이 있습니까?

감사합니다.

+0

이 게시물에서보세요 : http://math.stackexchange.com/questions/1143214/method-to-find-the-inverse-of-any-lower-triangular-matrix 베스트 – Dade

답변

14

예, back substitution을 사용하십시오. 행렬을 반전하는 표준 알고리즘은 LU 분해 (저 삼각형 및 상 삼각 행렬로 분해)를 찾고, 삼각형 조각에 대해 백분위를 사용하고 결과를 결합하여 원래 행렬의 역함수를 얻는 것입니다.

+0

나는 삼각형 매트릭스가 아닌 * 삼각형 매트릭스의 역함을 얻으려고합니다. 삼각형의 반전을 얻으려면 뒤 대체가 어떻게 도움이 될까요? – tunnuz

+8

정의에 따르면 삼각 행렬은 정사각형입니다. – jason

+0

또한 사각형 행렬 만 역변환됩니다. – conjectures

1

단 정밀도의 실수에 대해 이야기하는 경우 LAPACK 루틴 STRTRISTRTI2의 소스 코드를 살펴보십시오.

0

와우는 수치 해석 과정의 내용의 절반 정도입니다. 표준 알고리즘이 그것을 할 것이며, 통조림 코드 here의 무리가 있습니다. 이것과 다른 대부분의 일반적인 수치 해석 문제의 궁극적 인 원인은 Numerical Recipes입니다.

+1

삼각 행렬을 반전시키는 것은 수치 해석에서 코스의 내용의 절반이 아닙니다. 삼각 행렬을 반전하는 것은 쉽지 않고 순진 알고리즘은 안정적입니다. – jason

+1

행 피봇 팅을해야합니다. Naive는 안정적이지 않습니다. – duffymo

+2

피벗 (Gaussian elimination을 통해)은 선형 시스템을 삼각형 형태로 변환 한 다음 역 대체로 해결합니다. 안정성에 관해서는, 예를 들어 Nicholas Higham, Numerical Algorithms의 Accuracy and Stability 책, 제 2 판 140 페이지를보십시오. – jason

3

낮은 삼각 행렬 L이 주어지면, 대체는 사용자가 시스템을 풀 수있게 해줍니다. Lx = b 오른쪽에 b를 빠르게 입력하십시오. b.

L을 반전하려면이 시스템을 오른쪽면 e1 = (1,0, ..., 0), e2 = (0,1, ..., 0), ..., en = (0,0, ..., 1) 및 결과 솔루션 벡터를 단일 (반드시 낮은 삼각형) 행렬로 결합합니다.

폐쇄 형 솔루션에 관심이있는 경우 역원의 대각선 요소는 원래 대각선 요소의 역원이며 역원의 나머지 요소에 대한 수식은 이동과 함께 더욱 복잡해집니다 멀리 대각선에서.

5

가능한 경우 반전하지 마십시오. 그것은 수치 선형 대수학의 기본 계명 중 하나입니다.

행렬 L 자체를 메모리에 유지하는 것이 훨씬 빠르고 수치 안정성이 뛰어나며 inv (L)을 사용하여 다른 작업을 수행해야 할 때마다

inv(L)b
을 역 대체로 계산하십시오.

반전을위한 일반적인 알고리즘은

inv(L)[1 0 0 ...], 
inv(L)[0 1 0 ....], 
inv(L)[0 0 1 ....]
등의 시스템을 해결해야하므로, 전혀 반전하지 않는 것이 더 쉽다는 것을 알 수 있습니다.