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.
250{
257 {
259 for (
i=0;
i<
mn;
i++) (*iv)[
i] = (*a)[
i] + (*b)[
i];
261 {
263 {
265 }
266 else
267 {
269 }
270 }
271 return iv;
272 }
275 for (
i=0;
i<
mn*a->
cols();
i++) { (*iv)[
i] += (*b)[
i]; }
276 return iv;
277}
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.
280{
283 {
290 for(
i=
b->rows()+
s-1;
i>=
s;
i--)
291 (*iv)[
i] += (*b)[
i-
s];
292 return iv;
293 }
295}
const CanonicalForm int s
◆ ivColPivot()
Definition at line 484 of file intvec.cc.
485{
486 int rpiv;
487
490 for (rpiv=ready+1;rpiv<=
all;rpiv++)
491 {
493 return rpiv;
494 }
495 return 0;
496}
#define IMATELEM(M, I, J)
◆ ivConcat()
Definition at line 822 of file intvec.cc.
823{
827
830 {
833 }
834 for (
i=1;
i<=
b->rows();
i++)
835 {
836 for(
j=1;
j<=
b->cols();
j++)
838 }
840}
◆ ivCondNumber()
Definition at line 764 of file intvec.cc.
765{
767
769 {
770 for (
i=
w->rows()-1;
i>=0;
i--)
771 {
773 }
775 {
776 for (
i=
w->rows()-1;
i>=0;
i--)
777 {
779 }
780 }
782 }
783 else
784 {
785 for (
i=
w->rows()-1;
i>=0;
i--)
786 {
787 if ((*
w)[
i]<0)
return -1;
788 }
789 for (
i=
w->rows()-1;
i>=0;
i--)
790 {
792 }
794 }
795}
◆ ivContent()
Definition at line 797 of file intvec.cc.
798{
801
803 {
807 }
811 {
816 }
817 for (
i=
w->rows()-1;
i>=0;
i--)
819}
static int ivGcd(int, int)
◆ ivFreeRow()
Definition at line 522 of file intvec.cc.
523{
525
527 {
530 }
531}
◆ ivGcd()
Definition at line 648 of file intvec.cc.
649{
651
652 if (a<0) a=-a;
655 {
659 }
661 {
665 }
666 return a;
667}
◆ ivKernFromRow()
Definition at line 613 of file intvec.cc.
615{
616 int piv, cp,
g,
i,
j,
k,
s;
617
618 for (
i=c;
i>(*perm)[r];
i--)
619 {
622 {
628 {
632 {
635 }
640 }
641 }
644 pos--;
645 }
646}
static void ivRowContent(intvec *, int, int)
static void ivNegRow(intvec *, int)
◆ ivL1Norm()
Definition at line 749 of file intvec.cc.
750{
752
753 for (
i=
w->rows()-1;
i>=0;
i--)
754 {
758 else
760 }
762}
◆ ivMult()
Definition at line 349 of file intvec.cc.
350{
353 rb =
b->rows(),
cb =
b->cols();
358 {
360 {
365 }
366 }
367 return iv;
368}
◆ ivNegRow()
◆ ivOptimizeKern()
Definition at line 669 of file intvec.cc.
670{
673
675 Warn(
" %d linear independent solutions\n",r);
677 {
679 {
681 }
682 }
684 if (r<11)
685 {
689 }
691}
static void ivOptRecursive(intvec *, intvec *, intvec *, int &, int &, int)
static int ivL1Norm(intvec *)
static void ivContent(intvec *)
static int ivCondNumber(intvec *, int)
◆ ivOptRecursive()
Definition at line 693 of file intvec.cc.
695{
698
700 d=96/(d*d);
701 if (d<3) d=3;
704 else
707 {
708 for(
k=
h->rows()-1;
k>=0;
k--)
710 if(pos>1)
712 else
714 }
716 if (pos>1)
720}
static void ivOptSolve(intvec *, intvec *, int &, int &)
◆ ivOptSolve()
Definition at line 722 of file intvec.cc.
723{
725
728 {
732 {
734 for(
k=
w->rows()-1;
k>=0;
k--)
736 }
737 return;
738 }
740 {
744 for(
k=
w->rows()-1;
k>=0;
k--)
746 }
747}
◆ ivReduce()
Definition at line 533 of file intvec.cc.
535{
538
540 {
544 {
546 m1 = piv;
550 {
553 }
555 {
558 }
560 }
561 }
562}
◆ ivRowContent()
Definition at line 589 of file intvec.cc.
590{
593
595 {
599 }
603 {
608 }
611}
◆ ivSaveRow()
◆ ivSetRow()
◆ ivSolveKern()
Definition at line 442 of file intvec.cc.
443{
449 int c, cp, r, t;
450
452 c = 1;
453 for (r=1;r<=
dimtr;r++)
454 {
456 (*perm)[r] = c;
457 c++;
458 }
459 c = d;
460 for (r=
dimtr;r>0;r--)
461 {
462 cp = (*perm)[r];
463 if (cp!=c)
464 {
466 t -= (c-cp);
467 if (t==0)
468 break;
469 c = cp-1;
470 }
471 else
472 c--;
473 }
476 else
479 delete perm;
481}
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.
298{
305 {
307 for (
i=0;
i<
mn;
i++) (*iv)[
i] = (*a)[
i] - (*b)[
i];
309 {
311 {
313 }
314 else
315 {
316 for(
i=
mn;
i<
ma;
i++) (*iv)[
i] = -(*b)[
i];
317 }
318 }
319 return iv;
320 }
323 for (
i=0;
i<
mn*a->
cols();
i++) { (*iv)[
i] -= (*b)[
i]; }
324 return iv;
325}
◆ ivTrace()
◆ ivTranp()
Definition at line 327 of file intvec.cc.
328{
332 {
334 (*iv)[
j*r+
i] = (*o)[
i*c+
j];
335 }
336 return iv;
337}
◆ ivTriangIntern()
Definition at line 404 of file intvec.cc.
405{
407 int ia=ready,
ie=
all;
408
409 do
410 {
412 do
413 {
416 } while (rpiv==0);
417 if (rpiv>ia)
418 {
420 {
425 }
426 ia++;
427 if (ia==
imat->cols())
428 {
429 ready = ia;
431 return;
432 }
433 }
437 ready = ia;
439}
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()
Definition at line 564 of file intvec.cc.
566{
568
570 for (
j=ready+1;
j<=
all;
j++)
571 {
573 {
575 {
578 {
581 }
582 break;
583 }
584 }
585 }
587}