00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _MARKOVSOLVER_H
00010 #define _MARKOVSOLVER_H
00011
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00025
00027
00029
00030 class MarkovSolver : public MarkovSolverBase {
00031 public :
00032 MarkovSolver();
00033
00034 ~MarkovSolver();
00035
00036 Matrix* computeMatrixExponential();
00037
00038
00039 Matrix* computePadeApproximant( Matrix*, unsigned int );
00040
00041 static const Cinfo* initCinfo();
00043
00045 void reinit( const Eref&, ProcPtr );
00046 void process( const Eref&, ProcPtr );
00047
00049
00051 #ifdef DO_UNIT_TESTS
00052 friend void testMarkovSolver();
00053 #endif
00054
00055 private :
00056 };
00057
00058
00059
00060
00061 static double b13[14] =
00062 {64764752532480000.0, 32382376266240000.0, 7771770303897600.0,
00063 1187353796428800.0, 129060195264000.0, 10559470521600.0,
00064 670442572800.0, 33522128640.0, 1323241920.0,
00065 40840800.0, 960960.0, 16380.0, 182.0, 1.0};
00066
00067 static double b9[10] =
00068 {17643225600.0, 8821612800.0, 2075673600.0, 302702400.0,
00069 30270240.0, 2162160.0, 110880.0, 3960.0, 90.0, 1 };
00070
00071 static double b7[8] =
00072 {17297280, 8648640, 1995840, 277200, 25200, 1512, 56, 1};
00073
00074 static double b5[6] = {30240, 15120, 3360, 420, 30, 1};
00075
00076 static double b3[4] = {120, 60, 12, 1};
00077
00078 static double thetaM[5] = {1.495585217958292e-2, 2.539398330063230e-1,
00079 9.504178996162932e-1, 2.097847961257068e0, 5.371920351148152e0};
00080
00081 static unsigned int mCandidates[5] = {3, 5, 7, 9, 13};
00082
00083 #endif