Exercise 3.13 (Matrix inversion lemma)

This exercise shows that our efficient procedures for updating a tableau can be derived from a useful fact in numerical linear algebra.

(a)
(Matrix inversion lemma) Let C be an m × m invertible matrix and let u , v be vectors in m . Show that
( C + w v ) 1 = C 1 C 1 w v C 1 1 + v C 1 w .

(Note that w v is an m × m matrix). Hint: Multiply both sides by ( C + w v ) .

(b)
Assuming that C 1 is available, explain how to obtain ( C + w v ) 1 using only O ( m 2 ) arithmetic operations.
(c)
Let B and B ¯ be basis matrices before and after an iteration of the simplex method. Let A B ( l ) , A B ¯ ( l ) be the exiting and entering column, respectively. Show that
B ¯ B = ( A B ¯ ( l ) A B ( l ) ) e l ,

where e l is the l th unit vector.

(d)
Note that e i B 1 is the i th row of B 1 and e l B 1 is the pivot row. Show that
e i B ¯ 1 = e i B 1 g i e l B 1 , i = 1 , , m ,

for suitable scalars g i . Provide a formula for g i . Interpret the above equation in terms of the mechanics for pivoting in the revised simplex method.

(e)
Multiply both sides of the equation in part (d) by [ b A ] and obtain an interpretation of the mechanics for pivoting in the full tableau implementation.

Answers

(a) Following the hint, we will prove the identity by showing that the product of ( C + w v ) and the expression on the right-hand side is the identity matrix. Let the right-hand side be denoted by B :

B = C 1 C 1 w v C 1 1 + v C 1 w .

We want to show that ( C + w v ) B = I . We expand the product:

( C + w v ) B = C B + w v B .

First, we compute the term C B :

C B = C ( C 1 C 1 w v C 1 1 + v C 1 w ) = I w v C 1 1 + v C 1 w .

Next, we compute the term w v B . To simplify this, we first evaluate v B , noting that v C 1 w is a scalar:

v B = v ( C 1 C 1 w v C 1 1 + v C 1 w ) = v C 1 ( v C 1 w ) v C 1 1 + v C 1 w = v C 1 ( 1 v C 1 w 1 + v C 1 w ) = v C 1 ( 1 + v C 1 w v C 1 w 1 + v C 1 w ) = v C 1 1 + v C 1 w .

Using this result, we can now find w v B :

w v B = w ( v B ) = w v C 1 1 + v C 1 w .

Finally, we add the two computed parts together:

( C + w v ) B = ( I w v C 1 1 + v C 1 w ) + ( w v C 1 1 + v C 1 w ) = I .

This confirms the identity, provided that the denominator 1 + v C 1 w 0 . □

(b) We use the formula from part (a) and compute the right-hand side efficiently by avoiding matrix-matrix multiplications. The procedure is as follows:

1.
Compute the vector u = C 1 w . This is a matrix-vector product, which requires O ( m 2 ) operations.
2.
Compute the scalar α = 1 + v u . This is a vector dot product plus an addition, requiring O ( m ) operations.
3.
Compute the row vector r = v C 1 . This is a vector-matrix product, which also requires O ( m 2 ) operations.
4.
The expression to be subtracted is now u r α . Forming the rank-one matrix u r costs O ( m 2 ) , and the subsequent scalar division costs another O ( m 2 ) .
5.
Finally, subtract this result from C 1 . This matrix subtraction requires O ( m 2 ) operations.

The total cost is dominated by the matrix-vector multiplications and matrix additions/subtractions. The overall complexity is therefore O ( m 2 ) . □

(c) The matrix B ¯ is identical to the matrix B , except that its l th column, A B ( l ) , has been replaced by the entering column, A B ¯ ( l ) .

The difference B ¯ B is therefore a matrix that consists of zero vectors in every column, except for the l th column. The l th column is the difference between the new and old l th columns, which is ( A B ¯ ( l ) A B ( l ) ) .

The expression on the right-hand side is the outer product of the column vector ( A B ¯ ( l ) A B ( l ) ) and the row vector e l . This product results in a matrix whose k th column is ( A B ¯ ( l ) A B ( l ) ) multiplied by the k th component of e l . Since the k th component of e l is 1 if k = l and 0 otherwise, the resulting matrix is zero everywhere except for the l th column, which is precisely ( A B ¯ ( l ) A B ( l ) ) . The two sides are therefore equal. □

(d) From part (c), we have B ¯ = B + ( A B ¯ ( l ) A B ( l ) ) e l . Let w = A B ¯ ( l ) A B ( l ) and v = e l . We can now apply the matrix inversion lemma from part (a) with C = B :

B ¯ 1 = B 1 B 1 w e l B 1 1 + e l B 1 w .

To find the i th row of B ¯ 1 , we left-multiply by e i :

e i B ¯ 1 = e i B 1 ( e i B 1 w ) ( e l B 1 ) 1 + e l B 1 w .

This is the desired form, where the scalar g i is given by

g i = e i B 1 w 1 + e l B 1 w .

To find a more practical form for g i , let u = B 1 A j be the pivot column. Note that since A B ( l ) is the l -th column of B , we have B 1 A B ( l ) = e l . We can then simplify the terms involving w :

e i B 1 w = e i B 1 ( A j A B ( l ) ) = e i ( u e l ) = u i ( e i e l ) , 1 + e l B 1 w = 1 + e l ( u e l ) = 1 + u l 1 = u l .

The term e i e l is 1 if i = l and 0 otherwise. The pivot element is u l 0 . Substituting these back gives the formula:

g i = u i u l  for  i l , and g l = u l 1 u l .

Interpretation: The identity e i B ¯ 1 = e i B 1 g i e l B 1 shows that the new i -th row of B 1 is obtained by taking the old i -th row and subtracting a multiple ( g i ) of the old pivot row. This is precisely the elementary row operation used to update the matrix B 1 in the revised simplex method.

(e) The full simplex tableau (excluding the zeroth row) can be represented by the matrix T = B 1 [ b A ] . The i th row of this tableau is therefore e i T = e i B 1 [ b A ] .

We right-multiply the row update formula from part (d) by the matrix [ b A ] :

e i B ¯ 1 [ b A ] = ( e i B 1 g i e l B 1 ) [ b A ] .

Distributing the product on the right-hand side gives:

e i B ¯ 1 [ b A ] = e i B 1 [ b A ] g i e l B 1 [ b A ] .

This can be rewritten in terms of tableau rows as:

new_row i = old_row i g i old_row l .

Interpretation: This equation shows that each row of the new simplex tableau is obtained by subtracting a multiple ( g i ) of the old pivot row from the corresponding old row. This is exactly the standard procedure for pivoting in the full tableau implementation:

  • For the pivot row ( i = l ), we have g l = u l 1 u l . The update is new_row l = old_row l u l 1 u l old_row l = 1 u l old_row l . This is equivalent to scaling the pivot row to make the pivot element equal to 1.
  • For any other row ( i l ), we have g i = u i u l . The update is new_row i = old_row i u i u l old_row l . This is equivalent to using the scaled pivot row to eliminate the other non-zero entries in the pivot column. □
User profile picture
2025-10-19 20:13
Comments