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 #ifndef _edoSamplerNormalAdaptive_h
00029 #define _edoSamplerNormalAdaptive_h
00030
00031 #include <cmath>
00032 #include <limits>
00033
00034 #include <edoSampler.h>
00035
00043 #ifdef WITH_EIGEN
00044
00045 template< class EOT, typename D = edoNormalAdaptive< EOT > >
00046 class edoSamplerNormalAdaptive : public edoSampler< D >
00047 {
00048 public:
00049 typedef typename EOT::AtomType AtomType;
00050
00051 typedef typename D::Vector Vector;
00052 typedef typename D::Matrix Matrix;
00053
00054 edoSamplerNormalAdaptive( edoRepairer<EOT> & repairer )
00055 : edoSampler< D >( repairer)
00056 {}
00057
00058
00059 EOT sample( D& distrib )
00060 {
00061 unsigned int N = distrib.size();
00062 assert( N > 0);
00063
00064
00065 Vector T( N );
00066 for ( unsigned int i = 0; i < N; ++i ) {
00067 T( i ) = rng.normal();
00068 }
00069 assert(T.innerSize() == N );
00070 assert(T.outerSize() == 1);
00071
00072
00073 Vector sol = distrib.mean()
00074 + distrib.sigma()
00075 * distrib.coord_sys() * (distrib.scaling().cwiseProduct(T) );
00076 assert( sol.size() == N );
00077
00078
00079
00080
00081 EOT solution( N );
00082 for( unsigned int i = 0; i < N; i++ ) {
00083 solution[i]= sol(i);
00084 }
00085
00086 return solution;
00087 }
00088 };
00089 #endif // WITH_EIGEN
00090
00091 #endif // !_edoSamplerNormalAdaptive_h