[PYTHON] Vecteur complexe considéré comme un vecteur réel

Comme point de départ pour les vecteurs complexes, nous étudierons la correspondance avec des vecteurs réels. Un calcul par SymPy est joint.

Il traite du contenu suivant.

Ce sont les connaissances requises pour les ordinateurs quantiques et les réseaux de neurones complexes.

Ceci est une série d'articles.

  1. Vecteur complexe considéré comme un vecteur réel ← Cet article
  2. Nombre complexe double considéré par la matrice d'expression
  3. Nombre quaternaire considéré par la matrice d'expression
  4. Matrice de Pauli et nombres quaternaires dans l'algèbre de Clifford

Cet article contient des articles connexes.

Vecteur réel et nombre complexe

Le produit interne d'un vecteur réel bidimensionnel est calculé comme suit. (Pour plus de détails, reportez-vous à Article précédent)

>>> from sympy import *
>>> a1,a2,b1,b2=symbols("a1:3 b1:3",real=True)
>>> Matrix([a1,a2]).dot(Matrix([b1,b2]))
a1*b1 + a2*b2
>>> Matrix([a1,a2]).T * Matrix([b1,b2])
Matrix([[a1*b1 + a2*b2]])
>>> Matrix([[a1,a2]]) * Matrix([b1,b2])
Matrix([[a1*b1 + a2*b2]])
\begin{align}
\left(\begin{matrix}a_1 \\ a_2\end{matrix}\right)\cdot
\left(\begin{matrix}b_1 \\ b_2\end{matrix}\right)
&=\left(\begin{matrix}a_1 \\ a_2\end{matrix}\right)^{\top}
  \left(\begin{matrix}b_1 \\ b_2\end{matrix}\right) \\
&=\left(\begin{matrix}a_1 &  a_2\end{matrix}\right)
  \left(\begin{matrix}b_1 \\ b_2\end{matrix}\right) \\
&=a_1b_1+a_2b_2
\end{align}

Calculez un exemple simple.

>>> Matrix([1,2]).dot(Matrix([3,4]))
11
>>> Matrix([1,2]).T*Matrix([3,4])
Matrix([[11]])
\left(\begin{matrix}1 \\ 2\end{matrix}\right)\cdot
\left(\begin{matrix}3 \\ 4\end{matrix}\right)
=\left(\begin{matrix}1 \\ 2\end{matrix}\right)^{\top}
 \left(\begin{matrix}3 \\ 4\end{matrix}\right)
=11

Nombre complexe

Envisagez de calculer le produit interne d'un vecteur réel sous forme de nombre complexe.

Puisqu'un nombre complexe se compose de deux nombres réels, un vecteur réel bidimensionnel est associé au nombre complexe.

\left(\begin{matrix}a \\ b\end{matrix}\right) \mapsto a+bi

Le produit des nombres complexes est calculé comme suit. Dans SymPy, le nombre imaginaire est «I».

>>> expand((a1+a2*I)*(b1+b2*I)).collect(I)
a1*b1 - a2*b2 + I*(a1*b2 + a2*b1)
(a_1+a_2i)(b_1+b_2i)=(a_1b_1-a_2b_2)+(a_1b_2+a_2b_1)i

La comparaison avec le produit interne $ a_1b_1 + a_2b_2 $ du vecteur réel révèle ce qui suit.

Si l'un des nombres complexes est conjugué, la partie réelle du produit sera le produit intérieur et la partie imaginaire sera le produit extérieur. Le signe du produit extérieur change en fonction du conjugué (anti-échangeabilité).

>>> expand((a1+a2*I).conjugate()*(b1+b2*I)).collect(I)
a1*b1 + a2*b2 + I*(a1*b2 - a2*b1)
>>> expand((a1+a2*I)*(b1+b2*I).conjugate()).collect(I)
a1*b1 + a2*b2 + I*(-a1*b2 + a2*b1)
\begin{align}
\underbrace{(a_1+a_2i)^*}_{Conjuguer}(b_1+b_2i)&=(\underbrace{a_1b_1+a_2b_2}_{produit intérieur})+(\underbrace{a_1b_2-a_2b_1}_{Produit extérieur})i \tag{1}\\
(a_1+a_2i)\underbrace{(b_1+b_2i)^*}_{Conjuguer}&=(a_1b_1+a_2b_2)\underbrace{-(a_1b_2-a_2b_1)}_{Inversion de signe}i \tag{2}
\end{align}

