| 308 | } |
| 309 | |
| 310 | QMatrix getExponentialOfDiagonalMatrix(QMatrix a) { |
| 311 | |
| 312 | // ensure diagonal |
| 313 | for (size_t r=0; r<a.size(); r++) |
| 314 | for (size_t c=0; c<a.size(); c++) { |
| 315 | if (r == c) |
| 316 | continue; |
| 317 | DEMAND( real(a[r][c]) == 0. ); |
| 318 | DEMAND( imag(a[r][c]) == 0. ); |
| 319 | } |
| 320 | |
| 321 | // exp(diagonal) = diagonal(exp) |
| 322 | QMatrix diag = a; |
| 323 | for (size_t i=0; i<a.size(); i++) |
| 324 | diag[i][i] = exp(diag[i][i]); |
| 325 | |
| 326 | return diag; |
| 327 | } |
| 328 | |
| 329 | QMatrix getExponentialOfPauliMatrix(qreal angle, QMatrix a) { |
| 330 | QMatrix iden = getIdentityMatrix(a.size()); |