삼각행렬 알고리즘

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] 다수의 벡터 및 병렬 아키텍처용으로 공개되어 있습니다.

평행 삼각형 및 블록 삼각형 솔버의 광범위한 처리는 다음을 참조하십시오.

레퍼런스

  1. ^ Pradip Niyogi (2006). Introduction to Computational Fluid Dynamics. Pearson Education India. p. 76. ISBN 978-81-7758-764-7.
  2. ^ a b Biswa Nath Datta (2010). Numerical Linear Algebra and Applications, Second Edition. SIAM. p. 162. ISBN 978-0-89871-765-5.
  3. ^ Nicholas J. Higham (2002). Accuracy and Stability of Numerical Algorithms: Second Edition. SIAM. p. 175. ISBN 978-0-89871-802-7.
  4. ^ 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.
  5. ^ 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
  6. ^ Quarteroni, Alfio; Sacco, Riccardo; Saleri, Fausto (2007). "Section 3.8". Numerical Mathematics. Springer, New York. ISBN 978-3-540-34658-6.
  7. ^ 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.
  8. ^ 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.
  9. ^ Gallopoulos, E.; Philippe, B.; Sameh, A.H. (2016). "Chapter 5". Parallelism in Matrix Computations. Springer. ISBN 978-94-017-7188-7.
  • 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.