삼각행렬 알고리즘
Tridiagonal matrix algorithm수치 선형 대수학에서, 토마스 알고리즘(Llewellyn Thomas의 이름을 딴)으로도 알려진 삼각형 행렬 알고리즘은 방정식의 삼각형 시스템을 푸는 데 사용될 수 있는 가우스 제거의 단순한 형태이다.n개의 미지수에 대한 삼각형 계는 다음과 같이 쓸 수 있다.
서 a 1 ({1}= 0 ({}=입니다.
이러한 시스템에서는 가우스 제거에 필요한 O 3 O가 On) 으로 솔루션을 얻을 수 있습니다. 번째 스위프에서는i\i가 삭제되고 그 후 (약칭) 역치환으로 이어집니다.이러한 행렬의 예는 일반적으로 1D 포아송 방정식과 자연 입방 스플라인 보간법의 이산화에서 발생한다.
Thomas 알고리즘은 일반적으로 안정적이지 않지만 행렬이 대각선 우세(행 또는 열에 의해)이거나 대칭 [1][2]양의 유한인 경우 등 여러 특수한 경우에서 안정적이다. Thomas 알고리즘의 안정성에 대한 보다 정밀한 특성화는 Higham Orem [3]9.12를 참조하십시오.일반적인 경우 안정성이 필요한 경우 대신 [2]부분 피벗(GEP)을 사용한 가우스 제거를 권장합니다.
방법
순방향 스위프는 다음과 같은 새 계수의 계산으로 구성되어 있으며, 소수로 새 계수를 나타냅니다.
그리고.
그런 다음 백 치환을 통해 솔루션을 얻을 수 있습니다.
위의 방법에서는 원래 계수 벡터는 수정하지 않지만 새 계수를 추적해야 합니다.계수 벡터를 변경할 수 있는 경우 부기가 적은 알고리즘은 다음과 같습니다.
,, n {\ i n,
백 치환에 이어
계수 벡터를 보존하지 않고 VBA 서브루틴에 실장하는 방법:
후보선수 삼각_행렬_알고리즘(N%, A#(), B#(), C#(), D#(), X#()) 어둡다 i%, W# 위해서 i = 2 로. N W = A(i) / B(i - 1) B(i) = B(i) - W * C(i - 1) D(i) = D(i) - W * D(i - 1) 다음 분. i X(N) = D(N) / B(N) 위해서 i = N - 1 로. 1 걸음 -1 X(i) = (D(i) - C(i) * X(i + 1)) / B(i) 다음 분. i 끝. 후보선수
파생
삼각행렬 알고리즘의 도출은 가우스 제거의 특별한 경우이다.
미지수는 1, n(\이며, 풀어야 할 공식은 다음과 같습니다.
첫 번째 방정식을 사용하여 번째 = 2 { 방정식을 다음과 같이 수정하는 것을 고려합니다.
그 결과 다음과 같이 됩니다.
1은 두 번째 방정식에서 제외되었습니다.세 번째 방정식의 수정된 두 번째 방정식에 대해 유사한 전략을 사용하면 다음과 같은 결과를 얻을 수 있습니다.
에는 스타일 가 제외되었습니다. 절차를 n h 행() h { n^ { } )까지 반복하면 x style 이라는 미지의 식만 관련됩니다.이 는(- 1) (th방정식을 푸는 데 사용할 수 있습니다.또한 모든 미지의 문제가 해결될 때까지 계속됩니다.
분명히, 수정된 방정식의 계수는 명시적으로 언급될 경우 점점 더 복잡해집니다.절차를 검토함으로써 수정된 계수(틸드로 표기)를 재귀적으로 정의할 수 있습니다.
솔루션 프로세스를 더욱 빠르게 진행하기 위해 b~})를 분할할 수 있습니다(위험이 0으로 분할되지 않은 경우). 새로운 수정 계수는 각각 소수(prime)로 표시됩니다.
이는 위의 원래 시스템에 대해 정의된 것과 동일한 미지수와 계수를 가진 다음 시스템을 제공합니다.
마지막 방정식은 오직 한 가지 알려지지 않은 것과 관련이 있다.이 문제를 차례로 풀면 다음 마지막 방정식이 미지수로 감소하므로 이 역치환을 사용하여 미지수를 모두 찾을 수 있습니다.
변종
일부 상황, 특히 주기적인 경계 조건을 포함하는 상황에서는 약간 교란된 형태의 삼각형 시스템을 해결해야 할 수 있다.
이 경우 Sherman-Morrison 공식을 사용하여 가우스 제거의 추가 연산을 방지하고 Thomas 알고리즘을 사용할 수 있습니다.이 방법은 입력 및 희박한 보정 벡터 모두에 대해 시스템의 수정된 비순환 버전을 해결한 다음 솔루션을 결합해야 합니다.이는 순수 삼각행렬 알고리즘의 정방향 부분을 공유할 수 있기 때문에 두 솔루션을 동시에 계산하면 효율적으로 수행될 수 있습니다.
다음으로 나타내는 경우:
다음으로 해결해야 할 시스템은 다음과 같습니다.
이 경우 과 은 일반적으로 0이 아니기 때문에 이들 계수의 존재는 Thomas 알고리즘을 직접 적용할 수 없습니다.따라서 다음과 같이 BR× n \ B \ \ { R { n \ times } u , n \ , \ \ { R { n }을 생각할 수 있습니다.
여기서 {\은 선택하는 파라미터입니다. A A는 A T A로 할 수 있습니다. 그 다음 다음과 같은 방법으로 [4]해답이 얻어집니다.먼저 토마스 알고리즘을 적용한 두 개의 삼각형 방정식을 풀겠습니다.
그런 다음 Shermann-Morrison 공식을 사용하여 x(\ x를 재구성합니다.
계수 벡터를 보존하지 않고 Dev-C++로 구현:
유형화된 구조{ 이중으로 하다 A[n+2]; 이중으로 하다 B[n+2]; 이중으로 하다 C[n+2]; 이중으로 하다 D[n+2]; } 계수; //Thomas Alg. 적용, 알 수 없는 x[1], ..., x[n] 무효 토마스알그(이중으로 하다 x[n+1],계수* 쿠프){ 이중으로 하다 u[n+1]={},v[n+1]={}; 이중으로 하다 y[n+1]={},q[n+1]={}; 이중으로 하다* A=쿠프->A, *B=쿠프->B,*C=쿠프->C,*D=쿠프->D; 이중으로 하다 가치=0; 이중으로 하다 w; 인트 i; u[1]=감마; u[n]=C[n]; v[1]=1; v[n]=A[1]/감마; //행렬 B 작성 A[1]=0; B[1]=B[1]-감마; B[n]=B[n]-(C[n]*A[n])/감마; C[n]=0; 위해서(i=2;i< >n+1;i++){ w=A[i]/B[i-1]; B[i]=B[i]-w*C[i-1]; D[i]=D[i]-w*D[i-1]; u[i]=u[i]-w*u[i-1]; } y[n]=D[n]/B[n]; q[n]=u[n]/B[n]; 위해서(i=n-1;i>0;i--){ y[i]=(D[i]-C[i]*y[i+1])/B[i]; q[i]=(u[i]-C[i]*q[i+1])/B[i]; } 가치=(v[1]*y[1]+v[n]*y[n])/(1+v[1]*q[1]+v[n]*q[n]); 위해서(i=1;i< >n+1;i++){ x[i]=y[i]-q[i]*가치; } }
위에서 [5]설명한 삼각형 시스템의 약간 교란된 형태를 해결할 수 있는 또 다른 방법이 있습니다.치수 -) × ( - ()\( ) 의 2개의 보조 선형 시스템을 생각해 보겠습니다.
편의상 1 0 {\1}= 및 1 {{1}=1을 추가로 합니다. 이제 솔루션{ 2,3 n {\{}\n및 2개의 보조 삼각형 시스템에 대한 알고리즘으로 사용됩니다.
으로 { , x2…, x { \ 을(를) 다음 형식으로 나타낼 수 있습니다.
실제로, 두 번째 보조 시스템의 각 에 1을 곱하고, 첫 번째 보조 시스템의 해당 방정식에 + ({}=i를 사용하면, 즉 . 시스템의 2 ~({ n은는) 만족합니다. 11)을 만족시키려면 i i=2및 i i의 공식을 하고 x 2 2 + ({{2}{}{x}을 대체하십시오.}} n= n + 1 n {\n}=n}+n}을를) 원래 시스템의 첫 번째 방정식으로 만듭니다.를 통해 x 1에 1개의 스칼라 방정식이 생성됩니다.
그 결과, 이하를 알 수 있습니다.
계수 벡터를 보존하지 않고 Dev-C++로 구현:
유형화된 구조{ 이중으로 하다 A[n+2]; 이중으로 하다 B[n+2]; 이중으로 하다 C[n+2]; 이중으로 하다 D[n+2]; } 계수; //Thomas Alg. 적용, 알 수 없는 x[1], ..., x[n] 무효 토마스알그(이중으로 하다 x[n+1],계수* 쿠프){ 이중으로 하다 u[n+1]={},v[n+1]={}; 이중으로 하다* A=쿠프->A, *B=쿠프->B,*C=쿠프->C,*D=쿠프->D; 이중으로 하다 w,F[n+1]={}; F[2]=-A[2]; F[n]=-C[n]; 인트 i; u[1]=0; v[1]=1; 위해서(i=3;i< >n+1;i++){ w=A[i]/B[i-1]; B[i]=B[i]-w*C[i-1]; D[i]=D[i]-w*D[i-1]; F[i]=F[i]-w*F[i-1]; } u[n]=D[n]/B[n]; v[n]=F[n]/B[n]; 위해서(i=n-1;i>1;i--){ u[i]=(D[i]-C[i]*u[i+1])/B[i]; v[i]=(F[i]-C[i]*v[i+1])/B[i]; } x[1]=(D[1]-A[1]*u[n]-C[1]*u[2])/(B[1]+A[1]*v[n]+C[1]*v[2]); 위해서(i=2;i< >n+1;i++){ x[i]=u[i]+x[1]*v[i]; } }
두 경우 모두 풀어야 할 보조 시스템은 진정으로 3중으로 처리되므로, A x {\ Ax의 전체 계산 복잡도는 n의 치수, 즉 {\ O 산술 연산에 대해 선형으로 유지됩니다.
다른 상황에서 방정식 시스템은 블록 삼각형(블록 매트릭스 참조)일 수 있으며, 위의 행렬 시스템에서 개별 요소로 배열된 작은 하위 행렬이 있습니다(예: 2D 포아송 문제).이러한 [6]상황을 위해 단순화된 형태의 가우스 제거가 개발되었다.
Quarteroni, Sacco 및 Saleri의 교과서 수치 수학에는 일부 나눗셈을 사용하지 않는 수정된 알고리즘이 나열되어 있으며, 이는 일부 컴퓨터 아키텍처에서 유용합니다.
병렬 3각 솔버는 GPU를 포함한[7] 다수의 벡터 및 병렬 아키텍처용으로 공개되어 있습니다.
평행 삼각형 및 블록 삼각형 솔버의 광범위한 처리는 다음을 참조하십시오.
레퍼런스
- ^ Pradip Niyogi (2006). Introduction to Computational Fluid Dynamics. Pearson Education India. p. 76. ISBN 978-81-7758-764-7.
- ^ a b Biswa Nath Datta (2010). Numerical Linear Algebra and Applications, Second Edition. SIAM. p. 162. ISBN 978-0-89871-765-5.
- ^ Nicholas J. Higham (2002). Accuracy and Stability of Numerical Algorithms: Second Edition. SIAM. p. 175. ISBN 978-0-89871-802-7.
- ^ Batista, Milan; Ibrahim Karawia, Abdel Rahman A. (2009). "The use of the Sherman–Morrison–Woodbury formula to solve cyclic block tri-diagonal and cyclic block penta-diagonal linear systems of equations". Applied Mathematics and Computation. 210 (2): 558–563. doi:10.1016/j.amc.2009.01.003. ISSN 0096-3003.
- ^ Ryaben’kii, Victor S.; Tsynkov, Semyon V. (2006-11-02), "Introduction", A Theoretical Introduction to Numerical Analysis, Chapman and Hall/CRC, pp. 1–19, ISBN 978-0-429-14339-7, retrieved 2022-05-25
- ^ Quarteroni, Alfio; Sacco, Riccardo; Saleri, Fausto (2007). "Section 3.8". Numerical Mathematics. Springer, New York. ISBN 978-3-540-34658-6.
- ^ Chang, L.-W.; Hwu, W,-M. (2014). "A guide for implementing tridiagonal solvers on GPUs". In V. Kidratenko (ed.). Numerical Computations with GPUs. Springer. ISBN 978-3-319-06548-9.
- ^ Venetis, I.E.; Kouris, A.; Sobczyk, A.; Gallopoulos, E.; Sameh, A. (2015). "A direct tridiagonal solver based on Givens rotations for GPU architectures". Parallel Computing. 49: 101–116. doi:10.1016/j.parco.2015.03.008.
- ^ Gallopoulos, E.; Philippe, B.; Sameh, A.H. (2016). "Chapter 5". Parallelism in Matrix Computations. Springer. ISBN 978-94-017-7188-7.
- Conte, S. D.; de Boor, C. (1972). Elementary Numerical Analysis. McGraw-Hill, New York. ISBN 0070124469.
- 이 문서에서는 GFDL 라이선스에 의거한 CFD-Wiki의 기사 Tridiangularnal_matrix_algorithm_-_TDMA_(Thomas_algorithm)의 텍스트를 포함하고 있습니다.
- Press, W. H.; Teukolsky, S. A.; Vetterling, W. T.; Flannery, B. P. (2007). "Section 2.4". Numerical Recipes: The Art of Scientific Computing (3rd ed.). New York: Cambridge University Press. ISBN 978-0-521-88068-8.