Output from imlrank.sas

Source
0 Graphs

NOTE: Capture of log output started.
NOTE: %INCLUDE (level 1) file n:\psy6140\examples\iml\imlrank.sas is file
      n:\psy6140\examples\iml\imlrank.sas.
898  +title 'IMLRANK: Matrix rank and linear independence';
899  +proc iml;
IML Ready
900  +   *-- Define a function module to find the rank of a matrix;
901  +start r(A);
902  +    reset noprint;
903  +   *-- rank of a matrix (cant call it rank, since that name
904  +       is used for sorting);
905  +   *-- rank = number of nonzero rows/cols in echelon form;
906  +   e = echelon(A);
907  +   do i=1 to nrow(e);
907  +                        *-- Find rows which are not all zero;
908  +      if any( e[i,] <> 0 ) then rows = rows || i;
909  +      end;
910  +   e = e[rows,];
910  +                        *-- Keep only non-zero rows;
911  +   do i=1 to ncol(e);
911  +                        *-- Find cols which are not all zero;
912  +      if any( e[,i] <> 0 ) then cols = cols || i;
913  +      end;
914  +   e = e[,cols];
914  +                        *-- Keep only non-zero cols;
915  +   reset print;
916  +   return( min( nrow(e), ncol(e)) );
917  +   finish;
NOTE: Module R defined.
918  +
919  +   reset print log fuzz;
920  +* 1. MATRIX RANK AND LINEAR INDEPENDENCE;
921  +*    A set of vectors is linearly DEPENDENT if there are scalars;
922  +*    (not all =0) which give a linear combination = zero vector.;
923  +X1 = {1 3 5};
                X1            1 row       3 cols    (numeric)

                                1         3         5

924  +X2 = {0 1 2};
                X2            1 row       3 cols    (numeric)

                                0         1         2

925  +X3 = {-1 4 9};
                X3            1 row       3 cols    (numeric)

                               -1         4         9

926  +X4 = {2 2 2};
                X4            1 row       3 cols    (numeric)

                                2         2         2

927  +comb = (2#X1) + (-4#X2) + (0#X3) + -1#X4;
                COMB          1 row       3 cols    (numeric)

                                0         0         0

928  +* X3, X4 are linear combinations of X1, X2;
929  +print (t(X3)) '=' (t(-X1)) '+' (t(7#X2));
                       #TEM1001    #TEM1003    #TEM1005
                             -1 =        -1 +         0
                              4          -3           7
                              9          -5          14
930  +print (t(X4)) '=' (t(2#X1)) '+' (t(-4#X2));
                       #TEM1001    #TEM1003    #TEM1006
                              2 =         2 +         0
                              2           6          -4
                              2          10          -8
931  +* only two of x1, x2, x3, x4 are linearly independent;
932  +X = t(X1) || t(X2) || t(X3)  || t(X4);
                X             3 rows      4 cols    (numeric)

                           1         0        -1         2
                           3         1         4         2
                           5         2         9         2

933  +r = r(X);
                R             1 row       1 col     (numeric)

                                          2

934  +* rank = number of nonzero rows in echelon form;
935  +r = echelon(X);
                R             3 rows      4 cols    (numeric)

                           1         0        -1         2
                           0         1         7        -4
                           0         0         0         0

936  +* change last element so X4 not dependent;
937  +X[3,4] = 4;
                X             3 rows      4 cols    (numeric)

                           1         0        -1         2
                           3         1         4         2
                           5         2         9         4

938  +r = r(X);
                R             1 row       1 col     (numeric)

                                          3

939  +r = echelon(X);
                R             3 rows      4 cols    (numeric)

                           1         0        -1         0
                           0         1         7         0
                           0         0         0         1




941  +* -----------------------------------------------------;
942  +* 2. MATRIX RANK BY ELEMENTARY ROW OPERATIONS;
943  +*    Use elementary row ops to reduce matrix to echelon
944  +*    form. Zero rows/cols do not contribute to rank.;
945  +* -----------------------------------------------------;
946  +A = {4 1 8, 5 2 7,  5 1 11,  8 3 12};
                A             4 rows      3 cols    (numeric)

                                4         1         8
                                5         2         7
                                5         1        11
                                8         3        12

947  +SAVE = A;
                SAVE          4 rows      3 cols    (numeric)

                                4         1         8
                                5         2         7
                                5         1        11
                                8         3        12

948  +* ROW 4 - 2#ROW 1;
949  +A[4,] = A[4,] - 2#A[1,];
                A             4 rows      3 cols    (numeric)

                                4         1         8
                                5         2         7
                                5         1        11
                                0         1        -4

950  +*  Each elementary row operation is equivalent to premultiplication
951  +   by an identity matrix with the same operation applied to its rows;
952  +T = I(4);
                T             4 rows      4 cols    (numeric)

                           1         0         0         0
                           0         1         0         0
                           0         0         1         0
                           0         0         0         1

953  +T[4,] = T[4,] - 2#T[1,];
                T             4 rows      4 cols    (numeric)

                           1         0         0         0
                           0         1         0         0
                           0         0         1         0
                          -2         0         0         1

954  +A = T * SAVE;
                A             4 rows      3 cols    (numeric)

                                4         1         8
                                5         2         7
                                5         1        11
                                0         1        -4

955  +   * ROW 3 - ROW 2;
956  +A[3,] = A[3,] - A[2,];
                A             4 rows      3 cols    (numeric)

                                4         1         8
                                5         2         7
                                0        -1         4
                                0         1        -4

957  +   * .25 # ROW 1;
958  +A[1,] = .25 # A[1,];
                A             4 rows      3 cols    (numeric)

                                1      0.25         2
                                5         2         7
                                0        -1         4
                                0         1        -4

959  +   * ROW 2 - 5#ROW 1;
960  +A[2,] = A[2,] - 5#A[1,];
                A             4 rows      3 cols    (numeric)

                                1      0.25         2
                                0      0.75        -3
                                0        -1         4
                                0         1        -4

961  +   * ROW 4 + 1#ROW 3;
962  +A[4,] = A[4,] + A[3,];
                A             4 rows      3 cols    (numeric)

                                1      0.25         2
                                0      0.75        -3
                                0        -1         4
                                0         0         0

963  +   * 1.33#ROW 2;
964  +A[2,] = (4/3) # A[2,];
                A             4 rows      3 cols    (numeric)

                                1      0.25         2
                                0         1        -4
                                0        -1         4
                                0         0         0

965  +   * ROW 2 + ROW 3;
966  +A[2,] = A[2,] + A[3,];
                A             4 rows      3 cols    (numeric)

                                1      0.25         2
                                0         0         0
                                0        -1         4
                                0         0         0

967  +   *-- RANK = number of nonzero rows/cols;
968  +r = r(A);
                R             1 row       1 col     (numeric)

                                          2

969  +quit;
Exiting IML.
NOTE: The PROCEDURE IML used 0.22 seconds.

970  +
NOTE: %INCLUDE (level 1) ending.