numerical triangular factorization lecture #11 eee 574 dr. dan tylavsky
Post on 19-Dec-2015
218 views
TRANSCRIPT
Numerical Triangular Factorization
Lecture #11
EEE 574
Dr. Dan Tylavsky
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization Triangular factorization of a sparse matrix:
– Created ordered data structure L/U.– Numerical Program Segment:
• Variable Assignment:– A - Matrix to be factored stored in RR(C)U.– CIndxA - Column indices of A.– URO - Upper triangular factor matrix stored by rows (ordered).– LCO - Lower triangular factor matrix stored by cols. (ordered).– CIndxUO - Column Indices or URO (Row Indices of LCO). – Diag - Diagonal elements (of D matrix of LDU factors) stored in compact form.
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization• Variable Assignment (cont’d):
– Rindex - Row Index of current row being processed.– ExAcum - Expanded Accumulator used in update process.– ICPL - Initial column pointers to L matrix. (Updated as L matrix is created.)– Link - Self-referential linked list used to associate the disjoint sets of rows needed in the reduction of each row.
© Copyright 1999 Daniel Tylavsky
Numerical Triangular FactorizationSparse A=LDU Factorization Algorithm
Step 0: Initialization. Set RIndx=1 Setup ICPL array to point to the beginning of all columns of L (rows of U). For each row (RIndx):
Step 1: Load ExAcum with elements from row RIndx. Step 2: Perform update of elements to the right of the diagonal (ROD) and left of
diagonal (LOD) using expanded accumulator method. Update Link after each row (used in updating row Rindx) is used. (Use Link to determine col. indices of elements LOD, i.e., row numbers used when performing update on elements ROD. After each row is used for update operation, associate its index in Link with the row number for which it will next be needed when performing an update operation.
Step 3: Zero all links in Link associated with row RIndx. (Since factorization of row
is complete, links not needed.) Step 4: Invert diagonal element and store in Diag(RIndx). Step 5: Store elements to the right of the diagonal. Step 6: Add RIndx to appropriate location in linked list Link.
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization Let’s look at this algorithm in more detail.
Sparse A=LDU Factorization Algorithm Step 0: Initialization. Set RIndx=1 Setup ICPL array to point to the beginning of all columns of L (rows of U).
(This will be used to point to next available storage locations in L.) Initialize Link to zero. (Link is a self-referential linked list used to associate the
disjoint sets of rows, needed in the reduction of each row.) For each row (RIndx):
Step 1: Load ExAcum with elements from row RIndx. Step 1a: Zero all locations of native non-zero and fill locations to the right of
the diagonal (ROD) using indices store for upper triangular data structure (URO).
Step 1b: Zero all locations (non-zero and fill locations) to the left of the diagonal. (This set of indices will be the same as the list of row numbers used in Gauss elimination. This set of indices is constructed by this algorithm and stored in linked list Link.)
Step 1c: Write elements from row RIndx of A into ExAcum. (We do not clear location RIndx in ExAcum because we assume that row RIndx will always have a diagonal element to write into that location.)
© Copyright 1999 Daniel Tylavsky
Numerical Triangular FactorizationStep 2: “Eliminate” elements to the left of the diagonal. Enter linked list
Link at location RIndx. Use every row in the linked list to “eliminate”an element left of the diagonal (LOD). Update Link after each row,used in updating row Rindx, is used. Store updated LOD in LCO.Store updated ROD elements in URO.
Step 2a: Initialize RX = 0. (RX is row number to be used in the reduction ofrow RIndx.
Step 2b: Search linked list Link for row number with next smallest index tobe used in reduction of left most active entry in row RIndx. Call thisrow RX. (Start search with node ‘StartSrch’=Link(RIndx))
Step 2c: If linked list is exhausted (i.e., no more rows are needed in reductionof row RIndx) go to step 3.
Step 2d: Multiply row RX (stored in URO) by ExAcum(RX) and subtract from appropriatelocations in ExAcum (using URO indices as pointers). DO NOT OPERATE ONExAcum (RX).
© Copyright 1999 Daniel Tylavsky
Numerical Triangular FactorizationStep 2e: Multiply ExAcum(RX) by inverse of diagonal element stored in
Diag(RX). (Recall, for LDU factorization, both rows of U and columns of L are divided by diagonal elements.)
Step 2f: Store updated ExAcum(RX) (which is now an L entry) in L matrix at location pointed to by ICPL(RX). (Recall ICPL(RX) points to the next empty location in the column-wise storage of column RX in array LCO.) Increment ICPL(RX) to point to next available storage location in column RX of LCO.
Step 2g: The row index associated with ICPL(RX) ( i.e., CIndxUO(ICPL(RX)) Note: Column Index of U=Row Index of L ), say RY, is the next row (beyond row RIndx) that will need row RX for reduction purposes. Add row RX to linked list Link associating it with row RY. CHECK: If storage in column RX of LCO has been exhausted, ( i.e., ICPL(RX)>ERPUO(RX) ), then row RX is no longer need in the reduction of subsequent rows.
Step 2h: Go to step 2b
© Copyright 1999 Daniel Tylavsky
Numerical Triangular FactorizationStep 3: Zero all links in Link associated with row RIndx. (Since
factorization of row is complete, links not needed.)Step 4: Invert diagonal element and store in Diag(RIndx).Step 5: Store ROD elements. Using pointer from URO, multiply all active
ExAcum entries by Diag(RIndx) and store by rows in URO. (Notethat no ICPL pointer adjustment is needed.)
Step 6: Add RIndx to appropriate location in linked list Link. Row RIndxwill be used to eliminate LOD elements of some subsequent row. Addindex RIndx to linked list, Link, for that row.
Step 6a: Array ICPL(RIndx) points to next non-zero entry in column RIndx(whose index is greater that RIndx.) The row index of this entry,( CIndxUO(ICPL(RIndx)) )is the row number which will requirerow RIndx in the reduction process.
Step 6b: Add index RIndx to the linked list Link associated with rowCIndxUO(ICPL(RIndx)).
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
1
238.01
25.075.01
667.0333.01
5.05.01
5.05.01
5.05.01
667.12
25.5
667.2
3
8
4
2
11667.1875.5.375.25.
1125.125.
1333.1
15.1
1
1
1
1631
831
242
642
448
224
112
Let’s factorize the following matrix.
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 -8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k):
ERPU(k): 2 4 6 8 10 11URO(k):
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k):
Rx:Link(k):
Pos: 0 1 2 3 4 5 6 7ExAcum(k):
Rindex:
Step 0: Initialize RIndx, ICPL, Link.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k):
ERPU(k): 2 4 6 8 10 11URO(k):
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 11
RX:Link(k): 0 0 0 0 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k):
Rindex: 1 0
Step 1.1a,b: Zero ExAcum using Link,CIndxUO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k):
ERPU(k): 2 4 6 8 10 11URO(k):
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 11
RX:Link(k): 0 0 0 0 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 0 0
Rindex: 1 1.1ab
Step 1.1c: Write row Rindx values into ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k):
ERPU(k): 2 4 6 8 10 11URO(k):
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 11
RX:Link(k): 0 0 0 0 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 -1.000 -1.000
Rindex: 1 1.1c
Step 2.1a: Initialize RX=0.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k):
ERPU(k): 2 4 6 8 10 11URO(k):
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 11
RX: 0Link(k): 0 0 0 0 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 -1.000 -1.000
Rindex: 1 2.1a
Step 2.1b,c: Search Link for next greater value. If no greater value go to step 3.Step 3.1: Zero all links in Link associated with RIndx.Step 4.1: Invert ExAcum(RIndx), store in Diag(Rindx).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500
ERPU(k): 2 4 6 8 10 11URO(k):
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 11
RX: 0Link(k): 0 0 0 0 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 -1.000 -1.000
Rindex: 1 4.1
Step 5.1: Multiply active ExAcum by Diag(1) & store in URO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 11
RX: 0Link(k): 0 0 0 0 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 -1.000 -1.000
Rindex: 1 5.1
Step 6.1: Add Rindx=1 to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 11
RX: 0Link(k): 0 0 0 1 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 -1.000 -1.000
Rindex: 1 6.1
Row 1
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 -8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k):
ERPU(k): 2 4 6 8 10 11URO(k):
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k):
Rx:Link(k):
Pos: 0 1 2 3 4 5 6 7ExAcum(k):
Rindex:
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 -1.000 -1.000
Rindex: 1 1.2
Step 1.2a,b: Zero ExAcum using Link, CIndxUO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 -1.000 -1.000 0.000 0.000
Rindex: 2 1.2ab
Step 1.2c: Write row Rindx values into ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 -1.000 -1.000 -2.000 -2.000
Rindex: 2 1.2c
Step 2.2a: Initialize RX=0.Step 2.2b,c: Search Link for next greater value. If no greater value go to step 3.Step 3.2: Zero all links in Link associated with RIndx.Step 4.2: Invert ExAcum(2), store in Diag(2).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 -1.000 -1.000 -2.000 -2.000
Rindex: 2 4.2
Step 5.2: Multiply active ExAcum entries by Diag(2) & store in URO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 0 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 -1.000 -1.000 -2.000 -2.000
Rindex: 2 5.2
Step 6.2: Add Rindx=2 to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 -1.000 -1.000 -2.000 -2.000
Rindex: 2 6.2
Row 2
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 -8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k):
ERPU(k): 2 4 6 8 10 11URO(k):
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k):
Rx:Link(k):
Pos: 0 1 2 3 4 5 6 7ExAcum(k):
Rindex:
Step 2.6: Add Rindx=2 to Link list associated with CIndxUO(ICPL(Rindx)).m
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 -1.000 -1.000 -2.000 -2.000
Rindex: 2 2.6
Step 3.1a,b: Zero ExAcum using Link, CIndxUO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 0.000 -1.000 -2.000 0.000
Rindex: 3 3.1ab
Step 3.1c: Write row 3 values into ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 8.000 -4.000 -1.000 -2.000 -4.000
Rindex: 3 3.1c
Step 3.2a: Initialize RX=0.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 8.000 -4.000 -1.000 -2.000 -4.000
Rindex: 3 3.2a
Step 3.2b,c: Search Link for next greater value. If no greater value go to step 3.Step 3.3: Zero all links in Link associated with RIndx.Step 3.4: Invert ExAcum(3), store in Diag(3).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 8.000 -4.000 -1.000 -2.000 -4.000
Rindex: 3 3.4
Step 3.5: Multiply active ExAcum entries by Diag(3) & store in URO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 0 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 8.000 -4.000 -1.000 -2.000 -4.000
Rindex: 3 3.5
Step 3.6: Add Rindx to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 3 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 8.000 -4.000 -1.000 -2.000 -4.000
Rindex: 3 3.6
Row 3
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 -8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k):
ERPU(k): 2 4 6 8 10 11URO(k):
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k):
Rx:Link(k):
Pos: 0 1 2 3 4 5 6 7ExAcum(k):
Rindex:
Step 3.6: Add Rindx to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 3 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 2.000 4.000 8.000 -4.000 -1.000 -2.000 -4.000
Rindex: 3 3.6
Step 4.1a,b: Incr Rindx. Zero ExAcum using Link, CIndxUO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 3 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 0.000 4.000 0.000 -4.000 0.000 -2.000 0.000
Rindex: 4 4.1ab
Step 4.1c: Write row 4 values into ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 3 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 6.000 0.000 -2.000 0.000
Rindex: 4 4.1c
Step 4.2a: Initialize RX=0.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 0Link(k): 3 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 6.000 0.000 -2.000 0.000
Rindex: 4 4.2a
Step 4.2b,c1: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 1Link(k): 3 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 6.000 0.000 -2.000 0.000
Rindex: 4 4.2bc1
Step 4.2d1: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 1Link(k): 3 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 6.000 0.000 -2.000 0.000
Rindex: 4 4.2d1
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k):ICPL(k): 1 3 5 7 9 10
RX: 1Link(k): 3 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 5.000 -1.000 -2.000 0.000
Rindex: 4 4.2d1(b)
Step 4.2ef1: Mult. ExAcum(RX) by Diag(RX). Store result in ICPL(RX). Incr. ICPL(RX).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000ICPL(k): 2 3 5 7 9 10
RX: 1Link(k): 3 0 0 1 0 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 5.000 -1.000 -2.000 0.000
Rindex: 4 4.2ef1
Step 4.2g1: Add row RX to link list associated with CincdxUO(ICPL(RX)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000ICPL(k): 2 3 5 7 9 10
RX: 1Link(k): 3 0 0 1 1 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 5.000 -1.000 -2.000 0.000
Rindex: 4 4.2g1
Row 4
© Copyright 1999 Daniel Tylavsky
Numerical Triangular FactorizationPos: 0 1 2 3 4 5 6 7 8 9 10 11
Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000ICPL(k): 2 3 5 7 9 10
RX: 1Link(k): 3 0 0 1 1 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 5.000 -1.000 -2.000 0.000
Rindex: 4 4.2g1
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 -8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Row 4(b)
Step 4.2g1: Add row RX to link list associated with CincdxUO(ICPL(RX)). Step 4.2b,c2: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000ICPL(k): 2 3 5 7 9 10
RX: 3Link(k): 3 0 0 1 1 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 5.000 -1.000 -2.000 0.000
Rindex: 4 4.2bc2
Step 4.2d2: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000ICPL(k): 2 3 5 7 9 10
RX: 3Link(k): 3 0 0 1 1 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 5.000 -1.000 -2.000 0.000
Rindex: 4 4.2d2
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000ICPL(k): 2 3 5 7 9 10
RX: 3Link(k): 3 0 0 1 1 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.2d2(b)
Step 4.2ef2: Mult. ExAcum(RX) by Diag(RX).Store result in LCO(ICPL(RX)).Incr. ICPL(RX).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000ICPL(k): 2 3 5 7 9 10
RX: 3Link(k): 3 0 0 1 1 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.2ef2
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 3 0 0 1 1 2 0
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.2ef2(b)
Step 4.2g2: Add row RX to link list associated with CincdxUO(ICPL(RX)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 3 0 0 1 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.2g2
Step 4.2b,c3: Search Link for next greater value. If no greater value go to step 3.Step 4.3: Zero all links in Link associated with RIndx.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 3 0 0 1 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.2bc3
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 0 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.3
Step 4.4: Invert ExAcum(4), store in Diag(4).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 0 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.4
Step 4.5: Multiply active ExAcum entries by Diag(4) & store in URO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 0 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.5
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 0 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.5(b)
Step 4.6: Add Rindx=4 to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.6
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 -8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Step 4.6: Add Rindx=4 to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.6
Row 5
Step 5.1a,b: Incr Rindx. Zero ExAcum using Link, CIndxUO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 0.000 4.000 -4.000 0.000 -1.000 0.000 0.000
Rindex: 5 5.1ab
Step 5.1c: Write row 5 values into ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 0.000 4.000 -2.000 0.000
Rindex: 5 5.1c
Step 5.2a: Initialize RX=0.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 0Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 0.000 4.000 -2.000 0.000
Rindex: 5 5.2a
Step 5.2b,c1: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 1Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 0.000 4.000 -2.000 0.000
Rindex: 5 5.2bc1
Step 5.2d1: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 1Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 0.000 4.000 -2.000 0.000
Rindex: 5 5.2d1
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 1Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 3.000 -2.000 0.000
Rindex: 5 5.2d1(b)
Step 5.2ef1:Mult. ExAcum(RX) by Diag(RX).Store result in LCO(ICPL(RX)). Incr. ICPL(RX).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 1Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 3.000 -2.000 0.000
Rindex: 5 5.2ef1
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500ICPL(k): 3 3 6 7 9 10
RX: 1Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 3.000 -2.000 0.000
Rindex: 5 5.2ef1(b)
Step 5.2g1: Add row RX to link list associated with CincdxUO(ICPL(RX)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500ICPL(k): 3 3 6 7 9 10
RX: 1Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 3.000 -2.000 0.000
Rindex: 5 5.2g1
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 -8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Step 5.2g1: Add row RX to link list associated with CincdxUO(ICPL(RX)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500ICPL(k): 3 3 6 7 9 10
RX: 1Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 3.000 -2.000 0.000
Rindex: 5 5.2g1
Step 5.2b,c2: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500ICPL(k): 3 3 6 7 9 10
RX: 4Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 3.000 -2.000 0.000
Rindex: 5 5.2bc2
Step 5.2d2: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500ICPL(k): 3 3 6 7 9 10
RX: 4Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 3.000 -2.000 0.000
Rindex: 5 5.2d2
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500ICPL(k): 3 3 6 7 9 10
RX: 4Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.2d2
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 7 9 10
RX: 4Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.2ef2(b)
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 4 0 0 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.2ef2(b)
Step 5.2ef2: Mult. ExAcum(RX) by Diag(RX).Store result in LCO(ICPL(RX)).Incr. ICPL(RX).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 4 0 4 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.2ef2(b)
Step 5.2g2: Add row RX to link list associated with CincdxUO(ICPL(RX)).
Row 5(b)
Step 5.2b,c3: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 4 0 4 0 1 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.2bc3
Step 5.3: Zero all links in Link associated with RIndx.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 0 0 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.3
Step 5.4: Invert ExAcum(5), store in Diag(5).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 0 0 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.4
Step 5.5: Multiply active ExAcum entries by Diag(5) & store in URO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 0 0 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.5
Step 5.6: Add RIndx=5 to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.5
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Step 5.6: Add RIndx=5 to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 -1.000 2.667 -2.000 -0.667
Rindex: 5 5.5
Step 6.1a,b: Incr RIndx. Zero ExAcum using Link, CIndxUO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 0.000 -4.000 0.000 0.000 -2.000 0.000
Rindex: 6 6.1ab
Step 6.1c: Write row 6 values into ExAcum.
Row 6
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 4Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 8.000 0.000
Rindex: 6 6.1c
Step 6.2a: Initialize RX=0.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 0Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 8.000 0.000
Rindex: 6 6.2a
Step 6.2b,c1: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 2Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 8.000 0.000
Rindex: 6 6.2bc1
Step 6.2d1: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 2Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 8.000 0.000
Rindex: 6 6.2d1
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 2Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 7.500 -0.500
Rindex: 6 6.2d1(b)
Step 6.2ef1:Mult. ExAcum(RX) by Diag(RX).Store result in LCO(ICPL(RX)). Incr. ICPL(RX).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333ICPL(k): 3 3 6 8 9 10
RX: 2Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 7.500 -0.500
Rindex: 6 6.2ef1
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333ICPL(k): 3 4 6 8 9 10
RX: 2Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 7.500 -0.500
Rindex: 6 6.2ef1(b)
Step 6.2g1: Add row RX to link list associated with CIncdxUO(ICPL(RX)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333ICPL(k): 3 4 6 8 9 10
RX: 2Link(k): 0 5 4 0 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 7.500 -0.500
Rindex: 6 6.2g1
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333ICPL(k): 3 4 6 8 9 10
RX: 2Link(k): 0 5 4 2 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 7.500 -0.500
Rindex: 6 6.2g1(b)
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Row 6(b)
Step 6.2g1: Add row RX to link list associated with CIncdxUO(ICPL(RX)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333ICPL(k): 3 4 6 8 9 10
RX: 2Link(k): 0 5 4 2 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 7.500 -0.500
Rindex: 6 6.2g1(b)
Step 6.2b,c2: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333ICPL(k): 3 4 6 8 9 10
RX: 5Link(k): 0 5 4 2 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 7.500 -0.500
Rindex: 6 6.2bc2
Step 6.2d2: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333ICPL(k): 3 4 6 8 9 10
RX: 5Link(k): 0 5 4 2 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 7.500 -0.500
Rindex: 6 6.2d2
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333ICPL(k): 3 4 6 8 9 10
RX: 5Link(k): 0 5 4 2 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.2d2(b)
Step 6.2ef2:Mult. ExAcum(RX) by Diag(RX).Store result in LCO(ICPL(RX)). Incr. ICPL(RX).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 9 10
RX: 5Link(k): 0 5 4 2 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.2ef2
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 10 10
RX: 5Link(k): 0 5 4 2 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.2ef2(b)
Step 6.2g2: Add row RX to link list associated with CincdxUO(ICPL(RX)). (ERR!)
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 10 10
RX: 5Link(k): 0 5 4 2 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.2g2
Step 6.2b,c3: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 10 10
RX: 5Link(k): 0 5err 4 2 0 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.2bc3
One job you have in your midterm is to correct this non-disjoint linked list problem.
Step 6.3: Zero all links in Link associated with RIndx.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 10 10
RX: 5Link(k): 0 5err 4 2 0 0 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.2bc3
Step 6.4: Invert ExAcum(6), store in Diag(6).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375 0.190
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 10 10
RX: 5Link(k): 0 5 4 2 0 0 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.4
Step 6.5: Multiply active ExAcum entries by Diag(6) & store in URO.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375 0.190
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250 -0.238
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 10 10
RX: 5Link(k): 0 5 4 2 0 0 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.5
Step 6.6: Add Rindx=6 to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375 0.190
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250 -0.238
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 10 10
RX: 5Link(k): 0 5 4 2 0 0 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.6
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375 0.190
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250 -0.238
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 10 10
RX: 5Link(k): 0 5 4 2 6 0 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.6(b)
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Team Problem: Complete the factorization using the data structure below. (Finish Row 7).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Row 7
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333 0.375 0.190
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -0.667 -0.750 -0.250 -0.238
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -1.000 -0.250 -0.500 -0.333 -1.125ICPL(k): 3 4 6 8 10 10
RX: 5Link(k): 0 5 4 2 6 0 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 -1.000 -4.000 0.000 -3.000 5.250 -1.250
Rindex: 6 6.6(b)
The End
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Subsequent Slides are to be ignored.
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Step 5.2g1: Add row RX to link list associated with CincdxUO(ICPL(RX)).
Step 5.2ef2: Mult. ExAcum(RX) by Diag(RX).Store result in LCO(ICPL(RX)).Incr. ICPL(RX).
Step 5.2g2: Add row RX to link list associated with CincdxUO(ICPL(RX)).
Step 6.2b,c3: Search Link for next greater value. If no greater value go to step 3.Step 6.3: Zero all links in Link associated with RIndx.
Step 6.4: Invert ExAcum(4), store in Diag(4).Step 6.5: Multiply active ExAcum entries by Diag(4) & store in URO.
Step 6.6: Add Rindx=4 to Link list associated with CIndxUO(ICPL(Rindx)).
Step 5.2d2: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Step 5.2b,c2: Search Link for next greater value. If no greater value go to step 3.
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Step 6.2b,c2: Search Link for next greater value. If no greater value go to step 3.Step 6.2d2: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Step 6.2ef2:Mult. ExAcum(RX) by Diag(RX).Store result in LCO(ICPL(RX)). Incr. ICPL(RX).
Step 6.2g2: Add row RX to link list associated with CincdxUO(ICPL(RX)).
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Step 6.1a,b: Incr Rindx. Zero ExAcum using Link, CIndxUO.
Step 6.1c: Write row 5 values into ExAcum. Step 6.2a: Initialize RX=0.Step 6.2b,c1: Search Link for next greater value. If no greater value go to step 3.Step 6.2d1: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Step 6.2ef1:Mult. ExAcum(RX) by Diag(RX).Store result in LCO(ICPL(RX)). Incr. ICPL(RX).
Step 6.2g1: Add row RX to link list associated with CincdxUO(ICPL(RX)).
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Step 5.2g1: Add row RX to link list associated with CincdxUO(ICPL(RX)).
Step 5.2ef2: Mult. ExAcum(RX) by Diag(RX).Store result in LCO(ICPL(RX)).Incr. ICPL(RX).
Step 5.2g2: Add row RX to link list associated with CincdxUO(ICPL(RX)).
Step 5.2b,c3: Search Link for next greater value. If no greater value go to step 3.Step 5.3: Zero all links in Link associated with RIndx.
Step 5.4: Invert ExAcum(4), store in Diag(4).Step 5.5: Multiply active ExAcum entries by Diag(4) & store in URO.
Step 5.6: Add Rindx=4 to Link list associated with CIndxUO(ICPL(Rindx)).
Step 5.2d2: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.
Step 5.2b,c2: Search Link for next greater value. If no greater value go to step 3.
© Copyright 1999 Daniel Tylavsky
Numerical Triangular Factorization
Pos: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A(k): 2 -1 -1 4 -2 -2 8 -4 -4 -2 -4 6 -2 4 -2 -1 -3 -8 -1 -3 16
CIndx(k): 1 5 4 2 7 6 3 4 7 1 3 4 1 5 6 2 5 6 2 3 7ERP(k): 0 3 6 9 12 15 18 21
Step 6: Add Rindx to Link list associated with CIndxUO(ICPL(Rindx)).
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -2.000
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 0 1 0 0 4 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 3.000 -1.000 -2.000 -2.000
Rindex: 4 4.x
Step 1a,b: Incr Rindx. Zero ExAcum using Cindx, Link, CIndxUO.
Step 2ef: Mult. ExAcum(RX) by Diag(RX). Store result in ICPL(RX). Incr. ICPL(RX). Step 2g: Add row RX to link list associated with Mult. CincdxUO(ICPL(RX)). Step 2b,c: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -2.000
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 0 1 0 0 4 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): 0.000 4.000 -4.000 0.000 -1.000 0.000 0.000
Rindex: 5 5.1ab
Step 1c: Write row 5 values into ExAcum.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -2.000
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 3Link(k): 0 1 0 0 4 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 0.000 4.000 -2.000 0.000
Rindex: 5 5.1c
Step 2a: Initialize RX=0.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -2.000
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 0Link(k): 0 1 0 0 4 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 0.000 4.000 -2.000 0.000
Rindex: 5 5.2a
Row 5
Step 2b,c: Search Link for next greater value. If no greater value go to step 3.
Pos: 0 1 2 3 4 5 6 7 8 9 10 11Diag(k): 0.500 0.250 0.125 0.333
ERPU(k): 2 4 6 8 10 11URO(k): -0.500 -0.500 -0.500 -0.500 -0.500 -0.500 -0.333 -2.000
CIndxUO(k): 4 5 6 7 4 7 5 7 6 7 7LCO(k): -1.000 -0.500ICPL(k): 2 3 6 7 9 10
RX: 4Link(k): 0 1 0 0 4 2 3
Pos: 0 1 2 3 4 5 6 7ExAcum(k): -2.000 4.000 -4.000 0.000 4.000 -2.000 0.000
Rindex: 5 5.2bc
Step 2d: Mult. Row RX of URO by ExAcum(RX) and subtract from ExAcum.