algebramix_doc 0.3
|
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