(1) est la norme pour trouver les produits internes et externes des nombres complexes. Nous aborderons les détails plus tard, mais la transposition dans le calcul matriciel correspond à un conjugué complexe.

(a_1\mathbf{e}_1+a_2\mathbf{e}_2)(b_1\mathbf{e}_1+b_2\mathbf{e}_2)=(a_1b_1+a_2b_2)+(a_1b_2-a_2b_1)\mathbf{e}_1\mathbf{e}_2

Cette fois, seule la valeur du produit intérieur est requise, de sorte que le produit extérieur (partie imaginaire) est ignoré.

>>> Matrix([a1,a2]).row_join(Matrix([b1,b2]))
Matrix([
[a1, b1],
[a2, b2]])
>>> Matrix([a1,a2]).row_join(Matrix([b1,b2])).det()
a1*b2 - a2*b1
\det\left(\begin{array}{c|c}a_1 & b_1 \\ a_2 & b_2\end{array}\right)=a_1b_2-a_2b_1

Calculez un exemple simple avec les fonctionnalités intégrées de SymPy et Python. Dans ce dernier, le nombre complexe est "j", le conjugué est ".conjugate ()" et la partie réelle est ".real".

SymPy


>>> re(expand(((1+2*I).conjugate()*(3+4*I))))
11

Intégré


>>> ((1+2j).conjugate()*(3+4j)).real
11.0
\Re\{(1+2i)^*(3+4i)\}=11

J'ai pu faire le même calcul que le produit interne du vecteur réel. Si vous regardez côte à côte, vous pouvez voir que le conjugué complexe ($ ^ * ) fonctionne de la même manière que la translocation ( ^ {\ top} $).

>>> Matrix([1,2]).T*Matrix([3,4])
Matrix([[11]])
>>> expand((1+2*I).conjugate()*(3+4*I))
11 - 2*I
>>> (1+2j).conjugate()*(3+4j)
(11-2j)
\left(\begin{matrix}1 \\ 2\end{matrix}\right)^{\top}
\left(\begin{matrix}3 \\ 4\end{matrix}\right)
=11 \\
(1+2i)^*(3+4i)=11-2i
>>> Matrix([1,2]).row_join(Matrix([3,4])).det()
-2
\det\left(\begin{array}{c|c}1 & 3 \\ 2 & 4\end{array}\right)=4-6=-2

Matrice d'expression

Considérez pourquoi les conjugués complexes correspondent aux translocations.

Le nombre complexe est représenté par un vecteur réel bidimensionnel et le produit interne est comparé au résultat du calcul.

>>> (a1+a2*I).conjugate()*(b1+b2*I)
(a1 - I*a2)*(b1 + I*b2)
>>> expand((a1+a2*I).conjugate()*(b1+b2*I)).collect(I)
a1*b1 + a2*b2 + I*(a1*b2 - a2*b1)
>>> Matrix([a1,a2]).T*Matrix([b1,b2])
Matrix([[a1*b1 + a2*b2]])
\begin{align}
(a_1+a_2i)^*(b_1+b_2i)
&=(a_1-a_2i)(b_1+b_2i) \\
&=(a_1b_1+a_2b_2)+(a_1b_2-a_2b_1)i \\
\left(\begin{matrix}a_1 \\ a_2\end{matrix}\right)^{\top}
\left(\begin{matrix}b_1 \\ b_2\end{matrix}\right)
&=a_1b_1+a_2b_2
\end{align}

Le produit interne du vecteur réel n'inclut pas la partie imaginaire (bien qu'il soit naturel de dire que la partie imaginaire est le produit externe). Essayez d'augmenter le nombre de colonnes pour inclure la partie imaginaire.

Unité imaginaire

Considérons d'abord l'unité imaginaire $ i $. La colonne incrémentée est inconnue $ x, y $.

