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 <realroot/polynomial_tensor_glue.hpp> 00013 #include <realroot/polynomial_bernstein_glue.hpp> 00014 #include <basix/tuple.hpp> 00015 #include <basix/glue.hpp> 00016 00017 #define int_literal(x) as_int (as_string (x)) 00018 #define set_of_generic set_of(generic) 00019 #define set_of_double set_of(double) 00020 #define set_of_integer set_of(integer) 00021 #define set_of_rational set_of(rational) 00022 #define set_of_bigfloat set_of(bigfloat) 00023 #define set_of_complex_bigfloat set_of(complex_bigfloat) 00024 00025 namespace mmx { 00026 static rational 00027 GLUE_1 (const ring<rational, Bernstein> &arg_1) { 00028 return sample (arg_1); 00029 } 00030 00031 static ring<rational, Bernstein> 00032 GLUE_2 (const ring<rational, Sparse, DegRevLex> &arg_1) { 00033 return ring_bernstein_of (arg_1); 00034 } 00035 00036 static ring<rational, Bernstein> 00037 GLUE_3 (const ring<rational, Bernstein> &arg_1, const tuple<generic> &arg_2) { 00038 return ring_bernstein_extend_generic (arg_1, as_vector (arg_2)); 00039 } 00040 00041 static ring<rational, Bernstein> 00042 GLUE_4 (const scalar_set<rational> &arg_1, const Bernstein &arg_2, const tuple<generic> &arg_3) { 00043 return ring_bernstein_generic (arg_1, arg_2, as_vector (arg_3)); 00044 } 00045 00046 static int 00047 GLUE_5 (const ring<rational, Bernstein>::Polynomial &arg_1) { 00048 return size (arg_1); 00049 } 00050 00051 static int 00052 GLUE_6 (const ring<rational, Bernstein>::Polynomial &arg_1) { 00053 return degree (arg_1); 00054 } 00055 00056 static int 00057 GLUE_7 (const ring<rational, Bernstein>::Polynomial &arg_1) { 00058 return nbvar (arg_1); 00059 } 00060 00061 static ring<rational, Bernstein>::Polynomial 00062 GLUE_8 (const ring<rational, Bernstein>::Polynomial &arg_1) { 00063 return -arg_1; 00064 } 00065 00066 static ring<rational, Bernstein>::Polynomial 00067 GLUE_9 (const ring<rational, Bernstein>::Polynomial &arg_1, const ring<rational, Bernstein>::Polynomial &arg_2) { 00068 return arg_1 + arg_2; 00069 } 00070 00071 static ring<rational, Bernstein>::Polynomial 00072 GLUE_10 (const ring<rational, Bernstein>::Polynomial &arg_1, const ring<rational, Bernstein>::Polynomial &arg_2) { 00073 return arg_1 - arg_2; 00074 } 00075 00076 static ring<rational, Bernstein>::Polynomial 00077 GLUE_11 (const ring<rational, Bernstein>::Polynomial &arg_1, const ring<rational, Bernstein>::Polynomial &arg_2) { 00078 return arg_1 * arg_2; 00079 } 00080 00081 static ring<rational, Bernstein>::Polynomial 00082 GLUE_12 (const ring<rational, Bernstein>::Polynomial &arg_1) { 00083 return square (arg_1); 00084 } 00085 00086 static ring<rational, Bernstein>::Polynomial 00087 GLUE_13 (const ring<rational, Bernstein>::Polynomial &arg_1, const int &arg_2) { 00088 return pow (arg_1, arg_2); 00089 } 00090 00091 static ring<rational, Bernstein>::Polynomial 00092 GLUE_14 (const ring<rational, Bernstein>::Polynomial &arg_1, const int &arg_2) { 00093 return diff (arg_1, arg_2); 00094 } 00095 00096 static ring<rational, Bernstein>::Polynomial 00097 GLUE_15 (const ring<rational, Bernstein>::Polynomial &arg_1, const generic &arg_2) { 00098 return diff (arg_1, arg_2); 00099 } 00100 00101 static ring<rational, Bernstein>::Polynomial 00102 GLUE_16 (const rational &arg_1, const ring<rational, Bernstein>::Polynomial &arg_2) { 00103 return arg_1 + arg_2; 00104 } 00105 00106 static ring<rational, Bernstein>::Polynomial 00107 GLUE_17 (const ring<rational, Bernstein>::Polynomial &arg_1, const rational &arg_2) { 00108 return arg_1 + arg_2; 00109 } 00110 00111 static ring<rational, Bernstein>::Polynomial 00112 GLUE_18 (const rational &arg_1, const ring<rational, Bernstein>::Polynomial &arg_2) { 00113 return arg_1 - arg_2; 00114 } 00115 00116 static ring<rational, Bernstein>::Polynomial 00117 GLUE_19 (const ring<rational, Bernstein>::Polynomial &arg_1, const rational &arg_2) { 00118 return arg_1 - arg_2; 00119 } 00120 00121 static ring<rational, Bernstein>::Polynomial 00122 GLUE_20 (const rational &arg_1, const ring<rational, Bernstein>::Polynomial &arg_2) { 00123 return arg_1 * arg_2; 00124 } 00125 00126 static ring<rational, Bernstein>::Polynomial 00127 GLUE_21 (const ring<rational, Bernstein>::Polynomial &arg_1, const rational &arg_2) { 00128 return arg_1 * arg_2; 00129 } 00130 00131 static ring<rational, Bernstein>::Polynomial 00132 GLUE_22 (const ring<rational, Bernstein>::Polynomial &arg_1, const rational &arg_2) { 00133 return arg_1 / arg_2; 00134 } 00135 00136 static ring<rational, Bernstein>::Polynomial 00137 GLUE_23 (const ring<rational, Bernstein> &arg_1, const rational &arg_2) { 00138 return polynomial_bernstein (arg_1, arg_2); 00139 } 00140 00141 static ring<rational, Bernstein>::Polynomial 00142 GLUE_24 (const ring<rational, Bernstein> &arg_1, const rational &arg_2, const int &arg_3, const int &arg_4) { 00143 return polynomial_bernstein (arg_1, arg_2, arg_3, arg_4); 00144 } 00145 00146 static ring<rational, Bernstein>::Polynomial 00147 GLUE_25 (const ring<rational, Bernstein> &arg_1, const string &arg_2) { 00148 return polynomial_bernstein (arg_1, arg_2); 00149 } 00150 00151 static ring<rational, Bernstein>::Polynomial 00152 GLUE_26 (const ring<rational, Bernstein> &arg_1, const generic &arg_2) { 00153 return polynomial_bernstein (arg_1, arg_2); 00154 } 00155 00156 static ring<rational, Bernstein>::Polynomial 00157 GLUE_27 (const ring<rational, Bernstein> &arg_1, const string &arg_2) { 00158 return polynomial_bernstein (arg_1, arg_2); 00159 } 00160 00161 static ring<rational, Bernstein>::Polynomial 00162 GLUE_28 (const ring<rational, Bernstein> &arg_1, const generic &arg_2) { 00163 return polynomial_bernstein (arg_1, arg_2); 00164 } 00165 00166 static vector<generic> 00167 GLUE_29 (const ring<rational, Bernstein>::Polynomial &arg_1, const int &arg_2) { 00168 return polynomial_bernstein_coefficients (arg_1, arg_2); 00169 } 00170 00171 static vector<generic> 00172 GLUE_30 (const ring<rational, Bernstein>::Polynomial &arg_1) { 00173 return polynomial_bernstein_coefficients (arg_1); 00174 } 00175 00176 static ring<rational, Bernstein>::Polynomial 00177 GLUE_31 (const ring<rational, Sparse, DegRevLex>::Polynomial &arg_1) { 00178 return polynomial_bernstein_of (arg_1); 00179 } 00180 00181 static ring<rational, Sparse, DegRevLex>::Polynomial 00182 GLUE_32 (const ring<rational, Bernstein>::Polynomial &arg_1) { 00183 return polynomial_sparse_of (arg_1); 00184 } 00185 00186 static ring<rational, Bernstein>::Polynomial 00187 GLUE_33 (const ring<rational, Bernstein> &arg_1, const int &arg_2) { 00188 return arg_1[arg_2]; 00189 } 00190 00191 void 00192 glue_polynomial_bernstein_rational () { 00193 static bool done = false; 00194 if (done) return; 00195 done = true; 00196 call_glue (string ("glue_int")); 00197 call_glue (string ("glue_vector_generic")); 00198 call_glue (string ("glue_string")); 00199 call_glue (string ("glue_kernel")); 00200 define_type<ring<rational, Sparse, DegRevLex> > (gen (lit ("MonomialSparseRing"), lit ("Rational"))); 00201 define_type<Bernstein > (lit ("BernsteinBasis")); 00202 define_constant<Bernstein > ("Bernstein", Bernstein ()); 00203 define_type<ring<rational, Bernstein> > (gen (lit ("BernsteinTensorRing"), lit ("Rational"))); 00204 define ("sample", GLUE_1); 00205 define ("bernstein", GLUE_2); 00206 define (".[]", GLUE_3); 00207 define ("ring", GLUE_4); 00208 define_type<ring<rational, Bernstein>::Polynomial > (gen (lit ("Polynomial"), gen (lit ("BernsteinTensorRing"), lit ("Rational")))); 00209 define_type<ring<rational, Sparse, DegRevLex>::Polynomial > (gen (lit ("Polynomial"), gen (lit ("MonomialSparseRing"), lit ("Rational")))); 00210 define ("#", GLUE_5); 00211 define ("degree", GLUE_6); 00212 define ("nbvar", GLUE_7); 00213 define ("-", GLUE_8); 00214 define ("+", GLUE_9); 00215 define ("-", GLUE_10); 00216 define ("*", GLUE_11); 00217 define ("square", GLUE_12); 00218 define ("^", GLUE_13); 00219 define ("diff", GLUE_14); 00220 define ("diff", GLUE_15); 00221 define ("+", GLUE_16); 00222 define ("+", GLUE_17); 00223 define ("-", GLUE_18); 00224 define ("-", GLUE_19); 00225 define ("*", GLUE_20); 00226 define ("*", GLUE_21); 00227 define ("/", GLUE_22); 00228 define ("polynomial", GLUE_23); 00229 define ("polynomial", GLUE_24); 00230 define ("polynomial", GLUE_25); 00231 define ("polynomial", GLUE_26); 00232 define ("<<", GLUE_27); 00233 define ("<<", GLUE_28); 00234 define ("coefficients", GLUE_29); 00235 define ("coefficients", GLUE_30); 00236 define ("bernstein", GLUE_31); 00237 define ("sparse", GLUE_32); 00238 define (".[]", GLUE_33); 00239 } 00240 }