numerical triangular factorization lecture #11 eee 574 dr. dan tylavsky

26
Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

Post on 19-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

Numerical Triangular Factorization

Lecture #11

EEE 574

Dr. Dan Tylavsky

Page 2: 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.

Page 3: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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.

Page 4: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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.

Page 5: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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.)

Page 6: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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).

Page 7: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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

Page 8: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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)).

Page 9: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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.

Page 10: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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

Page 11: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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

Page 12: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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

Page 13: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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

Page 14: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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

Page 15: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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

Page 16: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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

Page 17: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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)

Page 18: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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)

Page 19: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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)

Page 20: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

The End

Page 21: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© Copyright 1999 Daniel Tylavsky

Numerical Triangular Factorization

Subsequent Slides are to be ignored.

Page 22: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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.

Page 23: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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)).

Page 24: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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)).

Page 25: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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.

Page 26: Numerical Triangular Factorization Lecture #11 EEE 574 Dr. Dan Tylavsky

© 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.