Go to the source code of this file.
|
intvec * | ivAdd (intvec *a, intvec *b) |
|
intvec * | ivAddShift (intvec *a, intvec *b, int s) |
|
intvec * | ivSub (intvec *a, intvec *b) |
|
intvec * | ivTranp (intvec *o) |
|
int | ivTrace (intvec *o) |
|
intvec * | ivMult (intvec *a, intvec *b) |
|
static int | ivColPivot (intvec *, int, int, int, int) |
|
static void | ivNegRow (intvec *, int) |
|
static void | ivSaveRow (intvec *, int) |
|
static void | ivSetRow (intvec *, int, int) |
|
static void | ivFreeRow (intvec *, int, int) |
|
static void | ivReduce (intvec *, int, int, int, int) |
|
static void | ivZeroElim (intvec *, int, int, int &) |
|
static void | ivRowContent (intvec *, int, int) |
|
static void | ivKernFromRow (intvec *, intvec *, intvec *, int, int, int) |
|
static intvec * | ivOptimizeKern (intvec *) |
|
static int | ivGcd (int, int) |
|
static void | ivOptRecursive (intvec *, intvec *, intvec *, int &, int &, int) |
|
static void | ivOptSolve (intvec *, intvec *, int &, int &) |
|
static void | ivContent (intvec *) |
|
static int | ivL1Norm (intvec *) |
|
static int | ivCondNumber (intvec *, int) |
|
void | ivTriangIntern (intvec *imat, int &ready, int &all) |
|
intvec * | ivSolveKern (intvec *imat, int dimtr) |
|
intvec * | ivConcat (intvec *a, intvec *b) |
|
◆ INTVEC_CC
◆ ivAdd()
Definition at line 249 of file intvec.cc.
259 for (
i=0;
i<mn;
i++) (*iv)[
i] = (*a)[
i] + (*b)[
i];
264 for(
i=mn;
i<ma;
i++) (*iv)[
i] = (*a)[
i];
268 for(
i=mn;
i<ma;
i++) (*iv)[
i] = (*b)[
i];
273 if (mn != ma)
return NULL;
275 for (
i=0;
i<mn*a->
cols();
i++) { (*iv)[
i] += (*b)[
i]; }
static int si_max(const int a, const int b)
static int si_min(const int a, const int b)
◆ ivAddShift()
Definition at line 279 of file intvec.cc.
290 for(
i=
b->rows()+
s-1;
i>=
s;
i--)
291 (*iv)[
i] += (*b)[
i-
s];
const CanonicalForm int s
◆ ivColPivot()
static int ivColPivot |
( |
intvec * |
imat, |
|
|
int |
colpos, |
|
|
int |
rowpos, |
|
|
int |
ready, |
|
|
int |
all |
|
) |
| |
|
static |
Definition at line 484 of file intvec.cc.
488 if (
IMATELEM(*imat,rowpos,colpos)!=0)
490 for (rpiv=ready+1;rpiv<=all;rpiv++)
#define IMATELEM(M, I, J)
◆ ivConcat()
Definition at line 822 of file intvec.cc.
825 int c = ac +
b->cols();
int r =
si_max(a->
rows(),
b->rows());
834 for (
i=1;
i<=
b->rows();
i++)
836 for(
j=1;
j<=
b->cols();
j++)
◆ ivCondNumber()
static int ivCondNumber |
( |
intvec * |
w, |
|
|
int |
l |
|
) |
| |
|
static |
Definition at line 764 of file intvec.cc.
770 for (
i=
w->rows()-1;
i>=0;
i--)
776 for (
i=
w->rows()-1;
i>=0;
i--)
785 for (
i=
w->rows()-1;
i>=0;
i--)
787 if ((*
w)[
i]<0)
return -1;
789 for (
i=
w->rows()-1;
i>=0;
i--)
◆ ivContent()
static void ivContent |
( |
intvec * |
w | ) |
|
|
static |
Definition at line 797 of file intvec.cc.
808 if (tgcd<0) tgcd = -tgcd;
813 if (
m!=0) tgcd=
ivGcd(tgcd,
m);
817 for (
i=
w->rows()-1;
i>=0;
i--)
static int ivGcd(int, int)
◆ ivFreeRow()
static void ivFreeRow |
( |
intvec * |
imat, |
|
|
int |
rowpos, |
|
|
int |
rpiv |
|
) |
| |
|
static |
◆ ivGcd()
static int ivGcd |
( |
int |
a, |
|
|
int |
b |
|
) |
| |
|
static |
◆ ivKernFromRow()
static void ivKernFromRow |
( |
intvec * |
kern, |
|
|
intvec * |
imat, |
|
|
intvec * |
perm, |
|
|
int |
pos, |
|
|
int |
r, |
|
|
int |
c |
|
) |
| |
|
static |
Definition at line 613 of file intvec.cc.
616 int piv, cp,
g,
i,
j,
k,
s;
618 for (
i=c;
i>(*perm)[r];
i--)
static void ivRowContent(intvec *, int, int)
static void ivNegRow(intvec *, int)
◆ ivL1Norm()
static int ivL1Norm |
( |
intvec * |
w | ) |
|
|
static |
◆ ivMult()
Definition at line 349 of file intvec.cc.
353 rb =
b->rows(), cb =
b->cols();
355 if (ca != rb)
return NULL;
356 iv =
new intvec(ra, cb, 0);
363 sum += (*a)[
i*ca+
k]*(*b)[
k*cb+
j];
◆ ivNegRow()
static void ivNegRow |
( |
intvec * |
imat, |
|
|
int |
rpiv |
|
) |
| |
|
static |
◆ ivOptimizeKern()
Definition at line 669 of file intvec.cc.
675 Warn(
" %d linear independent solutions\n",r);
static void ivOptRecursive(intvec *, intvec *, intvec *, int &, int &, int)
static int ivL1Norm(intvec *)
static void ivContent(intvec *)
static int ivCondNumber(intvec *, int)
◆ ivOptRecursive()
static void ivOptRecursive |
( |
intvec * |
res, |
|
|
intvec * |
w, |
|
|
intvec * |
kern, |
|
|
int & |
l, |
|
|
int & |
j, |
|
|
int |
pos |
|
) |
| |
|
static |
Definition at line 693 of file intvec.cc.
708 for(
k=
h->rows()-1;
k>=0;
k--)
static void ivOptSolve(intvec *, intvec *, int &, int &)
◆ ivOptSolve()
static void ivOptSolve |
( |
intvec * |
res, |
|
|
intvec * |
w, |
|
|
int & |
l, |
|
|
int & |
j |
|
) |
| |
|
static |
Definition at line 722 of file intvec.cc.
734 for(
k=
w->rows()-1;
k>=0;
k--)
744 for(
k=
w->rows()-1;
k>=0;
k--)
◆ ivReduce()
static void ivReduce |
( |
intvec * |
imat, |
|
|
int |
rpiv, |
|
|
int |
colpos, |
|
|
int |
ready, |
|
|
int |
all |
|
) |
| |
|
static |
Definition at line 533 of file intvec.cc.
536 int tgcd, ce, m1, m2,
j,
i;
537 int piv =
IMATELEM(*imat,rpiv,colpos);
539 for (
j=all;
j>ready;
j--)
548 tgcd =
ivGcd(m1, m2);
554 for (
i=imat->
cols();
i>colpos;
i--)
◆ ivRowContent()
static void ivRowContent |
( |
intvec * |
imat, |
|
|
int |
rowpos, |
|
|
int |
colpos |
|
) |
| |
|
static |
Definition at line 589 of file intvec.cc.
598 if (
i<colpos)
return;
600 if (tgcd<0) tgcd = -tgcd;
605 if (
m!=0) tgcd=
ivGcd(tgcd,
m);
609 for (
i=imat->
cols();
i>=colpos;
i--)
◆ ivSaveRow()
static void ivSaveRow |
( |
intvec * |
imat, |
|
|
int |
rpiv |
|
) |
| |
|
static |
◆ ivSetRow()
static void ivSetRow |
( |
intvec * |
imat, |
|
|
int |
rowpos, |
|
|
int |
colpos |
|
) |
| |
|
static |
◆ ivSolveKern()
Definition at line 442 of file intvec.cc.
453 for (r=1;r<=dimtr;r++)
460 for (r=dimtr;r>0;r--)
static intvec * ivOptimizeKern(intvec *)
static void ivKernFromRow(intvec *, intvec *, intvec *, int, int, int)
intvec * ivTranp(intvec *o)
◆ ivSub()
Definition at line 297 of file intvec.cc.
307 for (
i=0;
i<mn;
i++) (*iv)[
i] = (*a)[
i] - (*b)[
i];
312 for(
i=mn;
i<ma;
i++) (*iv)[
i] = (*a)[
i];
316 for(
i=mn;
i<ma;
i++) (*iv)[
i] = -(*b)[
i];
321 if (mn != ma)
return NULL;
323 for (
i=0;
i<mn*a->
cols();
i++) { (*iv)[
i] -= (*b)[
i]; }
◆ ivTrace()
◆ ivTranp()
◆ ivTriangIntern()
void ivTriangIntern |
( |
intvec * |
imat, |
|
|
int & |
ready, |
|
|
int & |
all |
|
) |
| |
Definition at line 404 of file intvec.cc.
406 int rpiv, colpos=0, rowpos=0;
407 int ia=ready, ie=all;
415 rpiv =
ivColPivot(imat, colpos, rowpos, ia, ie);
427 if (ia==imat->
cols())
434 ivReduce(imat, rpiv, colpos, ia, ie);
static int ivColPivot(intvec *, int, int, int, int)
static void ivSetRow(intvec *, int, int)
static void ivFreeRow(intvec *, int, int)
static void ivZeroElim(intvec *, int, int, int &)
static void ivSaveRow(intvec *, int)
static void ivReduce(intvec *, int, int, int, int)
◆ ivZeroElim()
static void ivZeroElim |
( |
intvec * |
imat, |
|
|
int |
colpos, |
|
|
int |
ready, |
|
|
int & |
all |
|
) |
| |
|
static |
Definition at line 564 of file intvec.cc.
570 for (
j=ready+1;
j<=all;
j++)
572 for (
i=imat->
cols();
i>colpos;
i--)
579 for (
l=imat->
cols();
l>colpos;
l--)