| 490 | } |
| 491 | |
| 492 | QMatrix getRandomQMatrix(int dim) { |
| 493 | DEMAND( dim > 1 ); |
| 494 | |
| 495 | QMatrix matr = getZeroMatrix(dim); |
| 496 | for (int i=0; i<dim; i++) { |
| 497 | for (int j=0; j<dim; j++) { |
| 498 | |
| 499 | // generate 2 normally-distributed random numbers via Box-Muller |
| 500 | qreal a = rand()/(qreal) RAND_MAX; |
| 501 | qreal b = rand()/(qreal) RAND_MAX; |
| 502 | if (a == 0) a = REAL_EPS; // prevent rand()=0 creation of NaN |
| 503 | qreal r1 = sqrt(-2 * log(a)) * cos(2 * 3.14159265 * b); |
| 504 | qreal r2 = sqrt(-2 * log(a)) * sin(2 * 3.14159265 * b); |
| 505 | |
| 506 | matr[i][j] = r1 + r2 * (qcomp) 1i; |
| 507 | } |
| 508 | } |
| 509 | return matr; |
| 510 | } |
| 511 | |
| 512 | bool areEqual(QVector a, QVector b) { |
| 513 | DEMAND( a.size() == b.size() ); |
no test coverage detected