문제

나는 몇 가지 기본 선형 대수 연산을 구현하려고 노력하고 있으며 이러한 작업 중 하나는 삼각형 (위 및/또는 하부) 행렬의 역전입니다. 그렇게 할 수있는 쉽고 안정적인 알고리즘이 있습니까?

고맙습니다.

도움이 되었습니까?

해결책

예, 사용하십시오 뒤로 대체. 매트릭스를 반전시키는 표준 알고리즘은 LU 분해 (하위 삼각형 및 상부 삼각형 매트릭스로 분해)를 찾아 삼각형 조각에서 백 스러움을 사용한 다음 결과를 결합하여 원래 행렬의 역수를 얻는 것입니다.

다른 팁

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

매트릭스 L 자체를 메모리에 유지하고 계산하는 것이 훨씬 빠르고 수치 적으로 안정적입니다.

inv(L)b
Inv (L)로 다른 일을해야 할 때마다 등을 대체 할 때마다.

반전을위한 관례 알고리즘은 시스템을 해결해야합니다.

inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
그래서, 당신은 그것을 전혀 뒤집지 않는 것이 훨씬 쉽다는 것을 알 수 있습니다.

삼각형 매트릭스 L이 낮을수록 Backsubstitution을 사용하면 오른쪽에 대해 시스템 L X = B를 빠르게 해결할 수 있습니다. b.

L을 반전 시키려면 오른쪽 으로이 시스템을 해결할 수 있습니다. , 0, ..., 1) 결과 용액 벡터를 단일 (반드시 낮은 삼각형) 행렬에 결합합니다.

폐쇄 형식 솔루션에 관심이 있다면 역의 대각선 요소는 원래 대각선 요소의 역전이며, 역의 나머지 요소에 대한 공식은 대각선에서 상하를 움직일 때 점점 더 복잡해집니다. .

단일 정밀 현실에 대해 이야기하고 있다면 Lapack 루틴의 소스 코드를 살펴보십시오. Strtri 그리고 strti2.

와우, 그것은 실제로 수치 분석 과정의 내용의 절반입니다. 표준 알고리즘이 수행되며 통조림 코드가 많이 있습니다. 여기. 이것과 다른 일반적인 수치 분석 문제의 궁극적 인 원인은 수치 레시피.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top