realroot_doc 0.1.1
|
00001 00002 #include <basix/int.hpp> 00003 #include <basix/vector.hpp> 00004 #include <basix/port.hpp> 00005 #include <numerix/integer.hpp> 00006 #include <numerix/rational.hpp> 00007 #include <numerix/floating.hpp> 00008 #include <numerix/kernel.hpp> 00009 #include <realroot/polynomial.hpp> 00010 #include <realroot/polynomial_glue.hpp> 00011 #include <realroot/polynomial_sparse_glue.hpp> 00012 #include <basix/tuple.hpp> 00013 #include <basix/glue.hpp> 00014 00015 #define int_literal(x) as_int (as_string (x)) 00016 #define set_of_generic set_of(generic) 00017 #define set_of_double set_of(double) 00018 #define set_of_integer set_of(integer) 00019 #define set_of_rational set_of(rational) 00020 #define set_of_bigfloat set_of(bigfloat) 00021 #define set_of_complex_bigfloat set_of(complex_bigfloat) 00022 00023 namespace mmx { 00024 static rational 00025 GLUE_1 (const ring<rational, Sparse, DegRevLex> &arg_1) { 00026 return sample (arg_1); 00027 } 00028 00029 static ring<rational, Sparse, DegRevLex> 00030 GLUE_2 (const ring<rational, Sparse, DegRevLex> &arg_1, const tuple<generic> &arg_2) { 00031 return ring_sparse_extend_generic (arg_1, as_vector (arg_2)); 00032 } 00033 00034 static ring<rational, Sparse, DegRevLex> 00035 GLUE_3 (const scalar_set<rational> &arg_1, const tuple<generic> &arg_2) { 00036 return ring_sparse_generic (arg_1, as_vector (arg_2)); 00037 } 00038 00039 static ring<rational, Sparse, DegRevLex> 00040 GLUE_4 (const scalar_set<rational> &arg_1, const tuple<generic> &arg_2) { 00041 return ring_sparse_generic (arg_1, as_vector (arg_2)); 00042 } 00043 00044 static int 00045 GLUE_5 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) { 00046 return size (arg_1); 00047 } 00048 00049 static int 00050 GLUE_6 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) { 00051 return degree (arg_1); 00052 } 00053 00054 static int 00055 GLUE_7 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) { 00056 return nbvar (arg_1); 00057 } 00058 00059 static ring<rational, Sparse, DegRevLex>::Polynomial 00060 GLUE_8 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) { 00061 return -arg_1; 00062 } 00063 00064 static ring<rational, Sparse, DegRevLex>::Polynomial 00065 GLUE_9 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00066 return arg_1 + arg_2; 00067 } 00068 00069 static ring<rational, Sparse, DegRevLex>::Polynomial 00070 GLUE_10 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00071 return arg_1 - arg_2; 00072 } 00073 00074 static ring<rational, Sparse, DegRevLex>::Polynomial 00075 GLUE_11 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00076 return arg_1 * arg_2; 00077 } 00078 00079 static ring<rational, Sparse, DegRevLex>::Polynomial 00080 GLUE_12 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) { 00081 return square (arg_1); 00082 } 00083 00084 static ring<rational, Sparse, DegRevLex>::Polynomial 00085 GLUE_13 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2) { 00086 return pow (arg_1, arg_2); 00087 } 00088 00089 static ring<rational, Sparse, DegRevLex>::Polynomial 00090 GLUE_14 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2) { 00091 return diff (arg_1, arg_2); 00092 } 00093 00094 static ring<rational, Sparse, DegRevLex>::Polynomial 00095 GLUE_15 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const generic &arg_2) { 00096 return diff (arg_1, arg_2); 00097 } 00098 00099 static ring<rational, Sparse, DegRevLex>::Polynomial 00100 GLUE_16 (const rational &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00101 return arg_1 + arg_2; 00102 } 00103 00104 static ring<rational, Sparse, DegRevLex>::Polynomial 00105 GLUE_17 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const rational &arg_2) { 00106 return arg_1 + arg_2; 00107 } 00108 00109 static ring<rational, Sparse, DegRevLex>::Polynomial 00110 GLUE_18 (const rational &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00111 return arg_1 - arg_2; 00112 } 00113 00114 static ring<rational, Sparse, DegRevLex>::Polynomial 00115 GLUE_19 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const rational &arg_2) { 00116 return arg_1 - arg_2; 00117 } 00118 00119 static ring<rational, Sparse, DegRevLex>::Polynomial 00120 GLUE_20 (const rational &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00121 return arg_1 * arg_2; 00122 } 00123 00124 static ring<rational, Sparse, DegRevLex>::Polynomial 00125 GLUE_21 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const rational &arg_2) { 00126 return arg_1 * arg_2; 00127 } 00128 00129 static ring<rational, Sparse, DegRevLex>::Polynomial 00130 GLUE_22 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const rational &arg_2) { 00131 return arg_1 / arg_2; 00132 } 00133 00134 static ring<rational, Sparse, DegRevLex>::Polynomial 00135 GLUE_23 (const ring<rational, Sparse, DegRevLex> &arg_1, const rational &arg_2) { 00136 return polynomial_sparse (arg_1, arg_2); 00137 } 00138 00139 static ring<rational, Sparse, DegRevLex>::Polynomial 00140 GLUE_24 (const ring<rational, Sparse, DegRevLex> &arg_1, const rational &arg_2, const int &arg_3, const int &arg_4) { 00141 return polynomial_sparse (arg_1, arg_2, arg_3, arg_4); 00142 } 00143 00144 static ring<rational, Sparse, DegRevLex>::Polynomial 00145 GLUE_25 (const ring<rational, Sparse, DegRevLex> &arg_1, const string &arg_2) { 00146 return polynomial_sparse (arg_1, arg_2); 00147 } 00148 00149 static ring<rational, Sparse, DegRevLex>::Polynomial 00150 GLUE_26 (const ring<rational, Sparse, DegRevLex> &arg_1, const generic &arg_2) { 00151 return polynomial_sparse (arg_1, arg_2); 00152 } 00153 00154 static ring<rational, Sparse, DegRevLex>::Polynomial 00155 GLUE_27 (const ring<rational, Sparse, DegRevLex> &arg_1, const string &arg_2) { 00156 return polynomial_sparse (arg_1, arg_2); 00157 } 00158 00159 static ring<rational, Sparse, DegRevLex>::Polynomial 00160 GLUE_28 (const ring<rational, Sparse, DegRevLex> &arg_1, const generic &arg_2) { 00161 return polynomial_sparse (arg_1, arg_2); 00162 } 00163 00164 static vector<generic> 00165 GLUE_29 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2) { 00166 return polynomial_sparse_coefficients (arg_1, arg_2); 00167 } 00168 00169 static vector<generic> 00170 GLUE_30 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) { 00171 return polynomial_sparse_coefficients (arg_1); 00172 } 00173 00174 static vector<generic> 00175 GLUE_31 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) { 00176 return polynomial_sparse_monomials (arg_1); 00177 } 00178 00179 static ring<rational, Sparse, DegRevLex>::Polynomial 00180 GLUE_32 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00181 return homogenize (arg_1, arg_2); 00182 } 00183 00184 static ring<rational, Sparse, DegRevLex>::Polynomial 00185 GLUE_33 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const int &arg_2, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_3) { 00186 return homogenize (arg_1, arg_2, arg_3); 00187 } 00188 00189 static generic 00190 GLUE_34 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const vector<generic> &arg_2) { 00191 return polynomial_sparse_eval_generic (arg_1, arg_2); 00192 } 00193 00194 static ring<rational, Sparse, DegRevLex>::Polynomial 00195 GLUE_35 (const ring<rational, Sparse, DegRevLex> &arg_1, const int &arg_2) { 00196 return arg_1[arg_2]; 00197 } 00198 00199 static vector<generic> 00200 GLUE_36 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2, const int &arg_3) { 00201 return polynomial_sturm_sequence (arg_1, arg_2, arg_3); 00202 } 00203 00204 static ring<rational, Sparse, DegRevLex>::Polynomial 00205 GLUE_37 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2, const int &arg_3) { 00206 return polynomial_resultant (arg_1, arg_2, arg_3); 00207 } 00208 00209 static ring<rational, Sparse, DegRevLex>::Polynomial 00210 GLUE_38 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00211 return arg_1 / arg_2; 00212 } 00213 00214 static ring<rational, Sparse, DegRevLex>::Polynomial 00215 GLUE_39 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00216 return arg_1 / arg_2; 00217 } 00218 00219 static ring<rational, Sparse, DegRevLex>::Polynomial 00220 GLUE_40 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1, const ring<rational, Sparse, DegRevLex>::Polynomial &arg_2) { 00221 return arg_1 % arg_2; 00222 } 00223 00224 void 00225 glue_polynomial_sparse_rational () { 00226 static bool done = false; 00227 if (done) return; 00228 done = true; 00229 call_glue (string ("glue_int")); 00230 call_glue (string ("glue_vector_generic")); 00231 call_glue (string ("glue_string")); 00232 call_glue (string ("glue_kernel")); 00233 define_type<ring<rational, Sparse, DegRevLex> > (gen (lit ("MonomialSparseRing"), lit ("Rational"))); 00234 define ("sample", GLUE_1); 00235 define (".[]", GLUE_2); 00236 define (".[]", GLUE_3); 00237 define ("ring", GLUE_4); 00238 define_type<ring<rational, Sparse, DegRevLex>::Polynomial > (gen (lit ("Polynomial"), gen (lit ("MonomialSparseRing"), lit ("Rational")))); 00239 define ("#", GLUE_5); 00240 define ("degree", GLUE_6); 00241 define ("nbvar", GLUE_7); 00242 define ("-", GLUE_8); 00243 define ("+", GLUE_9); 00244 define ("-", GLUE_10); 00245 define ("*", GLUE_11); 00246 define ("square", GLUE_12); 00247 define ("^", GLUE_13); 00248 define ("diff", GLUE_14); 00249 define ("diff", GLUE_15); 00250 define ("+", GLUE_16); 00251 define ("+", GLUE_17); 00252 define ("-", GLUE_18); 00253 define ("-", GLUE_19); 00254 define ("*", GLUE_20); 00255 define ("*", GLUE_21); 00256 define ("/", GLUE_22); 00257 define ("polynomial", GLUE_23); 00258 define ("polynomial", GLUE_24); 00259 define ("polynomial", GLUE_25); 00260 define ("polynomial", GLUE_26); 00261 define ("<<", GLUE_27); 00262 define ("<<", GLUE_28); 00263 define ("coefficients", GLUE_29); 00264 define ("coefficients", GLUE_30); 00265 define ("monomials", GLUE_31); 00266 define ("homogenize", GLUE_32); 00267 define ("homogenize", GLUE_33); 00268 define ("eval", GLUE_34); 00269 define (".[]", GLUE_35); 00270 define ("sturm_seq", GLUE_36); 00271 define ("resultant", GLUE_37); 00272 define ("/", GLUE_38); 00273 define ("quo", GLUE_39); 00274 define ("rem", GLUE_40); 00275 } 00276 }