3 #include <polylib/polylib.h>
10 Matrix
*a
=NULL
, *b
=NULL
, *c
, *d
, *e
, *f
;
11 Polyhedron
*A
, *B
, *C
, *D
, *last
, *tmp
;
12 int i
, nbPol
, nbMat
, func
;
17 ((sscanf(s
, "D %d", &nbPol
)<1) && (sscanf(s
, "M %d", &nbMat
)<1)) )
20 for (i
=0, A
=last
=(Polyhedron
*)0; i
<nbPol
; i
++) {
22 tmp
= Constraints2Polyhedron(a
,600);
24 if (!last
) A
= last
= tmp
;
32 { a
= Matrix_Read(); }
37 ((sscanf(s
, "D %d", &nbPol
)<1) && (sscanf(s
, "M %d", &nbMat
)<1)) )
40 for (i
=0, B
=last
=(Polyhedron
*)0; i
<nbPol
; i
++) {
42 tmp
= Constraints2Polyhedron(b
,200);
44 if (!last
) B
= last
= tmp
;
52 { b
= Matrix_Read(); }
55 while ((*s
=='#') || (sscanf(s
, "F %d", &func
)<1))
60 C
= DomainUnion(A
, B
, 200);
61 D
= DomainConvex(C
, 200);
62 d
= Polyhedron2Constraints(D
);
63 Matrix_Print(stdout
,P_VALUE_FMT
,d
);
69 D
= DomainSimplify(A
, B
, 200);
70 d
= Polyhedron2Constraints(D
);
71 Matrix_Print(stdout
,P_VALUE_FMT
,d
);
76 a
= Polyhedron2Constraints(A
);
77 Matrix_Print(stdout
,P_VALUE_FMT
,a
);
78 b
= Polyhedron2Constraints(B
);
79 Matrix_Print(stdout
,P_VALUE_FMT
,b
);
82 a
= Polyhedron2Rays(A
);
83 Matrix_Print(stdout
,P_VALUE_FMT
,a
);
87 /* a = ec , da = c , ed = 1 */
88 right_hermite(a
,&c
,&d
,&e
);
89 Matrix_Print(stdout
,P_VALUE_FMT
,c
);
90 Matrix_Print(stdout
,P_VALUE_FMT
,d
);
91 Matrix_Print(stdout
,P_VALUE_FMT
,e
);
92 f
= Matrix_Alloc(e
->NbRows
,c
->NbColumns
);
93 Matrix_Product(e
,c
,f
);
94 Matrix_Print(stdout
,P_VALUE_FMT
,f
);
96 f
= Matrix_Alloc(d
->NbRows
,a
->NbColumns
);
97 Matrix_Product(d
,a
,f
);
98 Matrix_Print(stdout
,P_VALUE_FMT
,f
);
100 f
= Matrix_Alloc(e
->NbRows
, d
->NbColumns
);
101 Matrix_Product(e
,d
,f
);
102 Matrix_Print(stdout
,P_VALUE_FMT
,f
);
106 /* a = ce , ad = c , de = 1 */
107 left_hermite(a
,&c
,&d
,&e
);
108 Matrix_Print(stdout
,P_VALUE_FMT
,c
);
109 Matrix_Print(stdout
,P_VALUE_FMT
,d
);
110 Matrix_Print(stdout
,P_VALUE_FMT
,e
);
111 f
= Matrix_Alloc(c
->NbRows
, e
->NbColumns
);
112 Matrix_Product(c
,e
,f
);
113 Matrix_Print(stdout
,P_VALUE_FMT
,f
);
115 f
= Matrix_Alloc(a
->NbRows
, d
->NbColumns
);
116 Matrix_Product(a
,d
,f
);
117 Matrix_Print(stdout
,P_VALUE_FMT
,f
);
119 f
= Matrix_Alloc(d
->NbRows
, e
->NbColumns
);
120 Matrix_Product(d
,e
,f
);
121 Matrix_Print(stdout
,P_VALUE_FMT
,f
);
125 /* Polyhedron_Print(stdout,"%5d", A); */
126 /* Matrix_Print(stdout,"%4d", b); */
128 C
= Polyhedron_Image(A
, b
, 400);
129 Polyhedron_Print(stdout
,P_VALUE_FMT
,C
);
134 Polyhedron_Not_Empty(A
,B
,600) ? "Not Empty" : "Empty");
138 i
= PolyhedronLTQ(A
,B
,1,0,600);
140 i
==-1 ? "A<B" : i
==1 ? "A>B" : i
==0 ? "A><B" : "error");
141 i
= PolyhedronLTQ(B
,A
,1,0,600);
143 i
==-1 ? "A<B" : i
==1 ? "A>B" : i
==0 ? "A><B" : "error");
146 i
= GaussSimplify(a
,b
);
147 Matrix_Print(stdout
,P_VALUE_FMT
,b
);
151 printf("? unknown function\n");