>>> x,y=symbols("x y")
>>> i=Matrix([0,1]).row_join(Matrix([x,y]))
>>> i
Matrix([
[0, x],
[1, y]])
i \mapsto
\left(\begin{matrix}0 \\ 1 \end{matrix}\right)
\xrightarrow{Augmenter les colonnes}
\left(\begin{matrix}0 & x \\ 1 & y\end{matrix}\right)

Déterminez $ x, y $ de sorte que $ i ^ 2 = -1 $. La deuxième colonne après le carré est automatiquement déterminée, le calcul est donc omis.

>>> i**2
Matrix([
[x,      x*y],
[y, x + y**2]])
i^2 \mapsto
\left(\begin{matrix}0 & x \\ 1 & y\end{matrix}\right)^2
=\left(\begin{matrix}x & * \\ y & *\end{matrix}\right)
=\left(\begin{matrix}-1 & * \\0 & *\end{matrix}\right) \\
∴(x,y)=(-1,0)

Nous avons maintenant une matrice quadratique carrée correspondant à $ i $ qui satisfait $ i ^ 2 = -1 $. C'est ce qu'on appelle la ** matrice de représentation ** de $ i $.

>>> i=Matrix([[0,-1],[1,0]])
i \mapsto \left(\begin{matrix}0 & -1 \\ 1 & 0\end{matrix}\right)
i \mapsto
\left(\begin{array}{c|c}
\underbrace{\begin{matrix} 0 \\ 1 \end{matrix}}_{i} &
\underbrace{\begin{matrix}-1 \\ 0 \end{matrix}}_{-1}
\end{array}\right)

Nombre complexe

La matrice de représentation $ 1 $ est une matrice unitaire car c'est un élément unitaire dont la valeur ne change pas lorsqu'elle est multipliée.

>>> _1=eye(2)
>>> _1
Matrix([
[1, 0],
[0, 1]])
1 \mapsto
I=\left(\begin{matrix}1 & 0 \\ 0 & 1\end{matrix}\right)

La combinaison des matrices de représentation $ 1 $ et $ i $ donne une matrice de représentation complexe.

>>> a,b=symbols("a b",real=True)
>>> a*_1+b*i
Matrix([
[a, -b],
[b,  a]])
a+bi \mapsto
 a\underbrace{\left(\begin{matrix}1 &  0 \\ 0 & 1\end{matrix}\right)}_{1}
+b\underbrace{\left(\begin{matrix}0 & -1 \\ 1 & 0\end{matrix}\right)}_{i}
=\left(\begin{matrix}a & -b \\ b & a\end{matrix}\right)

Le résumé est le suivant.

a+bi \mapsto
\left(\begin{matrix}a \\ b \end{matrix}\right)
\xrightarrow{Augmenter les colonnes}
\left(\begin{matrix}a & -b \\ b & a\end{matrix}\right)
>>> Matrix([[a,-b],[b,a]]).det()
a**2 + b**2
>>> Matrix([a,b]).T*Matrix([a,b])
Matrix([[a**2 + b**2]])
>>> abs(a+b*I)**2
a**2 + b**2
\det\left(\begin{array}{c|c}a & -b \\ b & a\end{array}\right)
=\left(\begin{matrix}a \\ b\end{matrix}\right)^{\top}
 \left(\begin{matrix}a \\ b\end{matrix}\right)
=a^2+b^2=|a+bi|^2

Vérification

Calculons le produit en remplaçant le nombre complexe par la matrice d'expression.

>>> (a1+a2*I).conjugate()*(b1+b2*I)
(a1 - I*a2)*(b1 + I*b2)
>>> a1*_1-a2*i
Matrix([
[ a1, a2],
[-a2, a1]])
>>> b1*_1+b2*i
Matrix([
[b1, -b2],
[b2,  b1]])
>>> (a1*_1-a2*i)*(b1*_1+b2*i)
Matrix([
[a1*b1 + a2*b2, -a1*b2 + a2*b1],
[a1*b2 - a2*b1,  a1*b1 + a2*b2]])
>>> expand((a1+a2*I).conjugate()*(b1+b2*I)).collect(I)
a1*b1 + a2*b2 + I*(a1*b2 - a2*b1)
\begin{align}
(a_1+a_2i)^*(b_1+b_2i)
=&(a_1-a_2i)(b_1+b_2i) \\
\mapsto
&\left(\begin{matrix}a_1 &  a_2 \\ -a_2 & a_1\end{matrix}\right)
 \left(\begin{matrix}b_1 & -b_2 \\  b_2 & b_1\end{matrix}\right) \\
