const Matrix<complex<double> > randomMatrix( Uniform<double>& generator, const int dimension, const double upperBound ) { Matrix<complex<double> > tmp( dimension, dimension, complex<double>(0.0,0.0) ); for ( int i=0; i<dimension; i++ ) { tmp[i][i] = generator.random(); for ( int j=0; j<i; j++ ) { tmp[j][i] = complex<double>( generator.random() - 0.5, generator.random() - 0.5 ); tmp[i][j] = conj( tmp[j][i] ); } } double trace = 0.0; for ( int i=0; i<dimension; i++ ) { trace += tmp[i][i].real(); } if ( trace < ZERO ) throw Fpe("trace too small"); for ( int i=0; i<dimension; i++ ) { for ( int j=0; j<dimension; j++ ) { tmp[i][j] /= trace; tmp[i][j] *= upperBound; } } return tmp; }
void printRandoms() { Uniform<T> x; //x.seed((unsigned int)time(0)); x.seed(5); int N=5; for (int i = 0; i < N; ++i) cout << setprecision(digits10(T())) << LD_HACK(x.random()) << endl; cout << endl; }