[PYTHON] J'ai brièvement résumé les bits quantiques (débutants)

\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}

Un bref résumé de la "manipulation mathématique des bits quantiques", qui est la base de l'apprentissage des ordinateurs quantiques. Cette fois, nous ne nous concentrerons pas sur la porte quantique, mais uniquement sur le système mathématique des bits quantiques.

Environ 1 bit quantique

1 Bit Quantum utilise le symbole de crochet, $ \begin{align} \ket{Q} &= \alpha\ket{0} + \beta\ket{1} \\\ \end{align} $ Peut être décrit comme Il représente l'état de superposition du bit 0, 1 état normal ($ \ ket {0}, \ ket {1} ), et est un état de connexion linéaire des temps constants standardisés (α, β). Comme cela est interprété comme une amplitude de probabilité, les conditions suivantes sont satisfaites. $ \begin{align} |\alpha|^{2} + |\beta|^{2} = 1 \end{align} $$

De plus, étant donné que $ \ ket {0} et \ ket {1} $ sont des états indépendants, il est pratique de les décrire comme des bases orthogonales normales comme suit pour les décrire comme des vecteurs d'état. $ \begin{align} \ket{0} = \binom{1}{0},\ket{1} = \binom{0}{1} \end{align} $ Par conséquent, $ \ ket {0} et \ ket {1} $ satisfont l'équation suivante. $ \braket{i}{j} = \delta_{ij} $ $ \ Delta_ {ij} $ est le delta de Kronecker. Eh bien, cela ressemble à un nombre linéaire.

Pour plusieurs bits quantiques

Cette fois, par souci de simplicité, considérons le cas de 2 bits quantiques. Pour les bits classiques, les combinaisons de données stockées sur 2 bits sont 00, 01, 10, 11 ($ \ ket {00}, \ ket {01}, \ ket {10}, \ ket {11} $ ) 4 modèles. Comme précédemment, l'état quantique général peut être décrit par superposition, donc l'état de 2 bits quantiques est $ \ket{Q} = \alpha_{00}\ket{00} + \alpha_{01}\ket{01} + \alpha_{10}\ket{10} + \alpha_{11}\ket{11} $ Et cela est également interprété comme une amplitude de probabilité, $ \sum _{ij} |\alpha _{ij} | ^{2} = 1 $ Rencontrer. De plus, le produit tenseur de 1 état de bit quantique est introduit comme nouveau vecteur d'état pour 2 bits quantiques. $ \ket{00} = \ket{0}\otimes\ket{0} = \begin{pmatrix} 1 \begin{pmatrix} 1 \\\ 0 \end{pmatrix} \\\ 0 \begin{pmatrix} 1 \\\ 0 \end{pmatrix} \end{pmatrix} =\begin{pmatrix} 1 \\\ 0 \\\ 0 \\\ 0 \end{pmatrix}, \\\ \ket{01} = \ket{0}\otimes\ket{1} = \begin{pmatrix} 1 \begin{pmatrix} 0 \\\ 1 \end{pmatrix} \\\ 0 \begin{pmatrix} 0 \\\ 1 \end{pmatrix} \end{pmatrix} =\begin{pmatrix} 0 \\\ 1 \\\ 0 \\\ 0 \end{pmatrix}, \\\ \ket{10} = \ket{1}\otimes\ket{0} = \begin{pmatrix} 0 \begin{pmatrix} 1 \\\ 0 \end{pmatrix} \\\ 1 \begin{pmatrix} 1 \\\ 0 \end{pmatrix} \end{pmatrix} =\begin{pmatrix} 0 \\\ 0 \\\ 1 \\\ 0 \end{pmatrix}, \\\ \ket{11} = \ket{1}\otimes\ket{1} = \begin{pmatrix} 0 \begin{pmatrix} 0 \\\ 1 \end{pmatrix} \\\ 1 \begin{pmatrix} 0 \\\ 1 \end{pmatrix} \end{pmatrix} =\begin{pmatrix} 0 \\\ 0 \\\ 0 \\\ 1 \end{pmatrix} . $

Comme vous pouvez le voir à partir des résultats, le produit tenseur d'une base orthogonale normale crée une base orthogonale normale. Les 3 bits quantiques et les 4 bits quantiques seront développés de la même manière que les 2 bits quantiques. Eh bien, cela ressemble à un nombre linéaire (´ 艸 `)

Compte tenu de l'état d'un ordinateur quantique capable de résoudre un problème réaliste, la dimension de la matrice sera moche ... (; ^ ω ^)

Je l'ai vérifié avec un simulateur

