00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __INTEGRATIONOFFUNCTIONS_H__
00017 #define __INTEGRATIONOFFUNCTIONS_H__
00018
00019 #include "../Utilities/Vector.h"
00020
00021 namespace Flood
00022 {
00023
00026
00027 class IntegrationOfFunctions
00028 {
00029 public:
00030
00031
00032
00033 explicit IntegrationOfFunctions(void);
00034
00035
00036
00037
00038 virtual ~IntegrationOfFunctions(void);
00039
00040
00041
00042
00043
00044
00045 double calculate_trapezoid_integral(double (*f)(double), double, double, int);
00046 double calculate_Simpson_integral(double (*f)(double), double, double, int);
00047
00048
00049
00050 double calculate_trapezoid_integral(const Vector<double>&, const Vector<double>&);
00051 double calculate_Simpson_integral(const Vector<double>&, const Vector<double>&);
00052
00053
00054
00055
00056
00057
00066
00067 template<class T>
00068 double calculate_trapezoid_integral(T& t, double (T::*f)(double), double a, double b, int n)
00069 {
00070 double trapezoid_integral = 0.0;
00071
00072
00073
00074 double h = (b-a)/(n-1.0);
00075
00076
00077
00078 double sum = (t.*f)(a)/2.0;
00079
00080 for(int i = 1; i < n-1; i++)
00081 {
00082 sum += (t.*f)(a + i*h);
00083 }
00084
00085 sum += (t.*f)(b)/2.0;
00086
00087
00088
00089 trapezoid_integral = h*sum;
00090
00091 return(trapezoid_integral);
00092 }
00093
00094
00095
00096
00097
00106
00107 template<class T>
00108 double calculate_Simpson_integral(T& t, double (T::*f)(double), double a, double b, int n)
00109 {
00110 double Simpson_integral = 0.0;
00111
00112
00113
00114 double h = (b-a)/(n-1.0);
00115
00116 double sum = (t.*f)(a)/3.0;
00117
00118 for(int i = 1; i < n-1; i++)
00119 {
00120 if(i%2 != 0)
00121 {
00122 sum += 4.0*(t.*f)(a + i*h)/3.0;
00123 }
00124 else
00125 {
00126 sum += 2.0*(t.*f)(a + i*h)/3.0;
00127 }
00128 }
00129
00130 sum += (t.*f)(b)/3.0;
00131
00132
00133
00134 Simpson_integral = h*sum;
00135
00136 return(Simpson_integral);
00137 }
00138
00139 };
00140
00141 }
00142
00143 #endif
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161