#ifndef BFM_RANDOMMATRIX_H #define BFM_RANDOMMATRIX_H #include #include #include #include #include #include #include #include #include "Matrix.h" namespace BFM_Krylov{ /**Random real vector**/ template void RandomReal(std::vector &A, int seed){ srand48(seed);for(int i=0;i void RandomComplex(std::vector &A, int seed){ srand48(seed);for(int i=0;i void RandomComplexUnit(std::vector &A, int seed){ srand48(seed);for(int i=0;i void RandomRealUnit(std::vector &A, int seed){ srand48(seed);for(int i=0;i void RandomReal(std::vector > &A, int seed){ int M = A.size(); srand48(seed); for(int i=0;i void RandomComplex(std::vector > &A, int seed){ int M = A.size(); srand48(seed); for(int i=0;i void RandomComplex(Matrix &A, int seed){ int M = A.dim; srand48(seed); for(int i=0;i void RandomReal(Matrix &A, int seed){ int M = A.dim; srand48(seed); for(int i=0;i void RandomUnitary(Matrix &A, int seed){ int M = A.dim; std::vector< std::vector > q(M); srand48(seed); for(int i=0;i AT(q); A = AT; } /**Random Hermitian matrix Adag = A **/ template void RandomHermitian(Matrix &A, int seed){ int M = A.dim; srand48(seed); for(int i=0;i void RandomSymmetric(Matrix &A, int seed){ int M = A.dim; srand48(seed); for(int i=0;i void RandomRealSymmetric(Matrix &A, int seed){ int M = A.dim; srand48(seed); for(int i=0;i void RandomComplexDiagonal(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int j=0;j void RandomRealDiagonal(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int j=0;j void RandomUnitaryDiagonal(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int j=0;j void RandomHessenberg(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int i=0;i void RandomRealHessenberg(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int i=0;i void RandomTridiagonal(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int i=0;i void RandomSymmTridiagonal(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int i=0;i void RandomHermTridiagonal(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int i=0;i void RandomRealSymmTridiagonal(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int i=0;i void RandomTriangular(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int i=0;i void RandomReduced(Matrix &A, int seed){ int M = A.dim; srand48(seed); A.Fill(0.0); for(int i=0;i 0.5){A( T( drand48(),drand48() ) , i, i-1); i++;} } } } #endif /* int main(void){ int M = 5; Matrix > A(M) , B(M), C(M); RandomUnitary(A,1234567); B = A.Hermitian(); A = B*A; cout << "Unitary " << endl; A.Out(); RandomHermitian(A,1234567); B = A.Hermitian(); A = A - B; cout << "Hermitian " << endl; A.Out(); RandomSymmetric(A,1234567); B = A.Transpose(); A = A - B; cout << "Symmetric " << endl; A.Out(); RandomComplexDiagonal(A,1234567); cout << "Complex Diagonal " << endl; A.Out(); RandomRealDiagonal(A,1234567); cout << "Real Diagonal " << endl; A.Out(); RandomUnitaryDiagonal(A,1234567); B = A.Hermitian(); A = B*A; cout << "Unitary Diagonal" << endl; A.Out(); RandomHessenberg(A,1234567); cout << "Hessenberg" << endl; A.Out(); RandomTriangular(A,1234567); cout << "Triangular" << endl; A.Out(); RandomReduced(A,1234567); cout << "Reduced" << endl; A.Out(); return 0; } */