00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00030
00031
00032
00035
00036
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 #ifndef _ITAYLOR_H
00062 #define _ITAYLOR_H
00063
00064
00065 #include <imath.hpp>
00066 #include <interval.hpp>
00067 #include <ivector.hpp>
00068 #include <idot.hpp>
00069
00070
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
00102
00104
00105
00106
00107
00108 class itaylor{
00109
00110 private:
00111 int p;
00112 ivector tayl;
00113
00114 static ivector faks;
00115 static int initialized;
00116 static void initialize();
00117
00118 public:
00119
00120 itaylor();
00121 itaylor(const itaylor& );
00122 explicit itaylor(int order);
00123 itaylor(int order, const real& value);
00124 itaylor(int order, const interval& value);
00125 ~itaylor(){;};
00126
00127
00128
00129 friend itaylor var_itaylor(int ord, const real& c);
00130 friend itaylor var_itaylor(int ord, const interval& c);
00131
00132
00133
00134 friend itaylor const_itaylor(int ord, const real& c);
00135 friend itaylor const_itaylor(int ord, const interval& c);
00136
00137
00138 itaylor operator=(const itaylor& );
00139 itaylor operator=(int);
00140 itaylor operator=(const real& );
00141 itaylor operator=(const interval& );
00142 itaylor operator=(const ivector&);
00143
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
00152 interval& operator[](int n);
00153 int order() {return p;}
00154
00155
00156 interval operator()(interval x);
00157
00158
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
00164 friend interval get_j_derive(const itaylor& x, int j);
00165
00166
00167 friend void print_itaylor(const itaylor& x);
00168
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
00175
00176
00177 friend itaylor operator-(const itaylor& x);
00178
00179
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
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
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
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
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
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
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
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
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 }
00360
00361 #endif