55 lines
825 B
CoffeeScript
55 lines
825 B
CoffeeScript
### adj =====================================================================
|
|
|
|
Tags
|
|
----
|
|
scripting, JS, internal, treenode, general concept
|
|
|
|
Parameters
|
|
----------
|
|
m
|
|
|
|
General description
|
|
-------------------
|
|
Returns the adjunct of matrix m. The inverse of m is equal to adj(m) divided by det(m).
|
|
|
|
###
|
|
|
|
|
|
Eval_adj = ->
|
|
push(cadr(p1))
|
|
Eval()
|
|
adj()
|
|
|
|
adj = ->
|
|
i = 0
|
|
j = 0
|
|
n = 0
|
|
|
|
save()
|
|
|
|
p1 = pop()
|
|
|
|
if (istensor(p1) && p1.tensor.ndim == 2 && p1.tensor.dim[0] == p1.tensor.dim[1])
|
|
doNothing = 1
|
|
else
|
|
stop("adj: square matrix expected")
|
|
|
|
n = p1.tensor.dim[0]
|
|
|
|
p2 = alloc_tensor(n * n)
|
|
|
|
p2.tensor.ndim = 2
|
|
p2.tensor.dim[0] = n
|
|
p2.tensor.dim[1] = n
|
|
|
|
for i in [0...n]
|
|
for j in [0...n]
|
|
cofactor(p1, n, i, j)
|
|
p2.tensor.elem[n * j + i] = pop(); # transpose
|
|
|
|
push(p2)
|
|
|
|
restore()
|
|
|
|
|