650 likes | 809 Views
The Snap-Back Pivoting Method for Symmetric Banded Indefinite Matrices. Dror Irony and Sivan Toledo Tel-Aviv University. The Problem. Solve the system Ax=b W here A is banded n n , symmetric with half bandwidth m :. ?. ?. ?. ?. =. ?. ?. ?. ?. ?. So far ….
E N D
The Snap-Back Pivoting Method for Symmetric Banded Indefinite Matrices Dror Irony and Sivan Toledo Tel-Aviv University
The Problem Solve the system Ax=b Where A is banded nn, symmetric with half bandwidth m : ? ? ? ? = ? ? ? ? ?
So far … • Choleski/LLT - just positive definite • GEPP - not exploiting symmetry • 2x2 block pivoting (e.g. B-K) - unbounded fill • Reduction to tridiagonal (e.g. aasen) - unbounded fill • Orthogonal reduction to tridiagonal (e.g. SBR) - too expensive: O(n2m)
Our Factorization Snap-Back Pivoting: • If possible => simple 11 LLTstep • Otherwise => Eliminate 1 or 2 rows/columns symmetry is ruined – but then snapped back!
Benefits • Stable • Exploits symmetry • Keeps band structure => fill is bounded • Running time: O(m2n) • Fast
If A[1,1]is large enough • Simple symmetric Gaussian elimination step: A[1,1]
If A[1,1]is large enough • Simple symmetric Gaussian elimination step:
If A[1,1]is large enough • Simple symmetric Gaussian elimination step:
If A[1,1]is large enough • Simple symmetric Gaussian elimination step:
If A[1,1]is large enough • Simple symmetric Gaussian elimination step:
If A[1,1]is large enough • Simple symmetric Gaussian elimination step:
If A[1,1]is large enough • Simple symmetric Gaussian elimination step:
If A[1,1]is large enough • Simple symmetric Gaussian elimination step:
If A[1,1]is not large enough Eliminate elements 2 till m1in first row/column (mi = number of structural non-zeros under the diagonal in column i)
If A[1,1]is not large enough Eliminate elements 2 till m1in first row/column (mi = number of structural non-zeros under the diagonal in column i) x If x>y swap rows/cols 2 and 3 y
If A[1,1]is not large enough Eliminate elements 2 till m1in first row/column (mi = number of structural non-zeros under the diagonal in column i)
If A[1,1]is not large enough Eliminate elements 2 till m1in first row/column (mi = number of structural non-zeros under the diagonal in column i)
If A[1,1]is not large enough Eliminate elements 2 till m1in first row/column (mi = number of structural non-zeros under the diagonal in column i) x If x>y swap rows/cols 3 and 4 y
If A[1,1]is not large enough Eliminate elements 2 till m1in first row/column (mi = number of structural non-zeros under the diagonal in column i)
If A[1,1]is not large enough Eliminate elements 2 till m1in first row/column (mi = number of structural non-zeros under the diagonal in column i)
If A[1,1]is not large enough Eliminate elements 2 till m1in first row/column (mi = number of structural non-zeros under the diagonal in column i)
If A[1,1]is not large enough Eliminate the element m1+1 in the first column by Givens:
If A[1,1]is not large enough Eliminate the element m1+1 in the first column by Givens: Cos() Sin() 1 1 -Sin() Cos() 1 1 1 1 1
If A[1,1]is not large enough Eliminate the element m1+1 in the first column by Givens:
If A[1,1]is not large enough Now, eliminate the first row using its first element:
If A[1,1]is not large enough Now, eliminate the first row using its first element:
If A[1,1]is not large enough Now, eliminate the first row using its first element:
If A[1,1]is not large enough Now, eliminate the first row using its first element:
If A[1,1]is not large enough Now, eliminate the first row using its first element:
If A[1,1]is not large enough Now, eliminate the first row using its first element:
If A[1,1]is not large enough Now, eliminate the first row using its first element:
If A[1,1]is not large enough Denote the matrix we got by B: B =
If B[m1+1,m1+1] is not the largest element in its row Scale row m1+1: B[m1+1,m1+1] 1 1 1 1/Cos() 1 1 1 1 1
If B[m1+1,m1+1] is not the largest element in its row Now we can move forward to the next elimination step…
If B[m1+1,m1+1] is the largest element in its row Bring B[m1+1,m1+1] to location [2,2] : B[m1+1,m1+1] B[2,2]
If B[m1+1,m1+1] is the largest element in its row Bring B[m1+1,m1+1] to location [2,2] :
If B[m1+1,m1+1] is the largest element in its row Bring B[m1+1,m1+1] to location [2,2] :
If B[m1+1,m1+1] is the largest element in its row Bring B[m1+1,m1+1] to location [2,2] :
If B[m1+1,m1+1] is the largest element in its row Eliminate elements 3 to m1 in second row/column:
If B[m1+1,m1+1] is the largest element in its row Eliminate elements 3 to m1 in second row/column: x If x>y swap rows/cols 3 and 4 y
If B[m1+1,m1+1] is the largest element in its row Eliminate elements 3 to m1 in second row/column:
If B[m1+1,m1+1] is the largest element in its row Eliminate elements 3 to m1 in second row/column:
If B[m1+1,m1+1] is the largest element in its row Now eliminate the second row/column:
If B[m1+1,m1+1] is the largest element in its row Now eliminate the second row/column:
If B[m1+1,m1+1] is the largest element in its row Now eliminate the second row/column:
If B[m1+1,m1+1] is the largest element in its row Now eliminate the second row/column:
If B[m1+1,m1+1] is the largest element in its row Now eliminate the second row/column:
If B[m1+1,m1+1] is the largest element in its row Now eliminate the second row/column:
If B[m1+1,m1+1] is the largest element in its row Now eliminate the second row/column: