38 lines
893 B
Nim
38 lines
893 B
Nim
import sequtils, permutationsswap
|
|
|
|
type Matrix[M,N: static[int]] = array[M, array[N, float]]
|
|
|
|
proc det[M,N](a: Matrix[M,N]): float =
|
|
let n = toSeq 0..a.high
|
|
for sigma, sign in n.permutations:
|
|
var x = sign.float
|
|
for i in n: x *= a[i][sigma[i]]
|
|
result += x
|
|
|
|
proc perm[M,N](a: Matrix[M,N]): float =
|
|
let n = toSeq 0..a.high
|
|
for sigma, sign in n.permutations:
|
|
var x = 1.0
|
|
for i in n: x *= a[i][sigma[i]]
|
|
result += x
|
|
|
|
const
|
|
a = [ [1.0, 2.0]
|
|
, [3.0, 4.0]
|
|
]
|
|
b = [ [ 1.0, 2, 3, 4]
|
|
, [ 4.0, 5, 6, 7]
|
|
, [ 7.0, 8, 9, 10]
|
|
, [10.0, 11, 12, 13]
|
|
]
|
|
c = [ [ 0.0, 1, 2, 3, 4]
|
|
, [ 5.0, 6, 7, 8, 9]
|
|
, [10.0, 11, 12, 13, 14]
|
|
, [15.0, 16, 17, 18, 19]
|
|
, [20.0, 21, 22, 23, 24]
|
|
]
|
|
|
|
echo "perm: ", a.perm, " det: ", a.det
|
|
echo "perm: ", b.perm, " det: ", b.det
|
|
echo "perm: ", c.perm, " det: ", c.det
|