=&\left(\begin{matrix}
    a_1b_1+a_2b_2 & -(a_1b_2-a_2b_1) \\
    a_1b_2-a_2b_1 &   a_1b_1+a_2b_2
  \end{matrix}\right) \\
\mapsto
&(a_1b_1+a_2b_2)+(a_1b_2-a_2b_1)i
\end{align}

Le résultat correspondait au calcul car il s'agissait d'un nombre complexe. Le comportement des nombres complexes peut être représenté ** par une matrice **.

Conjugaison compliquée

En traduisant la matrice de représentation, les nombres complexes représentés sont conjugués. C'est pourquoi la transposition correspond à des conjugués en nombres complexes.

>>> (a*_1+b*i).T
Matrix([
[ a, b],
[-b, a]])
\left(\begin{matrix}a & -b \\ b & a\end{matrix}\right)^{\top}
=\left(\begin{matrix}a & b \\ -b & a\end{matrix}\right)
\mapsto a-bi=(a+bi)^*

L'exemple de calcul confirmé précédemment donne le même résultat même si le conjugué complexe est remplacé par la translocation.

>>> (a1*_1+a2*i).T*(b1*_1+b2*i)
Matrix([
[a1*b1 + a2*b2, -a1*b2 + a2*b1],
[a1*b2 - a2*b1,  a1*b1 + a2*b2]])
\begin{align}
(a_1+a_2i)^*(b_1+b_2i)
\mapsto
&\left(\begin{matrix}a_1 & -a_2 \\ a_2 & a_1\end{matrix}\right)^{\top}
 \left(\begin{matrix}b_1 & -b_2 \\ b_2 & b_1\end{matrix}\right) \\
=&\left(\begin{matrix}
    a_1b_1+a_2b_2 & -(a_1b_2-a_2b_1) \\
    a_1b_2-a_2b_1 &   a_1b_1+a_2b_2
  \end{matrix}\right) \\
\end{align}

Vecteur réel et vecteur complexe

Un vecteur réel à 4 dimensions est associé à un vecteur complexe à 2 dimensions, en supposant que la partie imaginaire du résultat du calcul est ignorée.

\left(\begin{matrix}a \\ b \\ c \\ d\end{matrix}\right) \mapsto
\left(\begin{matrix}a+bi \\ c+di\end{matrix}\right)

Vérifiez le vecteur contenant un nombre complexe dans le composant (vecteur complexe) car il nécessite une attention particulière pour la translocation.

Conjugué Elmeat

Remplacez chaque nombre complexe contenu dans le vecteur complexe par une matrice de représentation.

\left(\begin{matrix}a+bi \\ \hline c+di\end{matrix}\right) \mapsto
\left(\begin{matrix}a & -b \\ b & a \\ \hline c & -d \\ d & c\end{matrix}\right)

Si vous retransposez la matrice de représentation en un nombre complexe, vous pouvez voir que le conjugué complexe apparaît en même temps que la translocation.

\begin{align}
\left(\begin{matrix}a & -b \\ b & a \\ \hline c & -d \\ d & c\end{matrix}\right)^{\top}
=&\left(\begin{array}{cc|cc}a & b & c & d \\ -b & a & -d & c\end{array}\right) \\
\mapsto &\left(\begin{array}{c|c}a-bi & c-di\end{array}\right) \\
=&\left(\begin{array}{c|c}a+bi & c+di\end{array}\right)^* \\
=&\left\{\left(\begin{matrix}a+bi \\ \hline c+di\end{matrix}\right)^{\top}\right\}^*
\end{align}

