1 | ### adj =====================================================================
|
2 |
|
3 | Tags
|
4 | ----
|
5 | scripting, JS, internal, treenode, general concept
|
6 |
|
7 | Parameters
|
8 | ----------
|
9 | m
|
10 |
|
11 | General description
|
12 | -------------------
|
13 | Returns the adjunct of matrix m. The inverse of m is equal to adj(m) divided by det(m).
|
14 |
|
15 | ###
|
16 |
|
17 |
|
18 | Eval_adj = ->
|
19 | push(cadr(p1))
|
20 | Eval()
|
21 | adj()
|
22 |
|
23 | adj = ->
|
24 | i = 0
|
25 | j = 0
|
26 | n = 0
|
27 |
|
28 | save()
|
29 |
|
30 | p1 = pop()
|
31 |
|
32 | if (istensor(p1) && p1.tensor.ndim == 2 && p1.tensor.dim[0] == p1.tensor.dim[1])
|
33 | doNothing = 1
|
34 | else
|
35 | stop("adj: square matrix expected")
|
36 |
|
37 | n = p1.tensor.dim[0]
|
38 |
|
39 | p2 = alloc_tensor(n * n)
|
40 |
|
41 | p2.tensor.ndim = 2
|
42 | p2.tensor.dim[0] = n
|
43 | p2.tensor.dim[1] = n
|
44 |
|
45 | for i in [0...n]
|
46 | for j in [0...n]
|
47 | cofactor(p1, n, i, j)
|
48 | p2.tensor.elem[n * j + i] = pop(); # transpose
|
49 |
|
50 | push(p2)
|
51 |
|
52 | restore()
|
53 |
|
54 |
|