1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | Eval_cofactor = ->
|
21 |
|
22 | i = 0
|
23 | j = 0
|
24 | n = 0
|
25 | push(cadr(p1))
|
26 | Eval()
|
27 | p2 = pop()
|
28 | if (istensor(p2) && p2.tensor.ndim == 2 && p2.tensor.dim[0] == p2.tensor.dim[1])
|
29 | doNothing = 1
|
30 | else
|
31 | stop("cofactor: 1st arg: square matrix expected")
|
32 | n = p2.tensor.dim[0]
|
33 | push(caddr(p1))
|
34 | Eval()
|
35 | i = pop_integer()
|
36 | if (i < 1 || i > n)
|
37 | stop("cofactor: 2nd arg: row index expected")
|
38 | push(cadddr(p1))
|
39 | Eval()
|
40 | j = pop_integer()
|
41 | if (j < 1 || j > n)
|
42 | stop("cofactor: 3rd arg: column index expected")
|
43 | cofactor(p2, n, i - 1, j - 1)
|
44 |
|
45 | cofactor = (p, n, row, col) ->
|
46 | i = 0
|
47 | j = 0
|
48 | for i in [0...n]
|
49 | for j in [0...n]
|
50 | if (i != row && j != col)
|
51 | push(p.tensor.elem[n * i + j])
|
52 | determinant(n - 1)
|
53 | if ((row + col) % 2)
|
54 | negate()
|
55 |
|
56 |
|
57 |
|