Académique Documents
Professionnel Documents
Culture Documents
INFORMATION QUANTIQUES
Simulations avec le Quantum Toolbox in Python
NANA ENGO
ALHADJI MALLOUM
BSM
|ψi • W D0 • b0
|0i W • X D1 • b1
|0i X X Z |ψi
EPR U
Circuit intraportation
2.2.3 Unitarité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.4 Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.2 Attributs d’une classe Qobj et fonction opérant sur cette classe . . . . . . 19
iii
iv Table des matières
Sommaire
2.1 Mesure de grandeurs physiques et opérateurs
2.2 Opérateurs linéaires et représentation matricielle
2.3 QuTiP - États et opérateurs
2.4 Décomposition spectrale des opérateurs hermitiens
2.5 Inégalités d’Heisenberg
2.6 Exercices supplémentaires
2.7 Solutions des Exercices
Maintenant que nous sommes entrés dans le monde quantique, il est légitime de se demander
comment on y extrait l’information ou comment on y effectue la mesure sur un système. On le
fait grâce aux opérateurs qui sont des représentations mathématiques des grandeurs physiques
( section 2.1). L’essentiel de ce chapitre, très mathématique, est donc consacrée à l’algèbre
des opérateurs linéaires, à l’étude des propriétés des opérateurs hermitiens, opérateurs associés
aux grandeurs physiques (section 2.2). La section 2.3 est consacrée à l’apprentissage de la
représentation des vecteurs d’état et opérateurs avec l’excellente bibliothèque python QuTiP.
La décomposition spectrale (section 2.4) les fameuses inégalités d’Heisenberg (section 2.5)
achèvent ce chapitre.
La théorie quantique est avant tout une théorie des phénomènes microscopiques ou plus exacte-
ment nanoscopiques (10−9 ). Mais la physique est macroscopique (les microscopes, accélérateurs
de particules, etc., sont des objets macroscopiques), et il est donc indispensable que les résul-
tats simples de la théorie classique puissent se retrouver en théorie quantique. D’autre part,
1
2 2. Mesure de l’information et opérateurs linéaires
Reprenons le chemin du laboratoire où d’une source nous faisons sortir un jet monocinétique
d’atomes électriquement neutres argent (Ag), paramagnétiques, porteurs d’un moment magné-
tique intrinsèque de spin. Nous avons ainsi préparer N quantons indépendamment dans le même
état |ψi. Ces atomes traversent l’entrefer d’un aimant où règne un fort gradient d’induction
magnétique ∂B ∂z . Chaque atome est alors soumis à une force Fz = µz ∂z , où µz est la projection
∂B
du moment magnétique de spin de l’atome sur le vecteur unitaire z. Lorsque l’induction ma-
gnétique est nulle, on observe, sur une plaque de verre placée perpendiculairement au jet à une
certaine distance de la sortie de l’entrefer, une tache unique de dimension finie en raison de la
dispersion des vitesses. En présence du gradient d’induction magnétique, la théorie classique
prévoit un élargissement de la tache précédente du fait de l’orientation à priori aléatoire des
moments magnétiques µ lors de la production des atomes2 .
Jet d’atomes d’Ag
Prédiction classique
N
Observation
Source
S
Figure 2.1.1 – Expérience de Stern et Gerlach : classiquement, on devrait avoir une tache unique de
dimension finie, mais on observe plutôt deux taches symétriques d’égales intensités aux points (z+ ) et (z− ).
Cependant, on observe (voir la Figure 2.1.1), que les impacts des atomes, pourtant iden-
tiques, se répartissent en deux taches quasi-ponctuelles d’égales intensités I+ et I− (de moment
1 Maisoù est la limite entre le monde macroscopique et le monde microscopique ?
2 Les
atomes de moment magnétique µ antiparallèle à Oz devraient subir une déviation maximale vers le haut
pour ∂B
∂z < 0. Ceux de µ parallèle à Oz, une déviation maximale vers le bas. Toutes les déviations intermédiaires
étant possibles.
2.1. Mesure de grandeurs physiques et opérateurs 3
Il apparaît que l’appareil de Stern et Gerlach instaure une corrélation dans le faisceau
émergent entre l’état de spin et sa situation spatiale. On reconnaît alors un spin up à ce qu’il a
comme point d’impact la position (z+ ) et un spin down à ce qu’il y a comme point d’impact la
position (z− ). La distance entre ces deux points étant proportionnelle au gradient ∂B∂z . Ainsi, un
atome initialement dans un état de spin quelconque |ψi (orientation des moments magnétiques
à priori quelconque), donne après une mesure de la grandeur physique spin S, une valeur
µ+ = + h̄2 ou µ− = − h̄2 , signifiant qu’après la mesure l’atome est dans l’état |+i ou |−i. Ainsi,
lors de son interaction avec l’appareil de mesure, le quanton change d’état. On
dit qu’il y a réduction du paquet d’ondes, autrement, la mesure a perturbé le système.
Cette réduction force l’émergence classique d’un résultat unique.
Du point de vue classique, cette situation est paradoxale puisque le comportement de chaque
atome ne peut être prédit, bien qu’il soit tous préparés de la même façon et indépendamment.
Dans chaque atome individuel, il existe l’alternative dichotomique d’être dans l’état spin up ou
spin down.
avec
1
α+ = α− = √ . (2.1.3)
2
Par suite, la probabilité totale est (complétude du système)
L’effet de l’appareil de mesure est décrit par l’opérateur S qui opère sur l’état |ψi pour
4 2. Mesure de l’information et opérateurs linéaires
donner |+i ou |−i, états propres de S avec les valeurs propres + h̄2 ou − h̄2 :
+ 2 |+i ,
h̄
S |ψi = ou (2.1.5)
h̄
− 2 |−i .
On dit que l’opérateur transforme un vecteur d’état de l’espace de Hilbert en un autre vecteur
d’état du même espace de Hilbert.
Autrement, le lien entre ce qu’on peut observer du système, une grandeur physique A, et
le système, se fait à travers le lien entre l’opérateur A associé à cette grandeur physique
et le vecteur d’état.
Autant que possible, nous utiliserons des lettres majuscules (droites) pour les opérateurs.
Sz Sz Sz
|−iz |−iz |−iz
Splitter Filtre ne laissant passer que |+iz Filtre ne laissant passer que |−iz
Figure 2.1.2 – Stern et Gerlach comme séparateur du jet atomique ou splitter et comme filtres.
Nous allons maintenant réaliser diverses expériences sur le spin en utilisant les symboles de
la Figure 2.1.2 pour les divers rôles des appareils de Stern et Gerlach.
Figure 2.1.3 – Mesure de Sz dans l’état |+i. Figure 2.1.4 – Mesure de Sx dans l’état |+i.
2.1. Mesure de grandeurs physiques et opérateurs 5
On filtre maintenant |+i que fait pénétrer dans Sx . On filtre la sortie de ce SG pour ne
laisser sortir que |+ix qui va pénétrer dans un Sz . On constate avec surprise qu’on a à la sortie
des atomes dans les états propres |+i et |−i de Sz , alors que |−i a été exclus à la sortie du
premier SG, Sz .
Cette expérience met en exergue le fait qu’en théorie quantique, l’état final du système
dépend seulement de l’état de l’atome qui entre dans le dernier SG et de son action avec cet
appareil. Autrement, il n’y a pas de mémoire sur l’histoire passée du système.
En clair, comme le faisceau qui entre dans le dernier SG, Sz est dans l’état |+ix qui n’est
pas état propre de Sz , il va se projeter dans la base {|+i , |−i} des états propres de Sz . C’est
pourquoi on a
1. un faisceau où les atomes ont un spin + h̄2 avec la probabilité |h+ |+ix |2 = 12 ;
2. un faisceau où les atomes ont un spin − h̄2 avec la probabilité |h− |+ix |2 = 12 .
Donc, la mesure de A sur un seul système dans l’état |ψi donne l’information
sur l’état du système après la mesure.
6. Pour obtenir l’information sur l’état du système avant la mesure il faut effectuer N
mesures de A sur N systèmes identiques5 dans l’état |ψi afin d’obtenir toutes les
modalités possibles ai :
|ψi = |ϕi i hϕi | |ψi = (2.1.9a)
X X
αi |ϕi i ,
i i
A |ψi = αi A |ϕi i = (2.1.9b)
X X
αi ai |ϕi i .
i i
L’ensemble des états propres |ϕi i de la grandeur physique forme une base orthonormée
1, si i = j.
hϕi |ϕj i = (2.1.10)
0, sinon.
D’où les propriétés suivantes de leurs probabilités de transition
P(hϕi |ϕj i) = 0, ∀i, j i 6= j (disjonction),
(2.1.11)
i P(hϕi |ψi) = 1, ∀ |ψi (complétude).
P
3 Les
propriétés d’un opérateur hermitien sont étudiées à la section 2.2
4 C’est
un état simple qui peut être qualifié de "déterministe".
5 On peut par exemple réaliser une expérience de Stern et Gerlach avec N voies de sorties au lieu de deux
Les opérateurs de la théorie quantique sont linéaires et cette linéarité est intimement lié au
principe de superposition.
A: H −→ H
(2.2.2)
|ψi −→ |ϕi = |Aψi ≡ A |ψi
vérifiant la propriété
Afin de déterminer l’effet de l’opérateur linéaire A sur n’importe quel état |ψi dans une
base {|ii}, utilisons la décomposition (2.1.9a)
|ϕi = A |ψi = P |ii hi| A |ψi ,
i
⇒ |ϕi = (2.2.6)
X
|ii hi| A |ji hj |ψi .
|ψi = j |ji hj |ψi ,
P
i,j
Il apparaît ainsi que si l’on connaît les matrices d’amplitudes ou éléments de matrice
entre tous les états {|ii} de cette base, on peut déterminer l’effet de l’opérateur A sur n’importe
quel état |ψi.
Les opérateurs sont donc définis par les matrices d’amplitudes (n × n) dans une repré-
sentation particulière
|Aji −→
A11 A12 · · · A1j · · ·
A
21 A22 · · · A2j · · ·
A −→ hi| A |ji = hi |Aji = Aij ⇐⇒ . .. (2.2.8)
.
..
hi| ↓ .
Ai2 · · · Aij · · ·
Ai1
.. .. ..
. . .
où hν |ii et hj |µi sont les éléments de la transformation de la base {|ii} à la base {|µi} et
vice-versa.
et
s
1 2 d
Pmn = hm| P |ni = √ hm| |ni
2 α dx
1 √ √
= √ (− n + 1hm |n + 1i + nhm |n − 1i) (2.2.12)
2
1 √ √
= √ (− n + 1δm,n+1 + nδm,n−1 ).
2
Pour n, m ∈ [0, 3] on a les représentations matricielles ci-dessous.
Xmn |X0i |X1i |X2i |X3i Pmn |P 0i |P 1i |P 2i |P 3i
h0| 0 √1
2
0 0 h0| 0 √1
2
0 0
h1| √1
2
0 1 0 h1| − √12 0 1 0
q q
h2| 0 1 0 3
2 h2| 0 −1 0 3
2
q q
h3| 0 0 3
2 0 h3| 0 0 − 3
2 0
(A† )† = A, (2.2.14a)
(λA + µB)† = λ∗ A† + µ∗ B † , (2.2.14b)
† † †
(AB) = B A . (2.2.14c)
2. remplacer
Ainsi, les matrices représentant A et A† dans une représentation sont hermitiennes conju-
guées l’une de l’autre, au sens des matrices : on passe de l’une à l’autre par une conjugaison
complexe suivie d’une symétrie par rapport à la diagonale principale.
!†
2 + i −i 2−i 4+i
!
= ; (2.2.18a)
4−i 2+i i 2−i
!†
i 2+i
!
−i −4i
= ; (2.2.18b)
4i 3 − 2i 2 − i 3 + 2i
!†
a + ib c + id
!
a − ib e − if
= ; (2.2.18c)
e + if g + ih c − id g − ih
†
−85 −35 79
−85 −55 −37
−35 97 50 = −55 97 56 . (2.2.18d)
79 56 49 −37 50 49
Ceci nous permet de comprendre aisément pourquoi Zurek affirme que la réalité serait
quantique mais aurait une apparence classique par le fait que les éléments non diagonaux sont
très petits et leurs effets inobservables de façon pratique.
La fonction d’un opérateur f (A) peut être développée comme une série entière
∞
f (A) = cn An . (2.2.22)
X
Par exemple,
1 1
eA = I + A + A2 + . . . + An + . . . (2.2.23)
2 n!
Si |ψi est vecteur propre de A avec la valeur propre a, |ψi est aussi vecteur propre de
f (A) avec la valeur propre f (a)
∞ ∞
f (A) |ψi = cn An |ψi = cn an |ψi = f (a) |ψi . (2.2.24)
X X
n n
1 0 e1 0
! !
Pour A = , on a l’opérateur eA = .
0 −1 0 e−1
0 1
!
Pour B = , on a pour tout entier n, B 2n = I2 , la matrice unité de rang 2, et
1 0
B 2n+1 = B, et par conséquent,
∞ ∞ ∞ ∞
(iαB)2n X (iαB)2n+1 (iα)2n (iα)2n+1
eiαB = + = I2 +B
X X X
n=0 (2n)! n=0 (2n + 1)! n=0 (2n)! n=0 (2n + 1)! (2.2.25)
= (cos α)I2 + i(sin α)B.
Si les ai sont les valeurs propres de l’opérateur A dans la base {|ϕi i}, la trace de cet
opérateur est la somme de ses éléments diagonaux
est
Tr(A) = h0| A |0i + h1| A |1i = 2i + 4. (2.2.28b)
2.2.3 Unitarité
Un opérateur S est dit unitaire s’il est l’inverse de son adjoint, i.e.,
S † = S −1 , i.e.,SS † = S † S = I, (2.2.29)
alors
S = SI = S |ψi i hψi | = (2.2.32)
X X
|ϕi i hψi | ,
i i
et
S† = (2.2.33)
X
|ψi i hϕi | .
i
Et par suite,
SS † = |ϕi i hψi |ψj i hϕj | = |ϕi i δij hϕj | = I. (2.2.34)
X X
i,j i,j
Pour une colonne donnée, i |Sij |2 = 1 et pour une ligne donnée, j |Sij |2 = 1. Par
P P
conséquent, le résultat de l’action d’un opérateur unitaire sur un état normé donne un
état normé. On verra par la suite qu’il en résulte une non perte de l’information.
2.2. Opérateurs linéaires et représentation matricielle 13
Preuve. Si δλ → 0,
S(λ + δλ) = S(λ)S(δλ) ' (I − iδλB)S(λ), (2.2.37)
avec
dS
B = i . (2.2.38)
dλ λ=0
Alors
dS(λ)
= −iBS(λ). (2.2.39)
dλ
Par intégration on trouve, en tenant compte de S(0) = I et en posantG = B, S(λ) = e−iλG .
Il est à noter qu’il existe des opérateurs isométriques non unitaire ou anti-unitaire.
2.2.4 Projection
Une classe importante des opérateurs linéaires hermitiens est celle des opérateurs projecteurs
P caractérisés par les propriétés de normalisation, d’orthogonalité et d’hermiticité suivantes
Pi2 = Pi , (2.2.42a)
Pi Pj = δij Pi , (2.2.42b)
Pi† = Pi . (2.2.42c)
14 2. Mesure de l’information et opérateurs linéaires
L’opérateur projecteur
m≤n
Pi = (2.2.43)
X
|ii hi| ,
i=1
projette l’état |ψi sur la base orthonormée {|ii} de dimension m du sous-espace H0 de H (qui
est de dimension n) :
Pi |ψi = |ii hi| ψi = hi |ψi |ii = (2.2.44)
X X X
αi |ii .
i i i
On montre facilement que Pi est hermitien
Pi† = ( |ii hi|)† = |ii hi| = Pi , (2.2.45)
X X
i i
et qu’il vérifie la relation de normalisation
Pi2 = |ii hi |ii hi| = |ii hi| = Pi . (2.2.46)
X X
i i
Les seules valeurs propres d’un opérateur projecteur sont 0 et 1. En effet, si |pi est vecteur propre
de l’opérateur P avec la valeur propre p, P |pi = p |pi, la condition nécessaire et suffisante P 2 = P
entraîne
P 2 |pi − P |pi = 0 ⇒ p2 − p = p(p − 1) = 0, i.e., p = 0 ou p = 1. (2.2.47)
Il existe une classe de matrice 2 × 2, très importante en théorie quantique, appelée matrices
de Pauli σi ,
0 1 0 −i 1 0
! ! !
σx = X := , σy = Y := , σz = Z := . (2.2.49)
1 0 i 0 0 −1
Elles sont telles que
σi σj = iεijk σk + δij I, (2.2.50)
où le symbole de Levi-Civita εijk est un tenseur de rang 3 complètement anti-symétrique (dans
l’échange de n’importe quelle paire indices) :
QuTiP, Quantum Toolbox in Python, est une bibliothèque libre ou open-source de calculs en
optique quantique avec des applications en information quantique6 . Dans cette section, nous
allons apprendre à utiliser cette excellente bibliothèque pour simuler les concepts fondamentaux
de la théorie quantique que sont les états et les opérateurs.
La quasi-totalité des scripts présentés dans cette section ont été faites avec l’interpréteur
IPython7 , et présuppose que les modules de QuTiP ont déjà été chargés.
Etat - qutip.states
Dans cet ouvrage, les qutip.states qui seront couramment utilisés sont :
6 qutip.org, J. R. Johansson, P.D. Nation, and F. Nori, QuTiP 2 : A Python framework for the dynamics
of open quantum systems, Comp. Phys. Comm. 184, 1234 (2013) ou arxiv.org/abs/1211.6518
7 Celui intégré à l’IDE Spyder.
16 2. Mesure de l’information et opérateurs linéaires
11 Qobj data =
12 [[ 0.]
13 [ 1.]]
14
29 In [5]: ket("1")
30 Out[5]:
31 Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
32 Qobj data =
33 [[ 0.]
34 [ 1.]]
35
36 In [6]:ket("0")
37 Out[6]:
38 Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
39 Qobj data =
40 [[ 1.]
41 [ 0.]]
42
43 In [7]:bra("0")
44 Out[7]:
45 Quantum object: dims = [[1], [2]], shape = (1, 2), type = bra
46 Qobj data =
47 [[ 1. 0.]]
48
49 In [8]:bra("1")
50 Out[8]:
51 Quantum object: dims = [[1], [2]], shape = (1, 2), type = bra
52 Qobj data =
53 [[ 0. 1.]]
On définit soi-même les données du vecteurs d’etat qutip.states par Qobj([[a1 ],[a2 ],· · · ,[an ]])
pour les vecteurs colonnes ou ket, et Qobj([a1 , a2 , · · · , an ]) pour les vecteurs colonnes ou bra.
2.3. QuTiP - États et opérateurs 17
1
2
Par exemple, les vecteurs ligne 1 2 3 4 5 et colonne 3 peuvent être definis avec
4
5
le script suivant :
13 [[ 0.70710678 0. 0.70710678]]
Opérateurs - qutip.operators
Dans cet ouvrage, les qutip.operators qui seront couramment utilisés sont :
sigmax() σx sigmap() σ+
sigmay() σy sigmam() σ−
sigmaz() σz qeye(N) IN
32 Qobj data =
33 [[ 0. 0.]
34 [ 1. 0.]]
35
1 1 0
0 1 1
suivant :
Script QuTiP 2.3.5: Matrice carré 3 × 3 avec Qobj défini
1 In [1]: Qobj([[1,1,0],[1,-1,1],[0,1,1]]) # Matrice A
2 Out[1]:
3 Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isherm = True
4 Qobj data =
5 [[ 1. 1. 0.]
6 [ 1. -1. 1.]
7 [ 0. 1. 1.]]
2.3.2 Attributs d’une classe Qobj et fonction opérant sur cette classe
Nous avons dit qu’une classe d’objet Qobj() possède des attributs et des fonctions. Le Ta-
bleau 2.3.1 donne les commandes et descriptions de ces attributs et le Tableau 2.3.2 présente
les fonctions les plus usuelles qui agissent sur les instances Qobj().
17 In [21]: X = sigmax()
18
65 [[ 0.4472136 ]
66 [ 0.89442719]]
On peut effectuer sur un objet de classe Qobj(), presque toutes les opérations mathématiques
qu’on peut effectuer sur des variables ordinaires : l’addition, la soustraction, la multiplication,
la puissance, etc.
Le script ci-dessous donne illustre quelques
opérations mathématiques sur les matrices de
1 1 0
Pauli X, Y et Z ; l’opérateur B = 1 −1 1 et l’opérateur A = 2i |0i h0| + 3 |0i h1| − 2 |1i h0| +
0 1 1
4 |1i h1| (relation Équation 2.2.28).
21 In [36]: X*X # X 2
22 Out[36]:
23 Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isherm = True
24 Qobj data =
25 [[ 1. 0.]
26 [ 0. 1.]]
27
28 In [37]: commutator(X,Y)
29 Out[37]:
2.3. QuTiP - États et opérateurs 23
30 Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = False
31 Qobj data =
32 [[ 0.+2.j 0.+0.j]
33 [ 0.+0.j 0.-2.j]]
34
37 In [39]: B**3 # B 3
38 Out[39]:
39 Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isherm = True
40 Qobj data =
41 [[ 2. 3. 1.]
42 [ 3. -3. 3.]
43 [ 1. 3. 2.]]
44
45 In [40]: commutator(B,B)
46 Out[40]:
47 Quantum object: dims = [[3], [3]], shape = (3, 3), type = oper, isherm = True
48 Qobj data =
49 [[ 0. 0. 0.]
50 [ 0. 0. 0.]
51 [ 0. 0. 0.]]
52
53
56 In [31]:
57 A=2.j*ket("0")*bra("0")+3*ket("0")*bra("1")-2*ket("1")*bra("0")+4*ket("1")*bra("
58 1")
59
60 In [32]: A
61 Out[32]:
62 Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm = False
63 Qobj data =
64 [[ 0.+2.j 3.+0.j]
65 [-2.+0.j 4.+0.j]]
66
67 In [33]: A.tr()
68 Out[33]: (4+2j)
69
73 # Autre formulation de A
74
75 In [35]: A=2.j*fock(2,0)*fock(2,0).dag()+3*fock(2,0)*fock(2,1).dag()
76
77 In [36]:A=-2*fock(2,1)*fock(2,0).dag()+4*fock(2,1)*fock(2,1).dag()
24 2. Mesure de l’information et opérateurs linéaires
78
79 In [37]: A
80
81 Out[37]:
82 Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper, isherm =False
83 Qobj data =
84 [[ 0.+2.j 3.+0.j]
85 [-2.+0.j 4.+0.j]]
86
87 In [38]: A.tr()
88 Out[38]:(4+2j)
7 In [41]: Moy
8 Out[41]: 0.9999999999999998
0 √1 1 1
√ √
1 i 1 2 2i 3 2 + i(2 − 2)
hAi = hψ| A |ψi = ( + √ ) 1 √1
− 2 =
0 (2.3.4)
2 2 2 2
√1 8
0 0 0 2
2.3. QuTiP - États et opérateurs 25
3 In [7]: psi=.5*basis(3,0)-.5*1.j*basis(3,1)+basis(3,2)/sqrt(2)
4
5 In [8]: Amoy=expect(A,psi)
6
7 In [9]: Amoy
8 Out[9]: (0.5303300858899106+0.073223304703363135j)
9
11 psi1=(basis(2,0)+sqrt(2)*basis(2,1))/sqrt(3)
12 psi2=(1.j*basis(2,0)+sqrt(3)*basis(2,1))/2
13 psi3=((1+1.j)*basis(2,0)-1.j*basis(2,1))/sqrt(3)
14
15 bra0=basis(2,0).dag()
16 bra1=basis(2,1).dag()
17
1. calculer les valeurs propres et vecteurs propres de la matrice de Pauli Z. On notera vec1
et vec2 lesdits vecteurs propres ;
5. définir les projecteurs P1 et P2 sur les états propres de W. Vérifier les propriétés d’un
opérateur projecteur sur P1 et P2 , i.e., P†i = Pi , P2i = Pi .
28 2. Mesure de l’information et opérateurs linéaires
La sphère de Bloch permet de représenter l’état d’un qubit ou d’un système à deux niveaux.
La classe qutip.Bloch utilise la bibliothèque Matplotlib pour dessiner la sphère de Bloch et y
ajouter des points, des états ou même des vecteurs avec l’une des commandes de le Tableau 2.3.3.
Pour créer une sphère de Bloch, on utilise l’instruction Bloch(). Dans le script 2.3.12, on
créé une sphère de Bloch, on y ajoute des états, puis on visualise (voir la Figure 2.3.1 et la
Figure 2.3.2).
5 """
6 from qutip import *
2.3. QuTiP - États et opérateurs 29
17 b1.size=[4,4]
18 b1.font_size=14
19 b1.add_states([psi0,psi1,basis(2,0),basis(2,1)]) # Ajoute plusieurs vecteurs au
20 #même moment à la sphère b1
21
La classe Bloch3d est une classe qui génère la sphère de Bloch comme Bloch. Ces deux
commandes s’utilisent de la même manière. Il suffit juste de remplacer l’instruction Bloch()
par Bloch3d() (voir le script 2.3.12). On peut aussi ajouter des points sur la sphère de Bloch
créée (voir la Figure 2.3.3 et la Figure 2.3.4).
4 """
5 from qutip import *
6 from pylab import *
7
8 B3d=Bloch3d()
9 B3d.save('Images/Bloch3d0.png') #Sauvegarde l'image 'Bloch3d0.png'de la sphère
10 #dans le sous-repertoire 'Images' du repertoire courant
11 B3d.show() #Permet de visualiser la sphère 3d vide
12
19 # Ajout du vecteur y
20 yvec=[0,1,0]
21 B3d.add_vectors(yvec) # Ajout des points xz, yz et zz en mode multicolore
22
Comme nous l’avons vu à la sous-section 2.2.2, les opérateurs de théorie quantique asso-
ciés aux grandeurs physiques sont hermitiens. Leur spectre est par conséquent réel et
l’ensemble de leurs vecteurs propres est complet. Certains opérateurs, comme par
2.4. Décomposition spectrale des opérateurs hermitiens 31
exemple l’hamiltonien de l’oscillateur harmonique, ont un spectre discret. Il est alors possible
de construire une base hilbertienne à partir de l’ensemble de leurs vecteurs propres.
L’étude de ces propriétés importantes des opérateurs hermitiens est l’objet de cette section.
2. Si au contraire, il existe plusieurs vecteurs d’état indépendants qui soient vecteurs propres
de A, a est dit dégénéré. Son degré de dégénérescence est le nombre de vecteurs propres
linéairement indépendant qui lui sont associés.
On appelle spectre d’un opérateur A, l’ensemble de ses valeurs propres. On obtient ces va-
leurs propres en résolvant l’équation (2.4.1) : on dit qu’on diagonalise la matrice représentant
A. Les éléments diagonaux de cette matrice diagonale sont les valeurs propres.
2. Résoudre Aij αj = λαi (A |ψi = λ |ψi) pour chaque vecteur propre de A (les αi sont
les composantes ou amplitudes de projection de ces vecteurs propres de A). Ce qui
revient à résoudre un système de n équations à n inconnues.
L’ensemble des vecteurs propres {|ϕi i} d’un opérateur hermitien A forme une
base orthonormée dans H.
Dans un espace de Hilbert fini H, lorsque les valeurs propres ai sont non-dégénérées
permet soit
1. de faire passer un test |ϕi i à un système quantique (Eq. (2.1.9a)) lorsqu’on est intéressé
par la probabilité de trouver le système dans un état propre de l’opérateur A : la mesure
de Pi vaut 1 si le test réussi et vaut 0 si le test échoue ;
2. de mesurer la grandeur physique A lorsqu’on est plutôt intéressé par une valeur
propre ai de l’opérateur A.
Par exemple, lors de la mesure de la composante suivant Oz du spin avec l’appareil de Stern
et Gerlach, on obtient les valeurs ± h̄2 de la grandeur physique Sz . On peut aussi dire qu’on fait
passer aux atomes le test |+i et |−i avec les probabilités respectives |h+ |ψi |2 et |h− |ψi |2 de
déviations vers le haut et vers le bas.
Remarque 2.4.1
Dans une mesure idéale ou un test idéal, on suppose que le système physique n’est pas
détruite par la mesure. Lorsqu’on répète plusieurs fois une même mesure idéale, on a
mesure quantique sans démolition ou mesure Quantum Non Demolition (QND).
Preuve.
D’autre part,
A |ϕi i = ai |ϕi i ,
j | A |ϕi i = ai hϕ |ϕi i ,
hϕ
A |ϕj i = aj |ϕj i , ⇒ (2.4.6a)
hϕj | A |ϕi i = aj hϕj |ϕi i ,
ai 6= aj ,
Par conséquent, les vecteurs propres normalisés à l’unité d’un opérateur her-
mitien forment une base orthonormée de H lorsque toutes les valeurs propres
sont différentes. Physiquement, cela entraîne que toute amplitude peut être décomposée
suivant les amplitudes qui sont les projections des vecteurs propres de la grandeurs physique
(donc suivant les amplitudes de base). Le principe de superposition des états est donc lié au
caractère mathématique fermé du système des vecteurs propres d’un opérateur hermitien.
0 0 ··· 0
a1
0 ..
0
a2 ··· .
−1
=
.. (2.4.7)
S AS 0 0 a3 0 .
. ..
. ... ...
. . 0
0 · · · · · · 0 an
H = 1 0 1 . (2.4.8)
0 1 0
Les valeurs propres de cette matrice déterminées par l’équation caractéristique
−λ 1 0
0 1 −λ
√ √
sont, λ1 = 0, λ2 = 2, λ3 = − 2. Ainsi la matrice diagonalisée est
√
2 0 0
0
H̃ = 0 0
√ . (2.4.10)
0 0 − 2
L’ordre dans lequel on introduit les valeurs propres quand on écrit H est arbitraire. Mais
très souvent, on les introduit par ordre décroissant.
34 2. Mesure de l’information et opérateurs linéaires
a
Les vecteurs propres b de cette matrice sont telles que
0 1 0
a a
1 0 1 b = λ b , (2.4.11)
0 1 0 c c
b = λa,
a + c = λb,
(2.4.12)
b = λc,
|a| + |b|2 + |c|2
2
= 1.
1 1
−1
1 √ 1 1 √
2 , √ 0 , − 2 . (2.4.13)
2 2 2
1 λ= 2
√ 1 λ=0 1 √
λ=− 2
8 In [4]: evalues
9 Out[4]: array([ -1.41421356e+00, 1.55431223e-15, 1.41421356e+00])
10
11 In [5]: states
12 Out[5]:
13 array([ Quantum object: dims = [[3], [1]], shape = [3, 1], type = ket
14 Qobj data =
15 [[-0.5 ]
16 [ 0.70710678]
17 [-0.5 ]],
18 Quantum object: dims = [[3], [1]], shape = [3, 1], type = ket
19 Qobj data =
20 [[-0.70710678]
21 [ 0. ]
22 [ 0.70710678]],
2.4. Décomposition spectrale des opérateurs hermitiens 35
23 Quantum object: dims = [[3], [1]], shape = [3, 1], type = ket
24 Qobj data =
25 [[ 0.5 ]
26 [ 0.70710678]
27 [ 0.5 ]]], dtype=object)
1 0
! !
|+i = , |−i = , (2.4.14)
0 1
1 0
!
σz = = |+i h+| − |−i h−| , (2.4.15)
0 −1
avec les valeurs propres +1 et −1 respectivement. Dans la même base, la matrice de Pauli
σx s’écrit
0 1
!
σx = = |+i h−| + |−i h+| . (2.4.16)
1 0
Elle n’est pas diagonale dans cette base, mais elle est hermitienne :
σx† = (|+i h−| + |−i h+|)† = |+i h−| + |−i h+| = σx , (2.4.17)
et unitaire :
1 1 1 1
! !
|+ix = √ , |−ix = √ , (2.4.19)
2 1 2 −1
Cette nouvelle base {|+ix , |−ix } est reliée à la base {|+i , |−i} des vecteurs propres de
σz à travers la transformation unitaire
1 1 1
!
S=√ . (2.4.21)
2 1 −1
36 2. Mesure de l’information et opérateurs linéaires
Lorsqu’on a en général {ai } modalités avec des probabilités Pi , la valeur moyenne des
résultats de la grandeur physique A dans l’état |ψi est
Z
haiψ = ai Pi = (2.4.22a)
X
a dP(a),
i
= hAiψ = hψ |ϕi i ai hϕi | ψi = hψ| A |ψi . (2.4.22b)
X
i 2 2 2 2
Ce résultat est conforme aux attentes de la théorie classique lorsque l’orientation des dipôles
magnétiques n’a aucune direction privilégiée dans un champ d’induction magnétique inhomo-
gène.
Notons cependant, que ce point de vue restrictif de Copenhagen, est remis en cause par le
théorème EPR :
Théorème 2.4.4 – EPR
Si les prédictions de la théorie quantique concernant les résultats de mesure sont correctes
et si la réalité physique peut être décrite de façon locale (ou séparable), alors la théorie
quantique n’est pas complète ; il existe des éléments de réalité dont elle ne rend pas
compte.
Les applications de ce théorème sorte du cadre de cet ouvrage. Nous limiterons donc à celui
de Copenhagen.
2.4. Décomposition spectrale des opérateurs hermitiens 37
Lorsque [A, B] = 0 ou AB = BA, on dit que A et B commutent ou forme une paire d’Heisenberg.
Dans ce cas, faire d’abord un test sur une grandeur physique B et ensuite faire un test sur la
grandeur physique A est équivalent à faire d’abord un test sur une grandeur physique A et
ensuite faire un test sur la grandeur physique B. Autrement, l’ordre des tests sur les grandeurs
physiques A et B n’est plus important.
On dit que A et B anticommutent lorsque {A, B} = 0. L’ordre des tests sur les grandeurs
physiques A et B est très important.
5 In [3]: commutator(sigmax(),sigmay())-2j*sigmaz()
6 Out[3]:
7 Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isherm = True
8 Qobj data =
9 [[ 0. 0.]
10 [ 0. 0.]]
11
12 In [4]: commutator(sigmay(),sigmaz())-2j*sigmax()
13 Out[4]:
14 Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isherm = True
15 Qobj data =
16 [[ 0. 0.]
17 [ 0. 0.]]
18
19 In [5]: commutator(sigmaz(),sigmax())-2j*sigmay()
20 Out[5]:
38 2. Mesure de l’information et opérateurs linéaires
21 Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isherm = True
22 Qobj data =
23 [[ 0. 0.]
24 [ 0. 0.]]
25
Preuve.
i i = ai |ϕi i ⇒ AB |ϕi i = ai B |ϕi i ,
A |ϕ
[A, B] |ϕi i = 0 ⇒ A(B |ϕi i) = BA |ϕi i = ai (B |ϕi i),
(2.4.26)
• Si ai est non-dégénérée, les vecteurs propres qui lui sont associés sont colinéaires et B |ϕi i
est nécessairement proportionnel à |ϕi i. Donc |ϕi i est aussi vecteur propre de B.
• Si ai est dégénérée, on peut seulement dire que B |ϕi i appartient au sous-espace propre
Ha de A, correspondant à la valeur propre an . On dit que Ha est globalement invariant
sous l’action de B.
Preuve.
[A, B] = 0,
hψ1 | [A, B] |ψ2 i = hψ1 | AB |ψ2 i − hψ1 | BA |ψ2 i = 0,
A |ψ i = a ⇒ a1 hψ1 | B |ψ2 i − a2 hψ1 | B |ψ2 i = 0,
1 |ψ1 i ,
1
⇒ (2.4.27)
A |ψ2 i = a2 |ψ2 i , ⇒ (a1 − a2 ) |ψ1 i B |ψ2 i = 0,
⇒ hψ1 | B |ψ2 i = 0 puisque a1 6= a2 .
a1 6= a2 ,
2.4. Décomposition spectrale des opérateurs hermitiens 39
Autre démonstration :
A |ψ2 i = a2 |ψ2 i , ⇒
a1 6= a2 , ⇒ hψ1 | B |ψ2 i = 0, (voir Prop. 2.4.1),
(2.4.28)
puisque B |ψ2 i et |ψ1 i sont vecteurs propres de A avec des valeurs propres différentes (a1 6= a2 ).
Autrement, la matrice B n’a d’éléments de matrice non nuls que dans les sous-espaces
propres de A et se présente sous forme de blocs diagonaux.
1 0 0
Lz = 0 0 0 . (2.4.29)
0 0 −1
D’après le théorème 2.4.6, si A est un opérateur qui commute avec Lz , alors A ne peut
avoir des éléments de matrices non-nuls entre |u1 i et |u2 i ; |u2 i et |u3 i ; |u1 i et |u3 i. La
matrice représentant A est donc forcément diagonale, i.e., est de la forme
a11 0 0
A = 0 a22 0
. (2.4.30)
0 0 a33
1 0 0
Lz = 0 0 0 ,
2
(2.4.31)
0 0 1
elle ne peut avec des éléments de matrice non-nuls entre |u1 i et |u2 i ; |u1 i et |u3 i seule-
ment. Ainsi la forme générale de M est
m11 0 m13
M = 0 m22 0 . (2.4.32)
m31 0 m33
Cette propriété est très souvent utilisée pour rechercher le spectre de H. Si le spectre de A
est connu, et si [A, H] = 0, alors la dynamique quantique générée par H laisse invariant chaque
sous-espace propre de l’opérateur A.
Preuve. Démontrons la réciproque. Considérons {|abni}9 une base de vecteurs propres com-
muns à A et B :
A |abni = a |abni BA |abni = aB |abni = ab |abni
⇒ ⇒ [A, B] |abni = 0. (2.4.33)
B |abni = b |abni AB |abni = bA |abni = ab |abni
Ainsi, si deux opérateurs hermitiens A et B commutent, il existe une base orthonormée dans
laquelle elles sont diagonalisées simultanément. En effet, il est toujours possible d’effectuer des
diagonalisations partielles de B à l’intérieur de chacun des blocs diagonaux correspondant à
des sous-espaces propres de A.
1 0 0 1 0 0
H = 0 −1 0 , B = 0 0 1 . (2.4.34)
0 0 −1 0 1 0
1. Les opérateurs H et B sont hermitiens car ils sont représentés par des matrices
symétriques, réelles. Comme en plus, l’espace est de dimension finie, elles sont
diagonalisables et représentent donc des grandeurs physiques.
−1 0 0 1
! !
H2 = = −I2 et B2 = . (2.4.35)
0 −1 1 0
Il n’y a pas deux lignes semblables dans ce tableau des valeurs propres de H
et B : ces deux opérateurs forment donc un ECOC. Ce qui n’est pas le cas
pour chacun d’entre eux pris individuellement.
Le script 2.4.3 (et la sortie 2.4.4) reprend l’Exemple 2.4.4 avec la bibliothèque QuTiP.
12 #Test hermiticité
13 if H.isherm:
14 print('\n H est hermitien')
15 else:
16 print('\n H n\'est pas hermitien')
17
18 if B.isherm:
19 print('\n B est hermitien')
20 else:
21 print('\n B n\'est pas hermitien')
22
23 #Test de commutation
24 if H*B==B*H:
2.4. Décomposition spectrale des opérateurs hermitiens 43
25 print('\n H et B commutent')
26
27 #Diagonalisation simultannée de H et B
28 evalues, states =simdiag([H,B])
29 print('\n Les valeurs propres communs de H et B sont,')
30 print(evalues)
31 print('\n Les vecteurs propres communs de H et B sont,')
32 print(states)
33
5 H est hermitien
6
7 B est hermitien
8
9 H et B commutent
10
19 [ 0.]
20 [ 0.]]
21 Quantum object: dims = [[3], [1]], shape = [3, 1], type = ket
22 Qobj data =
23 [[ 0. ]
24 [ 0.70710678]
25 [ 0.70710678]]
26 Quantum object: dims = [[3], [1]], shape = [3, 1], type = ket
27 Qobj data =
28 [[ 0. ]
29 [ 0.70710678]
30 [-0.70710678]]]
31
32 H et B forment un ECOC
Supposons qu’on ait [A, B] 6= 0 et qu’une première mesure de A ait donné une valeur a et
projeté le vecteur d’état initial sur le vecteur propre |ai de A : A |ai = a |ai. Si on effectue une
mesure B immédiatement après celle de A, en général, |ai ne sera pas vecteur propre de B et le
résultat de la mesure ne sera pas connu qu’avec une certaine probabilité. En effet, si b est une
valeur propre de B correspondant au vecteur propre |bi, B |bi = b |bi, la probabilité de mesurer
b sera
P(b ← a) = |hb |ai |2 . (2.5.1)
Il existe donc des dispersions ou écarts quadratiques moyens des mesures effectuées à partir
d’un état initial |ψi arbitraire :
q q
∆ψ A = hA2 iψ − hAi2ψ = h(A − hAiψ I)2 iψ , (2.5.2a)
q q
∆ψ B = hB 2 iψ − hBi2ψ = h(B − hBiψ I)2 iψ . (2.5.2b)
Nous savons que nous pouvons écrire [A, B] = iC, avec C † = C. Considérons les opérateurs
hermitiens P et Q de valeur moyenne nulle, définis par
puisque hAiψ et hBiψ sont des nombres. Le vecteur (P + iλQ) |ψi, où λ ∈ R, a une norme au
carré positive :
Cependant, il faut faut préciser que c’est le quanton ou le système quantique lui-même
qui ne peut avoir simultanément une grandeur physique A et une grandeur physique B bien
déterminées. Et c’est de cette indétermination que découle naturellement les incertitudes des
mesures. La relation (2.5.7) est donc une conséquence du caractère spécifique des quantons et
non du jeu de la Nature en vertu duquel on ne saurait étendre nos connaissances à tout ce qui
existe.
Représentation matricielle.
1. L’espace des états d’un système physique est à trois dimensions. Soit {|ϕ1 i , |ϕ2 i , |ϕ3 i},
une base orthonormée de cet espace. On définit les kets
1 i 1 1
|ψ0 i = √ |ϕ1 i + |ϕ2 i + |ϕ3 i , |ψ1 i = √ (|ϕ1 i + i |ϕ3 i). (2.6.1)
2 2 2 3
2. Dans un espace à deux dimensions, on considère l’opérateur dont la matrice dans une
base orthonormée {|ϕ1 i , |u2 i} s’écrit
!
0 −i
Y= . (2.6.2)
i 0
Formule de Baker-Campbell-Hausdorff.
Soient A et B deux opérateurs qui commutent avec leur commutateur [A, B]. On définit l’opé-
rateur F (t) par la fonction de la variable t, F (t) = eAt eBt .
dF
1. Démontrer que dt = (A + B + t[A, B])F (t).
Opérateur de Hausdorff.
On considère l’opérateur
f (t) = etA Be−tA , (2.6.4)
où A et B sont des opérateurs.
1. Montrer que
df (t) d2 f (t)
= [A, f (t)], = [A, [A, f (t)]]. (2.6.5)
dt dt2
2. En déduire
t t2
eAt Be−At = B + [A, B] + [A, [A, B]] + . . . (2.6.6)
1! 2!
2. Montrer que si A et B sont deux vecteurs dont les composantes sont des nombres ou des
opérateurs qui commutent avec σi , alors
Montrer que
1
λi =
Tr(M σi ). (2.6.10)
2
A quelle condition doivent obéir les coefficients λi lorsque la matrice M est hermitienne ?
X := |0i h1| + |1i h0| , Y := −i |0i h1| + i |1i h0| , Z := |0i h0| − |1i h1| , (2.6.11)
48 2. Mesure de l’information et opérateurs linéaires
1. Pour |ψe i = α |0i + β |1i, donner l’expression des sorties |ψsx i = X |ψe i, |ψsy i = Y |ψe i et
|ψsz i = Z |ψe i.
2. En vertu de la linéarité de l’opération |ψs i = U |ψe i, on peut calculer |ψs i pour un 1-qubit
|ψe i quelconque à partir de la seule donnée de la table de vérité de la porte U.
On définit la porte quantique W, dite porte de Walsh-Hadamard, par la table de vérité
suivante :
1
|0i → √ (|0i + |1i)
2
(2.6.12)
1
|1i → √ (|0i − |1i)
2
Indiquer la matrice W correspondante dans la base {|0i , |1i}. Écrire la porte W en fonction
des portes X et Z.
3. Montrer que la normalisation simultanée de |ψe i et |ψs i impose que U soit, en toute
généralité, une matrice unitaire, i.e., telle que U† U = I. Tout dispositif expérimental
implémentant une porte quantique logique devra respecter cette condition dite
d’unitarité.
4. Vérifier, en utilisant la forme vectorielle (2.6.11), que les opérateurs Y, et W sont unitaires.
3 In [2]: b=Qobj([[1.],[0.],[1.j]])
4
5 In [3]: a.dag()
6 Out[3]:
7 Quantum object: dims = [[1], [3]], shape = (1, 3), type = bra
8 Qobj data =
9 [[-2.+0.j 0.-4.j 1.+0.j]]
10
11 In [4]: b.dag()
12 Out[4]:
13 Quantum object: dims = [[1], [3]], shape = (1, 3), type = bra
14 Qobj data =
15 [[ 1.+0.j 0.+0.j 0.-1.j]]
16
17 In [5]: a.dag()*b
18 Out[5]:
19 Quantum object: dims = [[1], [1]], shape = (1, 1), type = bra
20 Qobj data =
21 [[-2.+1.j]]
22
23 In [6]: b.dag()*a
24 Out[6]:
25 Quantum object: dims = [[1], [1]], shape = (1, 1), type = bra
26 Qobj data =
27 [[-2.-1.j]]
28
29 In [7]: c=a+2*b
30
31 In [8]: c
32 Out[8]:
33 Quantum object: dims = [[3], [1]], shape = (3, 1), type = ket
34 Qobj data =
35 [[ 0.+0.j]
36 [ 0.+4.j]
37 [ 1.+2.j]]
38
39 In [9]: c.dag()*a
50 2. Mesure de l’information et opérateurs linéaires
40 Out[9]:
41 Quantum object: dims = [[1], [1]], shape = (1, 1), type = bra
42 Qobj data =
43 [[ 17.-2.j]]
Le Script Output QuTiP 2.7.3 présente la sortie à l’écran du Script QuTiP 2.7.2 proposé.
37 print(ket1)
38 print('\n et ket2=')
39 print(ket2)
40
41 #Propriétés de W
42 if W.isherm:
43 print('\n W est hermitien')
44 else:
45 print('\n W n\'est pas hermitien')
46
47 if W*W == qeye(2):
48 print("\n W est une matrice unitaire")
49 else:
50 print('\n W n\'est pas une matrice unitaire')
51
66 if P1*P1 == P1:
67 print('\n P1 est un projecteur')
68 else:
69 print('\n P1 n\'est pas un projecteur')
70
71 if P2.isherm:
72 print('\n P2 est hermitien')
73 else:
74 print('\n P2 n\'est pas hermitien')
75
76 if P2*P2 == P2:
77 print('\n P2 est un projecteur')
78 else:
79 print('\n P2 n\'est pas un projecteur')
52 2. Mesure de l’information et opérateurs linéaires
13 et vec2=
14 Quantum object: dims = [[2], [1]], shape = [2, 1], type = ket
15 Qobj data =
16 [[-1.]
17 [ 0.]]
18
41 et ket2=
42 Quantum object: dims = [[2], [1]], shape = [2, 1], type = ket
43 Qobj data =
44 [[-0.92387953]
45 [-0.38268343]]
46
2.7. Solutions des Exercices 53
47 W est hermitien
48
63 P1 est hermitien
64
65 P1 est un projecteur
66
67 P2 est hermitien
68
69 P2 est un projecteur
7 Psi0 = (sqrt(2)*basis(3,0)+1j*basis(3,1)+basis(3,2))/2
8 Psi1 = (basis(3,0)+1j*basis(3,2))/sqrt(3)
9
10 # Vérification de la norme
11 print('psi0 est normé, vrai ou faux?')
12 print Psi0.norm()==1.
13 print('\n psi est normé, vrai ou faux?')
14 print Psi1.norm()==1.
15
16 # Calcul de P0 et P1
54 2. Mesure de l’information et opérateurs linéaires
17 P0 = Psi0*Psi0.dag()
18 P1 = Psi1*Psi1.dag()
19 print('\n Les projecteurs P0 et P1 valent respectivement')
20 print P0
21
22 print P1
23
24 # Hermiticité de P0 et P1
25 print('\n P0 est hermitien, vrai ou faux?')
26 print P0.isherm
27 print('\n P1 est hermitien, vrai ou faux?')
28 print P1.isherm
29
30 # Définir Y
31 Y = sigmay()
32
33 #Hermiticité de Y
34 print('\n Y est hermitien, vrai ou faux?')
35 print Y.isherm
36
44 VecY1 = VecY[0]
45 VecY2 = VecY[1]
46
53 print P3
54
47 Qobj data =
48 [[ 0.5+0.j 0.0+0.5j]
49 [ 0.0-0.5j 0.5+0.j ]]
50 Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isherm = True
51 Qobj data =
52 [[ 0.5+0.j 0.0-0.5j]
53 [ 0.0+0.5j 0.5+0.j ]]
54
Formule de Baker-Campbell-Hausdorff.
d At Bt
F 0 (t) = (e e ) = AeAt eBt + eAt BeBt = (A + eAt Be−At )F (t). (2.7.1)
dt
Puisque A et B commutent avec leur commutateur,
eAt
[B, eAt ] = [B, A] = t[B, A]eAt ⇒ eAt Be−At = t[A, B] + B, (2.7.2)
∂A
et finalement
F 0 (t) = (A + B + t[A, B])F (t). (2.7.3)
t2 t2
F (t) = F (0) exp[(A + B)t + [A, B]] = exp[(A + B)t + [A, B]]. (2.7.4)
2 2
Pour t = 1, on la formule de Baker-Campbell-Hausdorff (BCH)
1
eA eB = eA+B e 2 [A,B] . (2.7.5)
Opérateur de Hausdorff.
1. Les dérivées premières de f (t) sont
f 0 (t) = AetA Be−tA − etA BAe−tA = AetA Be−tA − etA Be−tA A = [A, f (t)], (2.7.6)
t t2
etA Be−tA = B + [A, f (t)] + [A, [A, f (t)]] + . . . (2.7.8)
1! 2!
P3
3. Si M = i=0 λj σj , alors
3
X
Tr(M ) = Tr(λ0 σ0 ) + Tr( λj σj ) = λ0 Tr(σ0 ) = 2λ0 (2.7.13a)
i=1
1
λ0 = Tr(M ) = Tr(M σ0 ). (2.7.13b)
2
D’autre part,
YY† = (i |0i h1| − i |1i h0|)(|0i h1| − i |1i h0|) = |0i h0| + |1i h1| = I2 . (2.7.16)
et
1
WW† = (|0i h1| + |1i h0|)(|0i h1| + |1i h0|) + (|0i h0| − |1i h1|)(|0i h0| − |1i h1|)
2 (2.7.17)
2
= (|0i h0| + |1i h1|) = I2 .
2
Sommaire
A.1 Installation de QuTiP
A.2 Vérification de l’installation
A.3 Vérification des versions des logiciels de base
l’installation
A.4 Commandes usuelles
QuTiP étant rédiger en Python2 , il est nécessaire, pour son utilisation optimale, d’avoir
quelques notions de base du langage de programmation Python. Pour cela nous vous conseillons
le cours gratuit Apprenez à programmer en Python disponible sur le site openclassrooms.com3 .
Il est à noter que Python est un langage de programmation interprété, c’est-à-dire que les
instructions qu’on envoie sont transcrites en langage machine au fur et à mesure de leur lecture.
Les langages comme le C/C++ ou le fortran sont appelés langages compilés car, avant de
pouvoir les exécuter, un logiciel spécialisé se charge de transformer le code du programme en
langage machine par la compilation. À chaque modification du code, il faut rappeler une étape
1 J. R. Johansson, P.D. Nation, and F. Nori, QuTiP 2 : A Python framework for the dynamics of open
quantum systems, Comp. Phys. Comm. 184, 1234 (2013) ou http://arxiv.org/abs/1211.6518.
2 le langage de programmation le plus largement utilisé dans les sciences quantiques
3 https://openclassrooms.com/courses/apprenez-a-programmer-en-python, consulté en Avril 2018
59
60 A. Installation de QuTiP et commandes usuelles
de compilation.
QuTiP est conçu pour fonctionner au mieux lors de l’utilisation des distributions Anaconda ou
Intel Python prenant en charge le système de gestion de paquets conda.
Les exemples données dans cet ouvrage ont été exécuté sous Linux Ubuntu, en utilisant
très souvent l’interpréteur IPython qui permet une bonne complétion.
Il est possible de vérifier si l’installation de QuTiP s’est bien déroulée. Le temps de cette
vérification est fonction de la puissance de votre ordinateur. Pour vérifier, il faut taper sur le
terminal les instructions :
QuTiP utilise la fonction about pour afficher des informations sur QuTiP et les dépendances
importantes installées sur votre système. Pour voir cette information :
Tous les résultats des divers exercices seront affichés à l’écran (ou console) avec l’instruction
print et sauvegardés par la suite dans un fichier de type texte5 .
Pour les scripts rédigés avec un éditeur ou IDE (Integrated Development Environment), on
créera directement un fichier de résultat en exécutant (dans le répertoire du programme)
Avant toute utilisation de QuTiP, il faut importer ses modules avec l’instruction
5 Par
exemple, la commande magique dans l’interpréteur IPython, l’instruction %save monFichier 2 8
10-13 sauvegarde dans monFichier.py les lignes 2, 8 et les lignes situées entre 10 et 13.
62 A. Installation de QuTiP et commandes usuelles
qui met toutes les fonctions et classes de QuTiP6 , à disposition pour la suite du programme.
Il est aussi important d’importer les bibliothèques SciPy, numpy, matplotlib avec les ins-
tructions
SciPy est un projet visant à unifier et fédérer un ensemble de bibliothèques Python à usage
scientifique (fonctions spéciales, interpolation, intégration, optimisation, traitement d’images).
Scipy utilise les tableaux et matrices de la bibliothèque NumPy. Cette bibliothèque permet
d’appliquer des opérations simultanément sur l’ensemble d’un tableau permettant d’écrire un
code plus lisible, plus facile à maintenir et donc plus efficace.
SciPy offre également des possibilités avancées de visualisation grâce au module matplotlib.
La classe qutip.Qobj ou Qobj() est une classe de QuTiP qui crée et manipule les objets
quantiques, sous forme de matrices. Cette classe possède
• des attributs auxquels on peut accéder pour avoir des informations sur l’objet quantique
Il est à noter que par convention, les classes d’objet en Python comme Qobj() diffère d’une
fonction par l’utilisation d’une lettre majuscule au début.
6 On
peut visualiser le diagramme en ligne sur http://qutip.org/docs/latest/guide/guide-overview.
html#figure-qutip-org
A.4. Commandes usuelles 63
Il arrive très souvent qu’on ait besoin de réutiliser les résultats de nos calculs pour une session
ultérieur ou d’exporter ces données pour en exploiter avec d’autres logiciels que QuTiP. Pour
cela il nous faut pouvoir sauvegarder ces données.
1. Le contenu des objets quantiques (qutip.Qobj, qutip.solver.Result, etc.) peut être stocké
dans un fichier et lu ultérieurement respectivement avec les fonctions qutip.fileio.qsave
et qutip.fileio.qload à travers les syntaxes
Script QuTiP A.4.3: Stocker les données qutip
1 qsave(data, name='filename')
2. Lorsque les données exportées dans un programme autre que QuTiP ou python, il est
préférable de les stocker sous forme d’un fichier texte de type CSV (comma-separated
values) pour d’autres calculs ou TSV (tab-separated values) pour une visualisation (tra-
cer de figures). On utilise alors, pour stocker et lire ou charger les données, les fonctions
qutip.fileio.file_data_store et qutip.fileio.file_data_read à travers les syn-
taxes
Script QuTiP A.4.5: Stocker et charger les données standards
1 file_data_store('filename.dat', data, numtype="complex", numformat="decimal",
2 sep=",")
3 file_data_read('filename.dat', sep=",")
où ’filename.dat’ est le nom du fichier, data est le contenu à stocker (un vecteur numpy),
numtype (optionel) est un drapeau indiquant le type valeurs numériques (complexe ou
réelle), numformat (optionel) est un drapeau spécifiant le format numérique des valeurs
(exp pour le format 1.0e1 et decimal pour le format 10.0), et sep indiquant le type de
séparation (tab, space, comma, semicolon, etc.).
64 A. Installation de QuTiP et commandes usuelles
Bibliographie
[NE2013] Serge Guy Nana Engo, Introduction à l’Information Quantique- Simulations avec
le Quantum Toolbox in Python, Éditions Universitaires Européennes, 2013.
[BCS2004] Giuliano Benenti, Giulio Casati and Giuliano Strini, Principles of Quantum Com-
putation and Information, Vol.I, World Scientific, 2004.
[MNIC2000] Michael Nielsen and Isaac Chuang, Quantum Computation and Quantum Infor-
mation, Cambridge University Press, 2000.
[JPresk1998] John Preskill, Lecture note on quantum information and computation, http://
theory.caltech.edu/people/preskill/.
[QUTIP] P.D. Nation, J.R. Johansson, QuTiP : Quantum Toolbox in Python, 2011–2012.
http://qutip.org/.
65