Main Page | Namespace List | Class List | File List | Namespace Members | Class Members | File Members

itaylor.hpp

Go to the documentation of this file.
00001 /*
00002 **  CXSC is a C++ library for eXtended Scientific Computing 
00003 **
00004 **  Copyright (C) 1990-2000 Institut fuer Angewandte Mathematik,
00005 **                          Universitaet Karlsruhe, Germany
00006 **            (C) 2000-2007 Wiss. Rechnen/Softwaretechnologie
00007 **                          Universitaet Wuppertal, Germany
00008 **
00009 **  One dimensional Taylor arithmetic package
00010 ** 
00011 **  Extended version by M. Grimmer, copyright (C) 2005-2007.
00012 **
00013 **  This library is free software; you can redistribute it and/or
00014 **  modify it under the terms of the GNU Library General Public
00015 **  License as published by the Free Software Foundation; either
00016 **  version 2 of the License, or (at your option) any later version.
00017 **
00018 **  This library is distributed in the hope that it will be useful,
00019 **  but WITHOUT ANY WARRANTY; without even the implied warranty of
00020 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00021 **  Library General Public License for more details.
00022 **
00023 **  You should have received a copy of the GNU Library General Public
00024 **  License along with this library; if not, write to the Free
00025 **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00026 **  
00027 */
00028 
00030 //
00031 //     Headerfile itaylor.hpp for onedimensional Taylor-arithmetic
00032 //
00035 //     Updated by F. Blomquist, M. Grimmer
00036 //     Extended version (c) 2005-2007 M. Grimmer
00038 
00039 /*----------------------------------------------------------------------
00040 
00041 Definition of the class itaylor:
00042 
00043 class itaylor for calculating all Taylor coefficients up to the maximal order p.
00044 
00045   Elements:
00046             int p .................... maximal order of the Taylor coefficients
00047             ivector tayl ............. interval vector; Lb=0, Ub=p;
00048 
00049             static ivector faks ...... storing n! with n<=170
00050             static int initialized ... switcher for initialization of faks.
00051             static void initialize().. performs initialization of faks.
00052 
00053   Element functions, methodes:
00054 
00055             see implementation
00056 
00057 Implementation file: itaylor.cpp
00058 
00059 -----------------------------------------------------------------------*/
00060 
00061 #ifndef _ITAYLOR_H
00062 #define _ITAYLOR_H
00063 
00064 //cxsc headers
00065 #include <imath.hpp>
00066 #include <interval.hpp>
00067 #include <ivector.hpp>
00068 #include <idot.hpp>
00069 
00070 //C++ standard headers
00071 #include <iostream>
00072 #include <fstream>
00073 
00074 using namespace cxsc;
00075 using namespace std;
00076 
00077 namespace taylor{
00078 enum{
00079     _i_ln,
00080 
00081     _i_tan,
00082     _i_cot,
00083 
00084     _i_asin,
00085     _i_acos,
00086     _i_atan,
00087     _i_acot,
00088 
00089     _i_tanh,
00090     _i_coth,
00091 
00092     _i_asinh,
00093     _i_acosh,
00094     _i_atanh,
00095     _i_acoth,
00096 
00097 };
00098 
00100 //
00101 // Class itaylor
00102 //
00104 
00105 // class itaylor for calculating all Taylor-coefficients up to order p
00106 // of functions with one independent variable.
00107 
00108 class itaylor{
00109 
00110  private:
00111   int p;        // max. Taylor-order of the object;
00112   ivector tayl; // Interval vector with Taylor coefficients
00113 
00114   static ivector faks;
00115   static int initialized;
00116   static void initialize();
00117 
00118  public:
00119   // Constructors and Destructors:
00120   itaylor();
00121   itaylor(const itaylor& );
00122   explicit itaylor(int order);
00123   itaylor(int order, const real& value);  // (x,1,0,...,0) Conversion error!!
00124   itaylor(int order, const interval& value); // (x,1,0,...,0)
00125   ~itaylor(){;};
00126 
00127   // Initialization functions for independent variables (x,1,0,...,0):
00128   // Caution: (x,1,0,...,0)  for real x conversion errors are possible!
00129   friend itaylor var_itaylor(int ord, const real& c);
00130   friend itaylor var_itaylor(int ord, const interval& c);
00131 
00132   // Initialization functions for constants (c,0,0,...,0):
00133   // Caution: (c,0,0,...,0)  for real c conversion errors are possible!
00134   friend itaylor const_itaylor(int ord, const real& c);
00135   friend itaylor const_itaylor(int ord, const interval& c);
00136 
00137   // assignment operators
00138   itaylor operator=(const itaylor& );
00139   itaylor operator=(int);
00140   itaylor operator=(const real& );
00141   itaylor operator=(const interval& );
00142   itaylor operator=(const ivector&); //const since C-XSC 2.1
00143   // relational operators
00144   int operator==(itaylor&);   
00145   int operator!=(itaylor&);   
00146   int operator<=(itaylor&);   
00147   int operator<(itaylor&);    
00148   int operator>=(itaylor&);   
00149   int operator>(itaylor&);    
00150   
00151   // component access
00152   interval& operator[](int n);
00153   int order() {return p;}     
00154 
00155   // interval evaluation
00156   interval operator()(interval x);
00157 
00158   // additional component access functions (for compatibility reasons)
00159   friend int get_order(const itaylor& x);
00160   friend ivector get_all_coef(const itaylor& x);
00161   friend interval get_j_coef(const itaylor& x, int j);
00162 
00163   // access to the derivative of order j:
00164   friend interval get_j_derive(const itaylor& x, int j); 
00165  
00166   // Output:
00167   friend void print_itaylor(const itaylor& x);
00168                                 // kept for compatibility reasons
00169 
00170   friend void print_itaylor(std::ostream& os, const itaylor& x, int width=0, int digits=0);
00171 
00172   friend std::ostream& operator<< (std::ostream&, itaylor&);
00173 
00174   // Overloading the operators for elements of the class itaylor:
00175 
00176   // operator - :
00177   friend itaylor operator-(const itaylor& x);
00178 
00179   // operators +,-,*,/  for (itaylor, itaylor):
00180   friend itaylor operator-(const itaylor& x, const itaylor& y);
00181   friend itaylor operator+(const itaylor& x, const itaylor& y);
00182   friend itaylor operator*(const itaylor& x, const itaylor& y);
00183   friend itaylor operator/(const itaylor& x, const itaylor& y);
00184 
00185   // operators +,-,*,/ for (interval, itaylor):
00186   friend itaylor operator-(const interval& x, const itaylor& y);
00187   friend itaylor operator+(const interval& x, const itaylor& y);
00188   friend itaylor operator*(const interval& x, const itaylor& y);
00189   friend itaylor operator/(const interval& x, const itaylor& y);
00190 
00191   // operators +,-,*,/ for (itaylor, interval):
00192   friend itaylor operator-(const itaylor& x, const interval& y);
00193   friend itaylor operator+(const itaylor& x, const interval& y);
00194   friend itaylor operator*(const itaylor& x, const interval& y);
00195   friend itaylor operator/(const itaylor& x, const interval& y);
00196 
00197   // operators +,-,*,/ for (real, itaylor):
00198   friend itaylor operator-(const real& x, const itaylor& y);
00199   friend itaylor operator+(const real& x, const itaylor& y);
00200   friend itaylor operator*(const real& x, const itaylor& y);
00201   friend itaylor operator/(const real& x, const itaylor& y);
00202 
00203   // operators +,-,*,/ for (itaylor, real):
00204   friend itaylor operator-(const itaylor& x, const real& y);
00205   friend itaylor operator+(const itaylor& x, const real& y);
00206   friend itaylor operator*(const itaylor& x, const real& y);
00207   friend itaylor operator/(const itaylor& x, const real& y);
00208 
00209   // operators +,-,*,/ for (int, itaylor):
00210   friend itaylor operator-(int x, const itaylor& y);
00211   friend itaylor operator+(int x, const itaylor& y);
00212   friend itaylor operator*(int x, const itaylor& y);
00213   friend itaylor operator/(int x, const itaylor& y);
00214 
00215   // operators +,-,*,/ for (itaylor, int):
00216   friend itaylor operator-(const itaylor& x, int y);
00217   friend itaylor operator+(const itaylor& x, int y);
00218   friend itaylor operator*(const itaylor& x, int y);
00219   friend itaylor operator/(const itaylor& x, int y);
00220 
00221   // Overloading the standard functions:
00222   friend itaylor sqrt(const itaylor& x);
00223   friend itaylor sqrt(const itaylor& x, int n);
00224   friend itaylor sqrt1px2(const itaylor& x);
00225   friend itaylor sqrtp1m1(const itaylor& x);
00226   friend itaylor sqrt1mx2(const itaylor& x);
00227   friend itaylor sqrtx2m1(const itaylor& x);
00228   friend itaylor sqr(const itaylor& x);
00229   friend itaylor pow(const itaylor& x, const interval& alpha);
00230 
00231   friend itaylor exp(const itaylor& x);
00232   friend itaylor expm1(const itaylor& x);
00233 
00234   friend itaylor ln(const itaylor& x);
00235   friend itaylor lnp1(const itaylor& x);
00236 
00237   friend itaylor sin(const itaylor& x);
00238   friend itaylor cos(const itaylor& x);
00239   friend itaylor tan(const itaylor& x);
00240   friend itaylor cot(const itaylor& x);
00241 
00242   friend itaylor sinh(const itaylor& x);
00243   friend itaylor cosh(const itaylor& x);
00244   friend itaylor tanh(const itaylor& x);
00245   friend itaylor coth(const itaylor& x);
00246 
00247   friend itaylor asin(const itaylor& x);
00248   friend itaylor acos(const itaylor& x);
00249   friend itaylor atan(const itaylor& x);
00250   friend itaylor acot(const itaylor& x);
00251 
00252   friend itaylor asinh(const itaylor& x);
00253   friend itaylor acosh(const itaylor& x);
00254   friend itaylor atanh(const itaylor& x);
00255   friend itaylor acoth(const itaylor& x);
00256 
00257   friend itaylor erf(const itaylor& x);  
00258   friend itaylor erfc(const itaylor& x); 
00259 
00260   // Help function
00261   friend void f_g_u(const itaylor& f, const itaylor& g, const itaylor& u,
00262                     int nb_function); 
00263 
00264 };
00265 
00266 itaylor var_itaylor(int ord, const real& c);
00267 itaylor var_itaylor(int ord, const interval& c);
00268 
00269 itaylor const_itaylor(int ord, const real& c);
00270 itaylor const_itaylor(int ord, const interval& c);
00271 
00272 int get_order(const itaylor& x);
00273 ivector get_all_coef(const itaylor& x);
00274 interval get_j_coef(const itaylor& x, int j);
00275 
00276 interval get_j_derive(const itaylor& x, int j); 
00277 
00278 void print_itaylor(const itaylor& x);
00279 
00280 void print_itaylor(std::ostream& os, const itaylor& x, int width, int digits);
00281 
00282 std::ostream& operator<< (std::ostream&, itaylor&);
00283 
00284 itaylor operator-(const itaylor& x);
00285 
00286 itaylor operator-(const itaylor& x, const itaylor& y);
00287 itaylor operator+(const itaylor& x, const itaylor& y);
00288 itaylor operator*(const itaylor& x, const itaylor& y);
00289 itaylor operator/(const itaylor& x, const itaylor& y);
00290 
00291 itaylor operator-(const interval& x, const itaylor& y);
00292 itaylor operator+(const interval& x, const itaylor& y);
00293 itaylor operator*(const interval& x, const itaylor& y);
00294 itaylor operator/(const interval& x, const itaylor& y);
00295 
00296 itaylor operator-(const itaylor& x, const interval& y);
00297 itaylor operator+(const itaylor& x, const interval& y);
00298 itaylor operator*(const itaylor& x, const interval& y);
00299 itaylor operator/(const itaylor& x, const interval& y);
00300 
00301 itaylor operator-(const real& x, const itaylor& y);
00302 itaylor operator+(const real& x, const itaylor& y);
00303 itaylor operator*(const real& x, const itaylor& y);
00304 itaylor operator/(const real& x, const itaylor& y);
00305 
00306 itaylor operator-(const itaylor& x, const real& y);
00307 itaylor operator+(const itaylor& x, const real& y);
00308 itaylor operator*(const itaylor& x, const real& y);
00309 itaylor operator/(const itaylor& x, const real& y);
00310 
00311 itaylor operator-(int x, const itaylor& y);
00312 itaylor operator+(int x, const itaylor& y);
00313 itaylor operator*(int x, const itaylor& y);
00314 itaylor operator/(int x, const itaylor& y);
00315 
00316 itaylor operator-(const itaylor& x, int y);
00317 itaylor operator+(const itaylor& x, int y);
00318 itaylor operator*(const itaylor& x, int y);
00319 itaylor operator/(const itaylor& x, int y);
00320 
00321 itaylor sqrt(const itaylor& x);
00322 itaylor sqrt(const itaylor& x, int n);
00323 itaylor sqrt1px2(const itaylor& x);
00324 itaylor sqrtp1m1(const itaylor& x);
00325 itaylor sqrt1mx2(const itaylor& x);
00326 itaylor sqrtx2m1(const itaylor& x);
00327 itaylor sqr(const itaylor& x);
00328 itaylor pow(const itaylor& x, const interval& alpha);
00329 
00330 itaylor exp(const itaylor& x);
00331 itaylor expm1(const itaylor& x);
00332 
00333 itaylor ln(const itaylor& x);
00334 itaylor lnp1(const itaylor& x);
00335 
00336 itaylor sin(const itaylor& x);
00337 itaylor cos(const itaylor& x);
00338 itaylor tan(const itaylor& x);
00339 itaylor cot(const itaylor& x);
00340 
00341 itaylor sinh(const itaylor& x);
00342 itaylor cosh(const itaylor& x);
00343 itaylor tanh(const itaylor& x);
00344 itaylor coth(const itaylor& x);
00345 
00346 itaylor asin(const itaylor& x);
00347 itaylor acos(const itaylor& x);
00348 itaylor atan(const itaylor& x);
00349 itaylor acot(const itaylor& x);
00350 
00351 itaylor asinh(const itaylor& x);
00352 itaylor acosh(const itaylor& x);
00353 itaylor atanh(const itaylor& x);
00354 itaylor acoth(const itaylor& x);
00355 
00356 itaylor erf(const itaylor& x);  
00357 itaylor erfc(const itaylor& x); 
00358 
00359 } // End of namespace taylor
00360 
00361 #endif

Generated on Wed Apr 4 18:16:37 2007 for VFIS by  doxygen 1.4.4