⍝ Determinant of square matrix:
det 2 2⍴2 3 4 5
¯2
det 1 1⍴3
3
det 0 0⍴7
1
hil←{÷1+∘.+⍨(⍳⍵)-⎕io} ⍝ Order-⍵ Hilbert matrix.
det hil 5
3.749295133E¯12
det_rh4a←{⎕io ⎕ml←0 ⍝ Gauss-Jordan
⍺←1 ⍝ product of diagonal entries so far
0=n←⊃⍴⍵:⍺ ⍝ answer for 0-by-0
p←{⍵⍳⌈/⍵}|⍵[;0] ⍝ index of pivot row
p=n:0 ⍝ ⍵ is singular if column is all 0
k←⍳n ⍝ row indices
k[⌽i]←k[i←(×p)/p,0] ⍝ interchange p and 0, if different
(⍺×dׯ1*×p)∇ ⍵[1↓k;1↓⍳n]-(⍵[1↓k;0]÷d←⍵[⊃k;0])∘.×⍵[⊃k;1↓⍳n]
}
det_rh4a hil 5
3.749295133E¯12
detG←{ ⍝ Gaussian determinant.
(⎕IO ⎕ML)←1 3 ⋄ r←⍴⍵
1≥×/r:↑⍵ ⋄ 2≠⍴r:0 ⋄ ≠/r:0 ⍝ check for trivial cases
1{ ⍝ inner loop
2>↑⍴⍵:↑⍺×⍵ ⍝ end? -> result
(m a c)←{ ⍝ calculate matrix, anchor & coeff
0≠1⍴⍵:⍵(1⍴⍵)1 ⍝ default: original matrix
z←⍵ ⋄ j←{⍵⍳⌈/⍵}|z[;1] ⍝ look for 1st non-zero
z[1,j;]←z[j,1;] ⍝ reorder matrix
z(1⍴z)¯1 ⍝ NB. coeff=¯1
}⍵
a=0:0 ⍝ row of zeroes..
(⍺×a×c)∇ 1 1↓m-m[;1]∘.×m[1;]÷a ⍝ re-curses!
}⍵
}
detG hil 5
3.749295133E¯12
det_mv←{ ⍝ Matrix determinant, based on Mahajan-Vinay algorithm:
⍝| Meena Mahajan and V Vinay.
⍝| Determinant: Combinatorics, Algorithms, and Complexity
⍝| http://www.imsc.ernet.in/~meena/publ.html
(⎕IO ⎕ML)←0 3 ⋄ mat←⍵ ⋄ n←↑⍴mat
V←(2,3/n)⍴0 ⋄ V[2|n;;;0]←1
↑{i←⍵
↑{v←⍵
↑{u←⍵ ⋄ n=⍵+1:0
↑{
V[0;u;⍵;i+1]+←V[0;u;v;i]×mat[v;⍵]
V[1;⍵;⍵;i+1]+←V[0;u;v;i]×mat[v;u]
V[1;u;⍵;i+1]+←V[1;u;v;i]×mat[v;⍵]
V[0;⍵;⍵;i+1]+←V[1;u;v;i]×mat[v;u]
0
}¨(⍵+1)↓⍳n
}¨⍳⍵+1
}¨⍳n
}¨⍳n-1:
+/{-+/mat[⍵;⍳⍵+1]×-⌿V[;⍳⍵+1;⍵;n-1]}¨⍳n
}
det_mv hil 4
1.653439153E¯7
detriment←{∇{⍵+(¯1*+/∧\⍺)×⍵⍵[⎕io;⍺⍳0]×⍺⍺ ⍺/1 0↓⍵⍵}⍵/(↓≠/¨⍳⍴⍵),0 0≡⍴⍵}
detriment hil 4
1.653439153E¯7
dd ← 2 2⍴ 0 1, 1 0
det dd
¯1
det_rh4a dd
¯1
det_mv dd
¯1
detG dd
¯1
detriment dd
¯1
⍝∇ det
Back to: code
Back to: Workspaces