Output from imldet2.sas

Source
0 Graphs

```NOTE: Capture of log output started.
```
```NOTE: %INCLUDE (level 1) file n:\psy6140\examples\iml\imldet2.sas is file
n:\psy6140\examples\iml\imldet2.sas.```
```305  +title 'IMLDET2:  Evaluation of determinants';
306  +proc iml;```
`IML Ready`
```307  +   reset print log;
308  +
309  + *--define a function module to compute cofactor;
310  +start cofactor(A,i,j);
311  +   reset noprint;
312  +   size = nrow(A);
312  +                                  *size of matrix;
313  +   rows = loc( (1:size) ^= i );
313  +                                  *delete row i;
314  +   cols = loc( (1:size) ^= j );
314  +                                  *delete col j;
315  +   minor = det( A[rows,cols] );
316  +   reset print;
317  +   return ( ((-1)##(i+j)) # minor );
318  +finish;```
`NOTE: Module COFACTOR defined.`
```319  +
320  + *-- 1. det by cofactor expansion;
321  +    A ={4 2 1, 5 6 7, 1 0 3};```
```                A             3 rows      3 cols    (numeric)

4         2         1
5         6         7
1         0         3

```
`322  +    r = det(A);`
```                R             1 row       1 col     (numeric)

50

```
```323  +    *-- cofactors of row 1 elements;
324  +    print (cofactor(A,1,1)) (A[{2 3},{2 3}]);```
```                         #TEM1001  #TEM1002
18         6         7
0         3
```
`325  +    print (cofactor(A,1,2)) (A[{2 3},{1 3}]);`
```                         #TEM1001  #TEM1002
-8         5         7
1         3
```
`326  +    print (cofactor(A,1,3)) (A[{2 3},{1 2}]);`
```                         #TEM1001  #TEM1002
-6         5         6
1         0
```
```327  +    *-- det = product of row with cofactors;
328  +    r = A[1,] * {18, -8, -6};```
```                R             1 row       1 col     (numeric)

50

```
```329  +
330  + *-- 2. det by Gaussian elimination (pivoting);
331  +    *     [cf. Green and Carroll, table 2.2];
332  +    M = {2 3 1 2,  4 2 3 4,  1 4 2 2,  3 1 0 1};```
```                M             4 rows      4 cols    (numeric)

2         3         1         2
4         2         3         4
1         4         2         2
3         1         0         1

```
`333  +    d = det(M);`
```                D             1 row       1 col     (numeric)

15

```
```334  +
335  +    *-- pivot on m[1,1] -> det = product of pivots;
336  +    D=M[1,1];```
```                D             1 row       1 col     (numeric)

2

```
```337  +
338  +    *-- Reduce row, col 1 to 0;
339  +    M[1,] = M[1,] / M[1,1];```
```                M             4 rows      4 cols    (numeric)

1       1.5       0.5         1
4         2         3         4
1         4         2         2
3         1         0         1

```
`340  +    M = M - M[,1] *  M[1,];`
```                M             4 rows      4 cols    (numeric)

0         0         0         0
0        -4         1         0
0       2.5       1.5         1
0      -3.5      -1.5        -2

```
```341  +    *-- Drop first row and column;
342  +    M = M[{2 3 4},{2 3 4}];```
```                M             3 rows      3 cols    (numeric)

-4         1         0
2.5       1.5         1
-3.5      -1.5        -2

```
```343  +    *-- Accumulate product of pivots;
344  +    D = D # M[1,1];```
```                D             1 row       1 col     (numeric)

-8

```
```345  +
346  +    *--Repeat, reducing new row, col 1 to 0;
347  +    M[1,] = M[1,] / M[1,1];```
```                M             3 rows      3 cols    (numeric)

1     -0.25         0
2.5       1.5         1
-3.5      -1.5        -2

```
`348  +    M = M - M[,1] *  M[1,];`
```                M             3 rows      3 cols    (numeric)

0         0         0
0     2.125         1
0    -2.375        -2

```
`349  +    M = M[{2 3},{2 3}];`
```                M             2 rows      2 cols    (numeric)

2.125         1
-2.375        -2

```
`350  +    D = D # M[1,1];`
```                D             1 row       1 col     (numeric)

-17

```
```351  +
352  +    *--Repeat once more. d = det(m);
353  +    M[1,] = M[1,] / M[1,1];```
```                M             2 rows      2 cols    (numeric)

1 0.4705882
-2.375        -2

```
`354  +    M = M - M[,1] *  M[1,];`
```                M             2 rows      2 cols    (numeric)

0         0
0 -0.882353

```
`355  +    M = M[2,2];`
```                M             1 row       1 col     (numeric)

-0.882353

```
`356  +    D = D # M[1,1];`
```                D             1 row       1 col     (numeric)

15

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

```
`358  +`
`NOTE: %INCLUDE (level 1) ending.`