algebramix_doc 0.3
/Users/mourrain/Devel/mmx/algebramix/include/algebramix/series_elementary.hpp
Go to the documentation of this file.
00001 
00002 /******************************************************************************
00003 * MODULE     : series_elementary.hpp
00004 * DESCRIPTION: Power series expansions of elementary functions
00005 * COPYRIGHT  : (C) 2004  Joris van der Hoeven
00006 *******************************************************************************
00007 * This software falls under the GNU general public license and comes WITHOUT
00008 * ANY WARRANTY WHATSOEVER. See the file $TEXMACS_PATH/LICENSE for more details.
00009 * If you don't have this file, write to the Free Software Foundation, Inc.,
00010 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00011 ******************************************************************************/
00012 
00013 #ifndef __MMX_SERIES_ELEMENTARY__HPP
00014 #define __MMX_SERIES_ELEMENTARY__HPP
00015 #include <numerix/floating.hpp>
00016 #include <algebramix/series.hpp>
00017 #include <algebramix/series_vector.hpp>
00018 
00019 namespace mmx {
00020 #define TMPL template<typename C, typename V>
00021 #define TMPLW template<typename C, typename V, typename W>
00022 #define Series series<C,V>
00023 
00024 /******************************************************************************
00025 * Elementary functions
00026 ******************************************************************************/
00027 
00028 TMPL inline Series
00029 sqrt (const Series& f) {
00030   if (is_exact_zero (f)) return Series (CF(f));
00031   return unary_recursive_series<sqrt_op> (f);
00032 }
00033 
00034 TMPL inline Series
00035 sqrt_init (const Series& f, const C& c) {
00036   return unary_recursive_series<sqrt_op> (f, c);
00037 }
00038 
00039 TMPL inline Series
00040 exp (const Series& f) {
00041   return unary_recursive_series<exp_op> (f);
00042 }
00043 
00044 TMPL inline Series
00045 log (const Series& f) {
00046   return unary_recursive_series<log_op> (f);
00047 }
00048 
00049 TMPL inline Series
00050 log_init (const Series& f, const C& c) {
00051   return unary_recursive_series<log_op> (f, c);
00052 }
00053 
00054 TMPL inline Series
00055 pow (const Series& f, const C& c) {
00056   return exp (c * log (f));
00057 }
00058 
00059 TMPL inline Series
00060 pow (const Series& f, const Series& g) {
00061   return exp (g * log (f));
00062 }
00063 
00064 TMPL inline Series
00065 acos (const Series& f) {
00066   return unary_recursive_series<acos_op> (f);
00067 }
00068 
00069 TMPL inline Series
00070 acos_init (const Series& f, const C& c) {
00071   return unary_recursive_series<acos_op> (f, c);
00072 }
00073 
00074 TMPL inline Series
00075 asin (const Series& f) {
00076   return unary_recursive_series<asin_op> (f);
00077 }
00078 
00079 TMPL inline Series
00080 asin_init (const Series& f, const C& c) {
00081   return unary_recursive_series<asin_op> (f, c);
00082 }
00083 
00084 TMPL inline Series
00085 atan (const Series& f) {
00086   return unary_recursive_series<atan_op> (f);
00087 }
00088 
00089 TMPL inline Series
00090 atan_init (const Series& f, const C& c) {
00091   return unary_recursive_series<atan_op> (f, c);
00092 }
00093 
00094 INV_TRIGO_SUGAR(TMPL,Series)
00095 HYPER_SUGAR(TMPL,Series)
00096 INV_HYPER_SUGAR(TMPL,Series)
00097 ARG_HYPER_SUGAR(TMPL,Series)
00098 
00099 /******************************************************************************
00100 * Trigonometric functions
00101 ******************************************************************************/
00102 
00103 TMPLW inline series<vector<C,W>,V>
00104 trig (const series<vector<C,W>,V>& f) {
00105   return unary_recursive_series<trig_op> (f);
00106 }
00107 
00108 template<typename C,typename V> inline vector<Series >
00109 cos_sin (const Series& f) {
00110   return as_vector (trig (as_series (vec (f))));
00111 }
00112 
00113 template<typename C,typename V> inline Series
00114 cos (const Series& f) {
00115   return unary_recursive_series<cos_op> (f);
00116 }
00117 
00118 template<typename C,typename V> inline Series
00119 sin (const Series& f) {
00120   return unary_recursive_series<sin_op> (f);
00121 }
00122 
00123 template<typename C,typename V> inline Series
00124 tan (const Series& f) {
00125   return unary_recursive_series<tan_op> (f);
00126 }
00127 
00128 #undef TMPL
00129 #undef TMPLW
00130 #undef Series
00131 } // namespace mmx
00132 #endif // __MMX_SERIES_ELEMENTARY__HPP
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines