00001 // @(#)root/mathmore:$Id: KelvinFunctions.h 20882 2007-11-19 11:31:26Z rdm $ 00002 00003 // CodeCogs GNU General Public License Agreement 00004 // Copyright (C) 2004-2005 CodeCogs, Zyba Ltd, Broadwood, Holford, TA5 1DU, 00005 // England. 00006 // 00007 // This program is free software; you can redistribute it and/or modify it 00008 // under 00009 // the terms of the GNU General Public License as published by CodeCogs. 00010 // You must retain a copy of this licence in all copies. 00011 // 00012 // This program is distributed in the hope that it will be useful, but 00013 // WITHOUT ANY 00014 // WARRANTY; without even the implied warranty of MERCHANTABILITY or 00015 // FITNESS FOR A 00016 // PARTICULAR PURPOSE. See the Adapted GNU General Public License for more 00017 // details. 00018 // 00019 // *** THIS SOFTWARE CAN NOT BE USED FOR COMMERCIAL GAIN. *** 00020 // --------------------------------------------------------------------------------- 00021 00022 #ifndef ROOT_Math_KelvinFunctions 00023 #define ROOT_Math_KelvinFunctions 00024 00025 ////////////////////////////////////////////////////////////////////////// 00026 // // 00027 // KelvinFunctions // 00028 // // 00029 // Calculates the Kelvin Functions Ber(x), Bei(x), Ker(x), Kei(x), and // 00030 // their first derivatives. // 00031 // // 00032 ////////////////////////////////////////////////////////////////////////// 00033 00034 00035 namespace ROOT { 00036 namespace Math { 00037 00038 class KelvinFunctions 00039 { 00040 public: 00041 // The Kelvin functions and their first derivatives 00042 static double Ber(double x); 00043 static double Bei(double x); 00044 static double Ker(double x); 00045 static double Kei(double x); 00046 static double DBer(double x); 00047 static double DBei(double x); 00048 static double DKer(double x); 00049 static double DKei(double x); 00050 00051 // Utility functions appearing in the calculations of the Kelvin 00052 // functions. 00053 static double F1(double x); 00054 static double F2(double x); 00055 static double G1(double x); 00056 static double G2(double x); 00057 static double M(double x); 00058 static double Theta(double x); 00059 static double N(double x); 00060 static double Phi(double x); 00061 00062 // Include and empty virtual desctructor to eliminate compiler warnings 00063 virtual ~KelvinFunctions() {} 00064 00065 protected: 00066 // Internal parameters used to control calculation method and convegence 00067 static double fgMin; 00068 static double fgEpsilon; 00069 00070 }; 00071 00072 } // namespace Math 00073 } // namespace ROOT 00074 00075 00076 #endif 00077