May 15, 2024 | 4 min read

../../../_images/Logo_TalentQ_Azul.png

Vectores#

\( \newcommand{\bra}[1]{\langle #1|} \) \( \newcommand{\ket}[1]{|#1\rangle} \) \( \newcommand{\braket}[2]{\langle #1|#2\rangle} \) \( \newcommand{\i}{{\color{blue} i}} \) \( \newcommand{\Hil}{{\cal H}} \) \( \newcommand{\Lin}{\hbox{Lin}} \) \( \newcommand{\R}{{\mathbb R}} \) \( \newcommand{\C}{{\mathbb C}} \) \( \newcommand{\V}{{ V}} \)

Hide code cell source
%run ../../macro_tQ.py
import sys
sys.path.append('../../')
import macro_tQ as tQ

import numpy as np
from IPython.display import display,Markdown,Latex
from qiskit.visualization import array_to_latex
from qiskit.quantum_info import Statevector

Espacio Vectorial Complejo#

Definici贸n#

De forma poco rigurosa, definiremos un vector de dimensi贸n \(N\) como una columna de \(N\) n煤meros complejos

\[\begin{split} |u\rangle = \begin{pmatrix} {u_1}\\ {u_2}\\ \vdots \\ {u_N} \end{pmatrix} \end{split}\]
  • El s铆mbolo \(\ket{u}\) representa al vector y se denomina ket en la notaci贸n de Dirac

  • Los n煤meros complejos \(u_i \in {\mathbb C}\) con \(\, i=1,...,N\) se denominan componentes del vector \(\ket{u}\) (en una base dada).

Definici贸n: Espacio Vectorial

La colecci贸n de todos los posibles vectores de \(N\) componentes, con las propiedades de suma y multiplicaci贸n forman un espacio vectorial, \(\V\) de dimension compleja \(N\)

Es decir, en un espacio vectorial tenemos dos operaciones posibles:

  • Sumar dos vectores

\[\begin{split} |u\rangle + \ket{v}~ =~\, \begin{pmatrix} {u_1}+v_1\\ {u_2}+v_2\\ \vdots \\ {u_N}+v_n \end{pmatrix} ~= ~ \begin{pmatrix} w_1\\ w_2\\ \vdots \\ w_n \end{pmatrix} ~=~\ket{w} \end{split}\]
  • Multiplicar un vector por n煤mero complejo \(\lambda\in {\mathbb C}\)

\[\begin{split} \lambda|u\rangle ~ =~ \begin{pmatrix} {\lambda u_1}\\ {\lambda u_2}\\ \vdots \\ {\lambda u_N} \end{pmatrix} ~\equiv~\ket{\lambda u} \end{split}\]

Todo vector de \(V\) se denota mediante el s铆mbolo \(\ket{v}\) menos uno, el elemento neutro que se escribe como \(0\).

La existencia de un elemento opuesto y de un elemento neutro es una de las propiedades que definen un espacio vectorial

\[\begin{eqnarray*} \ket{v} + 0 &=& \ket{v} \nonumber\\ \ket{v} + \ket{\hbox{-}v} &=& \ket{v}-\ket{v} = 0 \nonumber\\ \end{eqnarray*}\]
'generamos un ket definiendo un array'
uket=np.array([[1 + 1.j],[2-3*1.j]])
 
    
'qiskit tiene un visualizador para vectores y matrices que es muy bueno'
from qiskit.visualization import array_to_latex

display(array_to_latex(uket, prefix =  r'|u \rangle ='))
Statevector(uket).draw('latex')
\[\begin{split} |u \rangle = \begin{bmatrix} 1 + i \\ 2 - 3 i \\ \end{bmatrix} \end{split}\]
\[(1 + i) |0\rangle+(2 - 3 i) |1\rangle\]

Conjugaci贸n adjunta#

En el cap铆tulo de N煤meros Complejos estudiamos la operaci贸n de conjugaci贸n compleja que asigna a cada n煤mero \(z = x+iy\) otro \(\bar z = x-iy\) con la parte imaginaria reflejada.

La extensi贸n de la conjugaci贸n compleja \(^*\) de \({\mathbb C}\) a todos los elementos de \(\Hil\) se denomina conjugaci贸n adjunta \(\dagger\),

Asociado a cada ket \(\ket{u}\), definimos un vector adjunto, o bra \(\bra{u}\equiv\left(\ket{u}\right)^\dagger\), que representamos mediante un vector fila con las componentes conjugadas complejas

\[\begin{split} \dagger \,: \quad\,|u\rangle = \begin{pmatrix} {u_1}\\ {u_2}\\ \vdots \\ {u_N} \end{pmatrix} ~~~~~{\rightarrow}~~~~~~ \left(\ket{u}\right)^\dagger \equiv \bra{u} =\big( {u_1^*} ~~~ {u_2^*} ~~~ \cdots ~~~ {u_N^*} \big) \end{split}\]

Consistentemente encontramos para el producto de un vector por un n煤mero complejo \(\lambda\)

\[ \dagger \,:\quad\, \lambda\ket{u}=\ket{\lambda u} ~~~~~{\rightarrow}~~~~~~ \left(\lambda\ket{u}\right)^\dagger=\lambda^*\bra{u} = \bra{u}\lambda^* = \bra{\lambda u} \]

ya que el producto de un vector por un n煤mero es conmutativo.

Al igual que la conjugaci贸n compleja, la conjugaci贸n adjunta es una involuci贸n: su aplicaci贸n sucesiva devuelve el vector original

\[ (\ket{u}^\dagger)^\dagger =\bra{u}^\dagger = \ket{u} \]

es decir, \(\dagger^2 = I\), el operador identidad.

'definamos un ket'
uket=np.array([[1+1j],[2-3*1.j]])
display(array_to_latex(uket, prefix =  r'|u \rangle ='))

'el bra asociado ser谩 una fila formada por las componentes conjugadas complejas'
ubra=uket.conj().T

display(array_to_latex(ubra, prefix =  '\langle u| =') )
\[\begin{split} |u \rangle = \begin{bmatrix} 1 + i \\ 2 - 3 i \\ \end{bmatrix} \end{split}\]
\[\begin{split} \langle u| = \begin{bmatrix} 1 - i & 2 + 3 i \\ \end{bmatrix} \end{split}\]

Bases#

Definici贸n:

En un espacio vectorial \(V\) de dimensi贸n \(N\) una base es una colecci贸n de \(N\) vectores \(\{\ket{e_1},...,\ket{e_N}\}\) tales que, cualquier vector \(\ket{v}\in V\) se puede expresar como una combinaci贸n lineal de ellos

\[ \ket{v} = \sum_{i=1}^N v_i \ket{e_i} \]

Los coeficientes \(v_i\) son las componentes de \(\ket{v}\) en la base dada.

Existen infinitas bases en un espacio vectorial. Podemos escoger una de ellas y asociarle el siguiente conjunto de columnas

\[\begin{split} |e_1\rangle \sim \begin{pmatrix} 1 \\ 0 \\ 0\\ \vdots \\ 0 \\ 0 \end{pmatrix}~~~~~~~ |e_2\rangle \sim \begin{pmatrix} 0 \\ 1 \\ 0\\ \vdots \\ 0 \\ 0 \end{pmatrix}~~~~~~~~~ \cdots ~~~~~~~~ |e_{N-1}\rangle \sim \begin{pmatrix} 0 \\ 0 \\ 0\\\vdots \\ 1 \\ 0 \end{pmatrix}~~~~~~~ |e_N\rangle \sim \begin{pmatrix} 0 \\ 0 \\0\\ \vdots \\ 0 \\ 1 \end{pmatrix} \end{split}\]

Cualquier vector, escrito como una combinaci贸n lineal de sus elementos adquiere la representaci贸n usual

\[ |u\rangle ~=~ {u_1} |e_1 \rangle + {u_2} | e_2\rangle +... + {u_{ N}}|e_{ N}\rangle~=~ \sum_{i=1}^N {u_ i} |e_i\rangle \,\sim \]
\[\begin{split} \sim~ {u_1} \begin{pmatrix} 1 \\ 0 \\ 0\\ \vdots \\ 0 \\ 0 \end{pmatrix} \,+\,{u_2} \begin{pmatrix} 0 \\ 1 \\ 0\\ \vdots \\ 0 \\ 0 \end{pmatrix}~+~ ... ~+ ~ {u_{N-1}} \begin{pmatrix} 0 \\ 0 \\ 0\\\vdots \\ 1 \\ 0 \end{pmatrix}+ \,{u_N}\, \begin{pmatrix} 0 \\ 0 \\0\\ \vdots \\ 0 \\ 1 \end{pmatrix}~~~= ~~~ \begin{pmatrix} {u_1} \\ {u_2} \\{u_3}\\ \vdots \\ \,{u_{N-1}}\, \\ {u_{N}} \end{pmatrix} \end{split}\]

Podemos usar la clase Statevector de qiskit para tener una expansi贸n en la base \(\{\ket{e_i}=\ket{b(i)}\}\), donde \(b(i)\) es la representaci贸n binaria del 铆ndice \(i\). Por ejemplo \(b(3) = 11\).

from qiskit.quantum_info import Statevector
uket=np.array([[ 1.+1.j], [ 2.-3.j],[ 2.+2.j],[-1.-1.j]])
display(array_to_latex(uket))

Statevector(uket).draw('latex')
\[\begin{split}\begin{bmatrix} 1 + i \\ 2 - 3 i \\ 2 + 2 i \\ -1 - i \\ \end{bmatrix} \end{split}\]
\[(1 + i) |00\rangle+(2 - 3 i) |01\rangle+(2 + 2 i) |10\rangle+(-1 - i) |11\rangle\]

Espacio de Hilbert#

Vamos a definir una nueva operaci贸n que involucra a parejas de vectores

Producto Escalar#

Definici贸n:

El producto escalar de dos vectores \(\ket{u}\) y \(\ket{v}\) es un n煤mero complejo \(a\in{\mathbb C}\)
que denotamos braket

\[a \equiv \braket{u}{v} \]

si verifica las propiedades siguientes:

\(~~~\)- linealidad: \(\to \bra{u}\big(\ket{v}+\ket{w}\big) = \braket{u}{v} + \braket{u}{w}\)

\(~~~\)- hermiticidad: \(\to \braket{v}{u} = \braket{u}{v}^*\)

\(~~~\)- positividad: \(\braket{u}{u} >0\) para todo ket \(\ket{u}\neq 0\)

\(~~~\)- no-degeneraci贸n: \(~\) si \(\braket{u}{v} = 0\) para todo \(\bra{u}\), entonces necesariamente \(\ket{v}=0\)

Esta operaci贸n convierte a un espacio vectorial en una estructura matem谩tica mucho m谩s interesante, un espacio de Hilbert

Definici贸n:

un espacio de Hilbert, \({\Hil}\), es un espacio vectorial dotado de una operaci贸n interna denominada producto escalar.

Combinando ambas propiedades, el producto escalar tambi茅n es lineal en el primer argumento

\[(\bra{u}+\bra{w})\ket{v} = \braket{u}{v} + \braket{w}{v}\]

Observar la propiedad de hermiticidad. Es consistente con la conjugaci贸n adjunta

\[ \braket{u}{v}^* = \braket{u}{v}^\dagger = \braket{v}{u} \]

Hemos usado que \(\bra{u}^\dagger = \ket{u}\) y \(\ket{v}^\dagger = \bra{v}\) pero le hemos a帽adido una regla m谩s: al tomar el mapa adjunto es necesario invertir el orden de los elementos. De no haber seguido esta regla, habr铆amos obtenido un resultado err贸neo

\[ \braket{u}{v}^\dagger \to \ket{u}\bra{v} \]

que no es ni siguiera un n煤mero complejo.

Norma#

Una norma es un una funci贸n real \(\|\cdot\| : \Lin(\Hil) \to {\mathbb R}\) con las siguientes propiedades

  • ser definida positiva \(\|A\|\geq 0\) con \(\| A\| = 0 \Leftrightarrow A= 0\)

  • homogeneidad \(\|\lambda A\| = |\lambda| \|A\|\)

  • triangle inequality. \(\|A+B\| \leq \| A\| + \|B\|\)

Un espacio de Hilbert es, autom谩ticamente un espacio normado. La positividad del producto escalar de un vector por s铆 mismo permite definir su norma.

\[ \|\ket{v}\| = \sqrt{\braket{v}{v}} \]

Notar

el 煤nico vector que tiene norma nula en un espacio de Hilbert es el elemento neutro

\[ \braket{v}{v} = 0 ~~~聽\Leftrightarrow ~~~\ket{v} = 0 \]

Distancia#

Dados dos elementos \(\ket{u}\) y \(\ket{v}\) de \(\Hil\), podemos definir la distancia entre ellos como la norma de su diferencia

\[ d(\rule{0mm}{5mm}\ket{v},\ket{w}) = \| \ket{v}-\ket{w}\| \]

En particular tenemos las dos propiedades siguientess

  • \(d(\ket{v}, \ket{w}) = d(\ket{w}, \ket{v})\)

  • \(d(\ket{v}, \ket{v}) = 0\)

Base ortonormales#

Hasta ahora, a los vectores de una base \(\{\ket{e_i}\}\) s贸lo se les ha pedido que sean \(N\) vectores linealmente independientes, donde \(N\) es la dimensi贸n del espacio vectorial \(\V\). S贸lo de esta manera podemos garantizar que cualquier vector puede desarrollarse en la forma $\( \ket{v} = \sum_{i=1}^N v_i \ket{e_i} \)$

Ahora que tenemos un producto escalar tiene sentido calcular el de dos elementos cualesquiera. Estos n煤meros complejos pueden acomodarse en una matriz \(C_{ij}= \braket{e_i}{e_j}\) que ser谩 propia de cada base. Hay una especialmente importante en la que \(C_{ij} = \delta_{ij}\) es la matriz identidad

Definici贸n:

Una base ortornormal se caracteriza por la siguiente lista de productos escalares

\[ \braket{e_i}{e_j} = \delta_{ij} \]

Es decir, por un lado, dos elementos distintos de la base son ortogonales \(\braket{e_1}{e_2} = 0\).

Por otro, todos est谩n normalizados \( \| e_i \| = \sqrt{\braket{e_1}{e_1}} = \sqrt{1} = 1\).

En este curso siempre supondremos que las bases con las que trabajamos son ortonormales. Ello no supone ninguna restricci贸n, como afirma el siguiente teorema

Teorema: Teorema de Gram-Schmidt

Dada una base general \(\{\braket{f_i}{f_j}\neq \delta_{ij}\}\) de vectores no ortonormales, existe una procedimiento iterativo (de Gram-Schmidt ) para construir, a partir de ella, una nueva base ortonormal \(\{\braket{e_i}{e_j}\}=\delta_{ij}\).

Trabajar en bases ortonormales simplifica mucho el 谩lgebra. Por ejemplo dado un vector \(\ket{v} = \sum_{i=1}^N v_i \ket{e_i}\) escrito en una base ortonormal, la componente \(v_i\) se extrae mediante la proyecci贸n ortogonal

\[ \boxed{ v_i =\braket{e_i}{v}} \]

Ejercicio

Verifica esta expresi贸n

Soluci贸n
(3)#\[\begin{eqnarray} \braket{e_k}{v} &=& \bra{e_k}\left(\sum_{j=1}^N v_j\ket{e_j}\right) \nonumber\\ &=& \sum_{j=1}^N v_j\braket{e_k}{e_j} \nonumber\\ &=& \sum_{j=1}^N v_j\delta_{kj} = v_k \end{eqnarray}\]

En una base ortonormal, calcular el valor de un producto escalar \(a=\braket{u}{v}\) es muy simple

\[\begin{split} \begin{eqnarray*} a = \braket{u}{v}&=& \left(\sum_{i}u_i^*\bra{e_i}\right)\left(\sum_{j}v_j\ket{e_j} \right) = \sum_{ij} u_i^* v_j \braket{e_i}{e_j} = \sum_{ij} u_i^* v_j \delta_{ij} \\ &=&\sum_{i} u_i^* v_i = \begin{pmatrix} {u_1^*} & {u_2^*} & \cdots & {u_N^*} \end{pmatrix}\begin{pmatrix} {v_1}\\ {v_2}\\ \vdots \\ {v_N} \end{pmatrix} \end{eqnarray*} \end{split}\]

Notar

La expresi贸n de la izquierda \(a = \braket{u}{v}\) no hace referencia a ninguna base. Por tanto, el resultado \(\sum_{i=1}^n{ u_i^* v_i} \) debe ser independiente de la base que utilizamos para representar estos vectores mediante sus componentes \(u_i\) y \(v_i\).

Subrayamos la importancia de esto: \(\braket{u}{v}\) puede ser calculado en la base m谩s conveniente.

Ejercicio (expl铆caselo a tu ordenador)

  • Escribe una funci贸n \(braket(u,v)\) que calcule y devuelva la el producto escalar \(\braket{u}{v}\), y, con ella, una funci贸n \(norm(u)\) que calcule la norma \(\| \ket{u}\|\). Verifica que \(\| \ket{u}\| = \sqrt{\braket{u}{u}}\) coincide con el resultado que da la funci贸n \(np.linalg.norm\).

  • Escribe una funci贸n \(random\_ket\) que genere un vector normalizado \(\ket{v}\in\Hil\) de dimensi贸n \(d\).