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 /*--------------------------------------------------------------------------
00172 
00173 Class dim2taylor_vector: For definition and initialization of objects
00174                          of the class dim2taylor respective to the two
00175                          independent variables x and y.
00176 
00177 --------------------------------------------------------------------------*/
00178 class dim2taylor_vector{  // Vector for independent variables
00179  private:
00180   
00181   int dim; // Dimension of the vector
00182   int lb;
00183   int ub;
00184 
00185   int p_el;
00186   dim2taylor* comp; // Pointer to a dyn. array of elements of type dim2taylor
00187   
00188  public:
00189     // Constructors:
00190     dim2taylor_vector(); // Default constructor
00191     dim2taylor_vector(int, int, int);  // order, lb, ub;
00192     dim2taylor_vector(const dim2taylor_vector& );
00193   
00194     ~dim2taylor_vector();
00195     // Member functions
00196     int get_dim()  const {return dim;};   // Number of elements 
00197                                           // of type dim2taylor
00198     int get_lb ()  const {return lb;};    // lb index of the array
00199     int get_ub ()  const {return ub;};    // ub index of the array
00200     int get_p_el() const {return p_el;};  // p_el: Order of the
00201                                           // Taylor expansion; 
00202     friend int Lb(const dim2taylor_vector&); 
00203     friend int Ub(const dim2taylor_vector&); 
00204     // Operators
00205     dim2taylor_vector& operator=(const dim2taylor_vector& );
00206     dim2taylor& operator[](int n) const;  
00207 
00208     // Function for initialization of objects of type dim2taylor_vector:
00209     friend dim2taylor_vector init_var(int order, ivector& values);
00210 
00211 };
00212 
00213 } // end of namespace taylor
00214 
00215 #endif

Generated on Tue Feb 27 21:19:13 2007 for VFIS by  doxygen 1.4.4