algebramix_doc 0.3
|
00001 00002 #include <numerix/integer.hpp> 00003 #include <numerix/rational.hpp> 00004 #include <numerix/complex.hpp> 00005 #include <basix/vector.hpp> 00006 #include <algebramix/polynomial.hpp> 00007 #include <algebramix/polynomial_polynomial.hpp> 00008 #include <algebramix/polynomial_integer.hpp> 00009 #include <algebramix/polynomial_rational.hpp> 00010 #include <algebramix/polynomial_complex.hpp> 00011 #include <algebramix/polynomial_schonhage.hpp> 00012 #include <algebramix/quotient.hpp> 00013 #include <basix/glue.hpp> 00014 00015 namespace mmx { 00016 template<typename C> polynomial<C> 00017 polynomial_reverse (const vector<C>& v) { 00018 return polynomial<C> (reverse (v)); } 00019 00020 template<typename C> polynomial<modular<modulus<C>, modular_local> > 00021 as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) { 00022 modular<modulus<C>, modular_local>::set_modulus (p); 00023 return as<polynomial<modular<modulus<C>, modular_local> > > (f); } 00024 00025 template<typename C> vector<generic> 00026 wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) { 00027 return as<vector<generic> > (subresultants (f, g)); } 00028 00029 } 00030 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE } 00031 #define simple_quotient(C) quotient<C,C > 00032 00033 namespace mmx { 00034 static simple_quotient(polynomial<rational> ) 00035 GLUE_1 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) { 00036 return (simple_quotient(polynomial<rational> ) (arg_1, arg_2)); 00037 } 00038 00039 static simple_quotient(polynomial<rational> ) 00040 GLUE_2 (const polynomial<rational> &arg_1) { 00041 return (simple_quotient(polynomial<rational> ) (arg_1)); 00042 } 00043 00044 static simple_quotient(polynomial<rational> ) 00045 GLUE_3 (const polynomial<rational> &arg_1, const polynomial<rational> &arg_2) { 00046 return (simple_quotient(polynomial<rational> ) (arg_1, arg_2)); 00047 } 00048 00049 static simple_quotient(polynomial<rational> ) 00050 GLUE_4 (const polynomial<rational> &arg_1) { 00051 return (simple_quotient(polynomial<rational> ) (arg_1)); 00052 } 00053 00054 static polynomial<rational> 00055 GLUE_5 (const simple_quotient(polynomial<rational> ) &arg_1) { 00056 return numerator (arg_1); 00057 } 00058 00059 static polynomial<rational> 00060 GLUE_6 (const simple_quotient(polynomial<rational> ) &arg_1) { 00061 return denominator (arg_1); 00062 } 00063 00064 static simple_quotient(polynomial<rational> ) 00065 GLUE_7 (const simple_quotient(polynomial<rational> ) &arg_1) { 00066 return -arg_1; 00067 } 00068 00069 static simple_quotient(polynomial<rational> ) 00070 GLUE_8 (const simple_quotient(polynomial<rational> ) &arg_1) { 00071 return square (arg_1); 00072 } 00073 00074 static simple_quotient(polynomial<rational> ) 00075 GLUE_9 (const simple_quotient(polynomial<rational> ) &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) { 00076 return arg_1 + arg_2; 00077 } 00078 00079 static simple_quotient(polynomial<rational> ) 00080 GLUE_10 (const simple_quotient(polynomial<rational> ) &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) { 00081 return arg_1 - arg_2; 00082 } 00083 00084 static simple_quotient(polynomial<rational> ) 00085 GLUE_11 (const simple_quotient(polynomial<rational> ) &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) { 00086 return arg_1 * arg_2; 00087 } 00088 00089 static simple_quotient(polynomial<rational> ) 00090 GLUE_12 (const simple_quotient(polynomial<rational> ) &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) { 00091 return arg_1 / arg_2; 00092 } 00093 00094 static simple_quotient(polynomial<rational> ) 00095 GLUE_13 (const polynomial<rational> &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) { 00096 return arg_1 + arg_2; 00097 } 00098 00099 static simple_quotient(polynomial<rational> ) 00100 GLUE_14 (const simple_quotient(polynomial<rational> ) &arg_1, const polynomial<rational> &arg_2) { 00101 return arg_1 + arg_2; 00102 } 00103 00104 static simple_quotient(polynomial<rational> ) 00105 GLUE_15 (const polynomial<rational> &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) { 00106 return arg_1 - arg_2; 00107 } 00108 00109 static simple_quotient(polynomial<rational> ) 00110 GLUE_16 (const simple_quotient(polynomial<rational> ) &arg_1, const polynomial<rational> &arg_2) { 00111 return arg_1 - arg_2; 00112 } 00113 00114 static simple_quotient(polynomial<rational> ) 00115 GLUE_17 (const polynomial<rational> &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) { 00116 return arg_1 * arg_2; 00117 } 00118 00119 static simple_quotient(polynomial<rational> ) 00120 GLUE_18 (const simple_quotient(polynomial<rational> ) &arg_1, const polynomial<rational> &arg_2) { 00121 return arg_1 * arg_2; 00122 } 00123 00124 static simple_quotient(polynomial<rational> ) 00125 GLUE_19 (const polynomial<rational> &arg_1, const simple_quotient(polynomial<rational> ) &arg_2) { 00126 return arg_1 / arg_2; 00127 } 00128 00129 static simple_quotient(polynomial<rational> ) 00130 GLUE_20 (const simple_quotient(polynomial<rational> ) &arg_1, const polynomial<rational> &arg_2) { 00131 return arg_1 / arg_2; 00132 } 00133 00134 void 00135 glue_quotient_polynomial_rational () { 00136 static bool done = false; 00137 if (done) return; 00138 done = true; 00139 call_glue (string ("glue_polynomial_rational")); 00140 define_type<simple_quotient(polynomial<rational> ) > (gen (lit ("Quotient"), gen (lit ("Polynomial"), lit ("Rational")))); 00141 define ("quotient", GLUE_1); 00142 define ("quotient", GLUE_2); 00143 define ("/", GLUE_3); 00144 define_converter ("upgrade", GLUE_4, PENALTY_INCLUSION); 00145 define ("numerator", GLUE_5); 00146 define ("denominator", GLUE_6); 00147 define ("-", GLUE_7); 00148 define ("square", GLUE_8); 00149 define ("+", GLUE_9); 00150 define ("-", GLUE_10); 00151 define ("*", GLUE_11); 00152 define ("/", GLUE_12); 00153 define ("+", GLUE_13); 00154 define ("+", GLUE_14); 00155 define ("-", GLUE_15); 00156 define ("-", GLUE_16); 00157 define ("*", GLUE_17); 00158 define ("*", GLUE_18); 00159 define ("/", GLUE_19); 00160 define ("/", GLUE_20); 00161 } 00162 }