-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQuantum.h
More file actions
69 lines (60 loc) · 1.79 KB
/
Quantum.h
File metadata and controls
69 lines (60 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "Matrix.h"
#include "Complex.h"
#include "math.h"
using MatMath::Matrix;
using ComplexMath::Complex;
typedef Complex<double> Cplex;
typedef Matrix<Cplex> CplexMat;
namespace QComputing {
enum class Pauli { I, H, X, Y, Z };
CplexMat ei(int n, int i)
{
CplexMat e(n, 1);
e.setPos(i, 0, Cplex(1, 0));
return e;
}
CplexMat sigma_(enum Pauli in)
{
CplexMat result(2, 2);
switch (in)
{
case Pauli::I: { Cplex c0[2] = { Cplex(1, 0), Cplex(0, 0) };
Cplex c1[2] = { Cplex(0, 0), Cplex(1, 0) };
result.setCol(c0, 0);
result.setCol(c1, 1);
result.display();
return result; }
case Pauli::H: { double i = (1 / std::sqrt(2));
Cplex c0[2] = { Cplex(i, 0), Cplex(i, 0) };
Cplex c1[2] = { Cplex(i, 0), Cplex(-i, 0) };
result.setCol(c0, 0);
result.setCol(c1, 1);
//result.display();
return result; }
case Pauli::X: { Cplex c0[2] = { Cplex(0, 0), Cplex(1, 0) };
Cplex c1[2] = { Cplex(1, 0), Cplex(0, 0) };
result.setCol(c0, 0);
result.setCol(c1, 1);
//result.display();
return result; }
case Pauli::Y: { Cplex c0[2] = { Cplex(0, 0), Cplex(0, -1) };
Cplex c1[2] = { Cplex(0, 1), Cplex(0, 0) };
result.setCol(c0, 0);
result.setCol(c1, 1);
//result.display();
return result; }
case Pauli::Z: { Cplex c0[2] = { Cplex(1, 0), Cplex(0, 0) };
Cplex c1[2] = { Cplex(0, 0), Cplex(-1, 0) };
result.setCol(c0, 0);
result.setCol(c1, 1);
//result.display();
return result; }
default: { Cplex c0[2] = { Cplex(1, 0), Cplex(0, 0) };
Cplex c1[2] = { Cplex(0, 0), Cplex(1, 0) };
result.setCol(c0, 0);
result.setCol(c1, 1);
result.display();
return result; }
}
}
}