-/* Calculate the projection of E sub k to the null space of B. */
-
-void
-lambda_matrix_project_to_null (lambda_matrix B, int rowsize,
- int colsize, int k, lambda_vector x)
-{
- lambda_matrix M1, M2, M3, I;
- int determinant;
-
- /* Compute c(I-B^T inv(B B^T) B) e sub k. */
-
- /* M1 is the transpose of B. */
- M1 = lambda_matrix_new (colsize, colsize);
- lambda_matrix_transpose (B, M1, rowsize, colsize);
-
- /* M2 = B * B^T */
- M2 = lambda_matrix_new (colsize, colsize);
- lambda_matrix_mult (B, M1, M2, rowsize, colsize, rowsize);
-
- /* M3 = inv(M2) */
- M3 = lambda_matrix_new (colsize, colsize);
- determinant = lambda_matrix_inverse (M2, M3, rowsize);
-
- /* M2 = B^T (inv(B B^T)) */
- lambda_matrix_mult (M1, M3, M2, colsize, rowsize, rowsize);
-
- /* M1 = B^T (inv(B B^T)) B */
- lambda_matrix_mult (M2, B, M1, colsize, rowsize, colsize);
- lambda_matrix_negate (M1, M1, colsize, colsize);
-
- I = lambda_matrix_new (colsize, colsize);
- lambda_matrix_id (I, colsize);
-
- lambda_matrix_add_mc (I, determinant, M1, 1, M2, colsize, colsize);
-
- lambda_matrix_get_column (M2, colsize, k - 1, x);
-
-}
-