J'ai en fait revu l'explication jusqu'à présent en utilisant Blueqat. Pour une explication détaillée de Blueqat lui-même, veuillez vous référer au Tutoriel publié par MDR.

Dans le cas de 1 bit quantique

#Import de bibliothèque
from blueqat import Circuit

#Définir un circuit à 1 bit quantique
c = Circuit(1)
c.m[:].run()

Il s'agit d'un programme qui affiche le vecteur d'état lorsqu'aucune opération de porte n'est effectuée sur un bit quantique. Dans Blueqat, l'état initial du bit quantique est "0", donc le vecteur d'état de (1,0) doit être affiché. Le résultat de l'exécution est le suivant.

array([1.+0.j, 0.+0.j])

Conformément à l'explication précédente.

Ensuite, le programme lorsque l'état est "1" est émis.

#Import de bibliothèque
from blueqat import Circuit

#Définir un circuit à 1 bit quantique
c = Circuit(1)
c.x[0].m[:].run()

C'est celui avec la porte X agissant dessus. La porte X a pour effet d'inverser l'état quantique. Par conséquent, le vecteur d'état de (0,1) doit être affiché. Le résultat de l'exécution est le suivant.

array([0.+0.j, 1.+0.j])

Cela correspondait également à l'explication précédente.

Pour 2 bits quantiques

Comme pour 1 bit quantique, nous examinerons les vecteurs d'état pour $ \ ket {00}, \ ket {01}, \ ket {10} et \ ket {11} $.

programme

#Import de bibliothèque
from blueqat import Circuit

#2 Définir un circuit de bits quantiques
c = Circuit(2)
c.m[:].run()

Résultat d'exécution

array([1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j])

programme

#Import de bibliothèque
from blueqat import Circuit

#2 Définir un circuit de bits quantiques
c = Circuit(2)
c.x[0].m[:].run()

Résultat d'exécution

array([0.+0.j, 1.+0.j, 0.+0.j, 0.+0.j])

programme

#Import de bibliothèque
from blueqat import Circuit

#2 Définir un circuit de bits quantiques
c = Circuit(2)
c.x[1].m[:].run()

Résultat d'exécution

array([0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j])

programme

#Import de bibliothèque
from blueqat import Circuit

#Définir un circuit à 1 bit quantique
c = Circuit(2)
c.x[0].x[1].m[:].run()

Résultat d'exécution

array([0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j])

Tous étaient d'accord avec l'explication précédente.

finalement

La prochaine fois, j'aimerais expliquer le système mathématique des portes quantiques basé sur des simulations. Rendez-vous dans le prochain post!

Recommended Posts

J'ai brièvement résumé les bits quantiques (débutants)
Un bref résumé de Linux
Un bref résumé de la collection Python
Un bref résumé de la vue d'ensemble de Pinax #djangoja
Un résumé approximatif de l'histoire du système d'exploitation
Un résumé de l'apprentissage automatique Python pour débutant est très concis.
[Pour les débutants] Un résumé en mots des langages de programmation populaires (version 2018)
Un bref résumé de Graphviz en python (expliqué uniquement pour mac)
J'ai essayé de résumer brièvement la procédure de démarrage du développement de Django
[Django] Un simple résumé de la fonction de sortie du journal afin que même les débutants puissent la comprendre.
[Linux] Liste des commandes Linux que les débutants devraient connaître
Un résumé divers de ce que j'ai recherché sur Ansible
Résumé de l'utilisation de pyenv
Résumé des méthodes de prétraitement pour les débutants en Python (trame de données Pandas)
Résumé des opérations sur les chaînes
Un résumé des choses que j'ai touchées comme un blog
Résumé des arguments Python
Qu'est-ce qu'un moteur de recommandation? Résumé des types
Résumé de la méthode d'essai
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
Résumé de l'exploration d'image effectuée à la vitesse d'une seconde
Un résumé approximatif des différences entre Windows et Linux
résumé lié à l'opération de fichier python
Résumé des opérations de liste Python3
Un simple exemple de pivot_table.
Remarque sur la compilation du noyau
2017.3.6 ~ 3.12 Résumé de ce que nous avons fait
Linux une touche de raccourci récapitulative
Un petit mémorandum d'openpyxl
Résumé d'utilisation pratique de Flask
Résumé des types de distribution Linux
Vue d'ensemble de Docker (pour les débutants)
Résumé de l'utilisation de base de Pandas
Résumé des paramètres de connexion proxy
Un mémorandum d'utilisation de eigen3
[Pour les débutants] Résumé de la souffrance de l'AED de Kaggle et de sa lutte