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

dim2taylor.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-2006 Wiss. Rechnen/Softwaretechnologie
00007 **                          Universitaet Wuppertal, Germany
00008 **
00009 **  Two 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 
00029 //     Updated by F. Blomquist, M. Grimmer
00030 //     Extended version (c) 2005-2007 by M. Grimmer
00032 
00033 
00034 #ifndef _DIM2TAYLOR_H
00035 #define _DIM2TAYLOR_H
00036 
00037 #include <iostream>
00038 #include <fstream>
00039 
00040 #include "ivector.hpp"
00041 #include "imath.hpp"
00042 #include "idot.hpp"
00043 
00044 using namespace cxsc;
00045 namespace taylor{
00046 
00047 enum{_ln,_lnp1,_tan,_cot,_asin,_acos,_atan,_acot,_tanh,_coth,
00048        _asinh,_acosh,_atanh,_acoth,_sqrtp1m1};
00049 
00050 /*--------------------------------------------------------------------------
00051 
00052 class dim2taylor: Taylor arithmetic for functions of two variables
00053 
00054         int p.....maximum taylor order
00055                    
00056  ivector* dat.....dynamic vector of interval vectors implemented as 
00057                   triangle matrix 
00058 
00059 --------------------------------------------------------------------------*/
00060 
00061 
00062 
00063 class  dim2taylor{  
00064  private:
00065   
00066   int p; // Order of Taylor expansion
00067   ivector* dat; // pointer to a block (array) of elements of type
00068                 // ivector, the block is realized as a triangle matrix.
00069   
00070  public:
00071 
00072   dim2taylor();     // Default constructor
00073   dim2taylor(int);  // Constructor for special order (int)
00074   dim2taylor(const dim2taylor& ); // Copy constructor
00075   
00076   ~dim2taylor();
00077 
00078   dim2taylor& operator=(const dim2taylor& );
00079   ivector& operator[](int n) const; 
00080 
00081   friend dim2taylor init_var(int, int, const interval& );
00082   friend dim2taylor init_const(int, const interval& );
00083 
00084   int get_p() const {return p;};
00085   int order() const {return p;}
00086 
00087   void print_dim2taylor();
00088   void print_dim2taylor(std::ostream&);
00089 
00090   friend std::ostream& operator<< (std::ostream&, dim2taylor&);
00091 
00092 // Overloading the arithmetic operators:
00093 
00094   friend dim2taylor operator-(const dim2taylor& s);
00095   friend dim2taylor operator-(const dim2taylor&, const dim2taylor& );
00096   friend dim2taylor operator+(const dim2taylor&, const dim2taylor& );
00097   friend dim2taylor operator*(const dim2taylor&, const dim2taylor& );
00098   friend dim2taylor operator/(const dim2taylor&, const dim2taylor& );
00099 
00100   friend dim2taylor operator-(const interval&, const dim2taylor& );
00101   friend dim2taylor operator+(const interval&, const dim2taylor& );
00102   friend dim2taylor operator*(const interval&, const dim2taylor& );
00103   friend dim2taylor operator/(const interval&, const dim2taylor& );
00104 
00105   friend dim2taylor operator-(const dim2taylor&, const interval& );
00106   friend dim2taylor operator+(const dim2taylor&, const interval& );
00107   friend dim2taylor operator*(const dim2taylor&, const interval& );
00108   friend dim2taylor operator/(const dim2taylor&, const interval& );
00109 
00110   // Caution: possible conversion errors
00111   friend dim2taylor operator-(const real&, const dim2taylor& );
00112   friend dim2taylor operator+(const real&, const dim2taylor& );
00113   friend dim2taylor operator*(const real&, const dim2taylor& );
00114   friend dim2taylor operator/(const real&, const dim2taylor& );
00115 
00116   // Caution: possible conversion errors
00117   friend dim2taylor operator-(const dim2taylor&, const real& );
00118   friend dim2taylor operator+(const dim2taylor&, const real& );
00119   friend dim2taylor operator*(const dim2taylor&, const real& );
00120   friend dim2taylor operator/(const dim2taylor&, const real& );
00121 
00122   friend dim2taylor operator-(int, const dim2taylor& );
00123   friend dim2taylor operator+(int, const dim2taylor& );
00124   friend dim2taylor operator*(int, const dim2taylor& );
00125   friend dim2taylor operator/(int, const dim2taylor& );
00126 
00127   friend dim2taylor operator-(const dim2taylor&, int);
00128   friend dim2taylor operator+(const dim2taylor&, int);
00129   friend dim2taylor operator*(const dim2taylor&, int);
00130   friend dim2taylor operator/(const dim2taylor&, int);
00131 
00132   friend dim2taylor sqr(const dim2taylor& );
00133   friend dim2taylor sqrt(const dim2taylor& );
00134   friend dim2taylor sqrt1px2(const dim2taylor& );
00135   friend dim2taylor sqrtx2m1(const dim2taylor& );
00136   friend dim2taylor sqrtp1m1(const dim2taylor& );
00137   friend dim2taylor pow(const dim2taylor& , const interval& );
00138   friend dim2taylor power(const dim2taylor& , int );
00139 
00140   friend dim2taylor exp(const dim2taylor& );
00141   friend dim2taylor ln(const dim2taylor& );
00142   friend dim2taylor lnp1(const dim2taylor& );
00143 
00144   friend dim2taylor sin(const dim2taylor& );
00145   friend dim2taylor cos(const dim2taylor& );
00146   friend dim2taylor tan(const dim2taylor& );
00147   friend dim2taylor cot(const dim2taylor& );
00148 
00149   friend dim2taylor sinh(const dim2taylor& );
00150   friend dim2taylor cosh(const dim2taylor& );
00151   friend dim2taylor tanh(const dim2taylor& );
00152   friend dim2taylor coth(const dim2taylor& );
00153 
00154   friend dim2taylor asin(const dim2taylor& );
00155   friend dim2taylor acos(const dim2taylor& );
00156   friend dim2taylor atan(const dim2taylor& );
00157   friend dim2taylor acot(const dim2taylor& );
00158 
00159   friend dim2taylor asinh(const dim2taylor& );
00160   friend dim2taylor acosh(const dim2taylor& );
00161   friend dim2taylor atanh(const dim2taylor& );
00162   friend dim2taylor acoth(const dim2taylor& );
00163 
00164   friend dim2taylor erf(const dim2taylor& );
00165   friend dim2taylor erfc(const dim2taylor& );
00166 
00167   friend void f_g_u(const dim2taylor& , const dim2taylor& , const dim2taylor& ,
00168                           int ); 
00169 };
00170 
00171 dim2taylor init_var(int, int, const interval& );
00172 dim2taylor init_const(int, const interval& );
00173 std::ostream& operator<< (std::ostream&, dim2taylor&);
00174 
00175 dim2taylor operator-(const dim2taylor& s);
00176 dim2taylor operator-(const dim2taylor&, const dim2taylor& );
00177 dim2taylor operator+(const dim2taylor&, const dim2taylor& );
00178 dim2taylor operator*(const dim2taylor&, const dim2taylor& );
00179 dim2taylor operator/(const dim2taylor&, const dim2taylor& );
00180 
00181 dim2taylor operator-(const interval&, const dim2taylor& );
00182 dim2taylor operator+(const interval&, const dim2taylor& );
00183 dim2taylor operator*(const interval&, const dim2taylor& );
00184 dim2taylor operator/(const interval&, const dim2taylor& );
00185 
00186 dim2taylor operator-(const dim2taylor&, const interval& );
00187 dim2taylor operator+(const dim2taylor&, const interval& );
00188 dim2taylor operator*(const dim2taylor&, const interval& );
00189 dim2taylor operator/(const dim2taylor&, const interval& );
00190 
00191 dim2taylor operator-(const real&, const dim2taylor& );
00192 dim2taylor operator+(const real&, const dim2taylor& );
00193 dim2taylor operator*(const real&, const dim2taylor& );
00194 dim2taylor operator/(const real&, const dim2taylor& );
00195 
00196 dim2taylor operator-(const dim2taylor&, const real& );
00197 dim2taylor operator+(const dim2taylor&, const real& );
00198 dim2taylor operator*(const dim2taylor&, const real& );
00199 dim2taylor operator/(const dim2taylor&, const real& );
00200 
00201 dim2taylor operator-(int, const dim2taylor& );
00202 dim2taylor operator+(int, const dim2taylor& );
00203 dim2taylor operator*(int, const dim2taylor& );
00204 dim2taylor operator/(int, const dim2taylor& );
00205 
00206 dim2taylor operator-(const dim2taylor&, int);
00207 dim2taylor operator+(const dim2taylor&, int);
00208 dim2taylor operator*(const dim2taylor&, int);
00209 dim2taylor operator/(const dim2taylor&, int);
00210 
00211 dim2taylor sqr(const dim2taylor& );
00212 dim2taylor sqrt(const dim2taylor& );
00213 dim2taylor sqrt1px2(const dim2taylor& );
00214 dim2taylor sqrtx2m1(const dim2taylor& );
00215 dim2taylor sqrtp1m1(const dim2taylor& );
00216 dim2taylor pow(const dim2taylor& , const interval& );
00217 dim2taylor power(const dim2taylor& , int );
00218 
00219 dim2taylor exp(const dim2taylor& );
00220 dim2taylor ln(const dim2taylor& );
00221 dim2taylor lnp1(const dim2taylor& );
00222 
00223 dim2taylor sin(const dim2taylor& );
00224 dim2taylor cos(const dim2taylor& );
00225 dim2taylor tan(const dim2taylor& );
00226 dim2taylor cot(const dim2taylor& );
00227 
00228 dim2taylor sinh(const dim2taylor& );
00229 dim2taylor cosh(const dim2taylor& );
00230 dim2taylor tanh(const dim2taylor& );
00231 dim2taylor coth(const dim2taylor& );
00232 
00233 dim2taylor asin(const dim2taylor& );
00234 dim2taylor acos(const dim2taylor& );
00235 dim2taylor atan(const dim2taylor& );
00236 dim2taylor acot(const dim2taylor& );
00237 
00238 dim2taylor asinh(const dim2taylor& );
00239 dim2taylor acosh(const dim2taylor& );
00240 dim2taylor atanh(const dim2taylor& );
00241 dim2taylor acoth(const dim2taylor& );
00242 
00243 dim2taylor erf(const dim2taylor& );
00244 dim2taylor erfc(const dim2taylor& );
00245 
00246 
00247 
00248 /*--------------------------------------------------------------------------
00249 
00250 Class dim2taylor_vector: For definition and initialization of objects
00251                          of the class dim2taylor respective to the two
00252                          independent variables x and y.
00253 
00254 --------------------------------------------------------------------------*/
00255 class dim2taylor_vector{  // Vector for independent variables
00256  private:
00257   
00258   int dim; // Dimension of the vector
00259   int lb;
00260   int ub;
00261 
00262   int p_el;
00263   dim2taylor* comp; // Pointer to a dyn. array of elements of type dim2taylor
00264   
00265  public:
00266     // Constructors:
00267     dim2taylor_vector(); // Default constructor
00268     dim2taylor_vector(int, int, int);  // order, lb, ub;
00269     dim2taylor_vector(const dim2taylor_vector& );
00270   
00271     ~dim2taylor_vector();
00272     // Member functions
00273     int get_dim()  const {return dim;};   // Number of elements 
00274                                           // of type dim2taylor
00275     int get_lb ()  const {return lb;};    // lb index of the array
00276     int get_ub ()  const {return ub;};    // ub index of the array
00277     int get_p_el() const {return p_el;};  // p_el: Order of the
00278                                           // Taylor expansion; 
00279     friend int Lb(const dim2taylor_vector&); 
00280     friend int Ub(const dim2taylor_vector&); 
00281     // Operators
00282     dim2taylor_vector& operator=(const dim2taylor_vector& );
00283     dim2taylor& operator[](int n) const;  
00284 
00285     // Function for initialization of objects of type dim2taylor_vector:
00286     friend dim2taylor_vector init_var(int, ivector&);
00287 
00288 };
00289 
00290 int Lb(const dim2taylor_vector&); 
00291 int Ub(const dim2taylor_vector&); 
00292 dim2taylor_vector init_var(int, ivector&);
00293 
00294 } // end of namespace taylor
00295 
00296 #endif

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