De cette manière, dans les vecteurs complexes et les matrices complexes, la transposition et le conjugué complexe sont liés. La matrice avec à la fois translocation et conjugaison complexe est la conjugaison Elmeat ([matrice d'accompagnement](https://en.wikipedia.org/wiki/%E9%9A%8F%E4%BC%B4%E8%A1%8C%] Il s'appelle E5% 88% 97)) et est représenté par un poignard ($ ^ {\ dagger} $) dans cet article. Dans SymPy, l'acronyme d'Hermite est «.H» (H ne se prononce pas en français). Le résultat est le même même si l'ordre des opérations est inversé (conjugué → translocation).

>>> a,b,c,d=symbols("a b c d",real=True)
>>> Matrix([a+b*I,c+d*I]).H
Matrix([[a - I*b, c - I*d]])
>>> Matrix([a+b*I,c+d*I]).T.conjugate()
Matrix([[a - I*b, c - I*d]])
>>> Matrix([a+b*I,c+d*I]).conjugate().T
Matrix([[a - I*b, c - I*d]])
\left(\begin{matrix}a+bi \\ c+di\end{matrix}\right)^{\dagger}
:=\left\{\left(\begin{matrix}a+bi \\ c+di\end{matrix}\right)^{\top}\right\}^*
=\left\{\left(\begin{matrix}a+bi \\ c+di\end{matrix}\right)^*\right\}^{\top}
=\left(\begin{matrix}a-bi & c-di\end{matrix}\right)

Vérification

Un simple calcul confirme la translocation du vecteur réel et du conjugué Elmeat du vecteur complexe.

>>> Matrix([1,2,3,4]).T*Matrix([5,6,7,8])
Matrix([[70]])
>>> expand(Matrix([1+2j,3+4j]).H*Matrix([5+6j,7+8j]))
Matrix([[70.0 - 8.0*I]])
\left(\begin{matrix}1 \\ 2 \\ 3 \\ 4\end{matrix}\right)^{\top}
\left(\begin{matrix}5 \\ 6 \\ 7 \\ 8\end{matrix}\right)
=70 \\
\left(\begin{matrix}1+2i \\ 3+4i\end{matrix}\right)^{\dagger}
\left(\begin{matrix}5+6i \\ 7+8i\end{matrix}\right)
=70-8i

Le même résultat a été obtenu en ignorant la partie imaginaire.

Quadruple / bicomplexe

Un vecteur réel à quatre dimensions est associé à un nombre quaternaire.

\left(\begin{matrix}a \\ b \\ c \\ d\end{matrix}\right) \mapsto a+bi+cj+dk

Si vous calculez le produit avec le conjugué, vous obtenez le produit intérieur de la partie réelle.

[Numéro quaternaire]\ (1-2i-3j-4k)(5+6i+7j+8k)=70-16j-8k

Si vous souhaitez supprimer la partie imaginaire, vous avez la possibilité d'utiliser un nombre bicomplexe au lieu d'un nombre quaternaire. Contrairement aux nombres quaternaires, les nombres di-complexes sont commutables, ils peuvent donc être plus pratiques que les nombres quaternaires en fonction de l'application (parfois appelés nombres quaternaires convertibles). Notez qu'en raison de la structure des nombres bicomplexes, la forme du conjugué est différente de celle des nombres quaternaires.

[Nombre bi-complexe]\ (1-2i-3j+4k)(5+6i+7j+8k)=70-8i-16j-4k

Je vais simplement présenter les nombres quaternaires et les nombres bicomplexes ici, mais j'expliquerai les détails dans l'article suivant.

Colonne d'exécution et matrice complexe

Comme nous l'avons vu, associer un vecteur réel à un vecteur complexe divise par deux le nombre de lignes. Si vous associez la colonne d'exécution à une matrice complexe, le nombre de lignes sera également divisé par deux.

Colonne d'exécution (2 x 2)

Une matrice quadratique carrée réelle est associée à un vecteur horizontal complexe bidimensionnel (matrice 1x2).

\left(\begin{matrix}a & c \\ b & d\end{matrix}\right) \mapsto
\left(\begin{matrix}a+bi & c+di\end{matrix}\right)

Un exemple de calcul est présenté ci-dessous.

