Little fix after the last commit (mostly a git fail)
[eigenmath-fx.git] / cofactor.cpp
blob6144de81fa5a108f5b0fa4b523d4f7cc52b64db9
1 // Cofactor of a matrix component.
3 #include "stdafx.h"
4 #include "defs.h"
6 void
7 eval_cofactor(void)
9 int i, j, n;
10 push(cadr(p1));
11 eval();
12 p2 = pop();
13 if (istensor(p2) && p2->u.tensor->ndim == 2 && p2->u.tensor->dim[0] == p2->u.tensor->dim[1])
15 else
16 stop("cofactor: 1st arg: square matrix expected");
17 n = p2->u.tensor->dim[0];
18 push(caddr(p1));
19 eval();
20 i = pop_integer();
21 if (i < 1 || i > n)
22 stop("cofactor: 2nd arg: row index expected");
23 push(cadddr(p1));
24 eval();
25 j = pop_integer();
26 if (j < 1 || j > n)
27 stop("cofactor: 3rd arg: column index expected");
28 cofactor(p2, n, i - 1, j - 1);
31 void
32 cofactor(U *p, int n, int row, int col)
34 int i, j;
35 for (i = 0; i < n; i++)
36 for (j = 0; j < n; j++)
37 if (i != row && j != col)
38 push(p->u.tensor->elem[n * i + j]);
39 determinant(n - 1);
40 if ((row + col) % 2)
41 negate();