>>> Matrix([[1,3],[2,4]]).T*Matrix([[5,7],[6,8]])
Matrix([
[17, 23],
[39, 53]])
>>> expand(Matrix([[1+2j,3+4j]]).H*Matrix([[5+6j,7+8j]]))
Matrix([
[17.0 - 4.0*I, 23.0 - 6.0*I],
[39.0 - 2.0*I, 53.0 - 4.0*I]])
\left(\begin{matrix}1 & 3 \\ 2 & 4\end{matrix}\right)^{\top}
\left(\begin{matrix}5 & 7 \\ 6 & 8\end{matrix}\right)
=\left(\begin{matrix}17 & 23 \\ 39 & 53\end{matrix}\right) \\
\left(\begin{matrix}1+2i & 3+4i\end{matrix}\right)^{\dagger}
\left(\begin{matrix}5+6i & 7+8i\end{matrix}\right)
=\left(\begin{matrix}17-4i & 23-6i \\ 39-2i & 53-4i\end{matrix}\right)

Le même résultat peut être obtenu en ignorant la partie imaginaire. Notez que la matrice résultante aura la même taille que la colonne d'exécution. Intuitivement, on peut interpréter que deux lignes ne peuvent pas être combinées en une seule ligne car elle contient une partie imaginaire.

Colonne d'exécution (4 x 2)

Une colonne d'exécution 4x2 est associée à une matrice quadratique carrée complexe.

\left(\begin{matrix}a & e \\ b & f \\ c & g \\ d & h\end{matrix}\right) \mapsto
\left(\begin{matrix}a+bi & e+fi \\ c+di & g+hi\end{matrix}\right)

Un exemple de calcul est présenté ci-dessous.

>>> Matrix([[1,5],[2,6],[3,7],[4,8]]).T*Matrix([[9,13],[10,14],[11,15],[12,16]])
Matrix([
[110, 150],
[278, 382]])
>>> expand(Matrix([[1+2j,5+6j],[3+4j,7+8j]]).H*Matrix([[9+10j,13+14j],[11+12j,15+16j]]))
Matrix([
[110.0 - 16.0*I, 150.0 - 24.0*I],
[ 278.0 - 8.0*I, 382.0 - 16.0*I]])
\left(\begin{matrix}1 & 5 \\ 2 & 6 \\ 3 & 7 \\ 4 & 8\end{matrix}\right)^{\top}
\left(\begin{matrix}9 & 13 \\ 10 & 14 \\ 11 & 15 \\ 12 & 16\end{matrix}\right)
=\left(\begin{matrix}110 & 150 \\ 278 & 382\end{matrix}\right) \\
\left(\begin{matrix}1+2i & 5+6i \\ 3+4i & 7+8i\end{matrix}\right)^{\dagger}
\left(\begin{matrix}9+10i & 13+14i \\ 11+12i & 15+16i\end{matrix}\right)
=\left(\begin{matrix}110-16i & 150-24i \\ 278-8i & 382-16i\end{matrix}\right)

Pour référence, le résultat du calcul utilisant la matrice quaternaire est affiché.

\begin{align}
&\left(\begin{matrix}1+2i+3j+4k & 5+6i+7j+8k\end{matrix}\right)^{\dagger}
 \left(\begin{matrix}9+10i+11j+12k & 13+14i+15j+16k\end{matrix}\right) \\
&=\left(\begin{matrix}
    110-32j-16k & 150-48j-24k \\
    278-16j- 8k & 382-32j-16k
  \end{matrix}\right)
\end{align}

C'est la fin de la comparaison.

Article associé

Cette fois, je n'ai pas beaucoup parlé du produit extérieur parce que je me suis concentré sur le produit intérieur. Veuillez vous référer aux articles suivants pour le produit externe et l'algèbre de Clifford.

Les nombres bicomplexes et les nombres quaternaires sont expliqués dans les articles suivants du point de vue de leur fabrication.

Si vous traitez le coefficient du nombre quaternaire différemment de la matrice d'expression et que vous le calculez, vous verrez une image dans laquelle les produits intérieurs et extérieurs sont appelés "intérieur" et "extérieur".

référence

J'ai fait référence au conjugué Elmeat.

Je l'ai utilisé comme référence pour SymPy.

Recommended Posts

Vecteur complexe considéré comme un vecteur réel
Utiliser Remotte en tant qu'utilisateur