\(\Complex^n\) como principal ejemplar.

Ejercicio 2.1.1

Add the following two vectors: \[\begin{bmatrix}5+13i\\6+2i\\0.53-6i\\12\end{bmatrix} + \begin{bmatrix}7-8i\\4i\\2\\9.4+3i\end{bmatrix}.\]

La suma de vectores es entrada a entrada:

\[\begin{bmatrix}5+13i+7-8i\\6+2i+4i\\0.53-6i+2\\12+9.4+3i\end{bmatrix}=\begin{bmatrix}12+5i\\6+6i\\2.53-6i\\21.4+3i\end{bmatrix}\]

Ejercicio 2.1.2

Formally prove the associativity property.

Usando la notación del libro. Sean 3 vectores \(V,W,X\in\Complex^n\).

\[\left(\left(V+W\right)+X\right)[j]=(V+W)[j]+X[j]=\left(V[j]+W[j]\right)+X[j]\]

Al ser \(V[j],W[j],X[j]\) números complejos, y sabemos que estos son asociativos:

\[\left(V[j]+W[j]\right)+X[j]=V[j]+\left(W[j]+X[j]\right)=V[j]+(W+X)[j]=\left(V+\left(W+X\right)\right)[j]\]

Ejercicio 2.1.3

Scalar multiply \(8-2i\) with \(\begin{bmatrix}16+2.3i\\-7i\\6\\5-4i\end{bmatrix}\).

La multiplicación por escalares es el escalar por cada entrada:

\[\begin{bmatrix}(8-2i)(16+2.3i)\\(8-2i)(-7i)\\(8-2i)6\\(8-2i)(5-4i)\end{bmatrix}=\begin{bmatrix}132.6-13.6i\\-14-56i\\48-12i\\32-42i\end{bmatrix}\]

Ejercicio 2.1.5

Formally prove that \((c_1+c_2)\cdot V=c_1\cdot V+c_2\cdot V\).

Sean \(V\in\Complex^n\) y \(c_1,c_2\in\Complex\).

\[\left((c_1+c_2)V\right)[j]=(c_1+c_2)\cdot V[j] =c_1 V[j]+c_2 V[j] = (c_1V)[j]+(c_2V)[j]\]

Lo anterior se cumple por la distributividad del producto con respecto a la suma de los números complejos.

Práctica de Programación 2.1.1

Write three functions that perform the addition, inverse, and scalar multiplication operations for \(\Complex^n\), i.e., write a function that accepts the appropriate input for each of the operations and outputs the vector.

Utilicé el patrón newtype (fan de Haskell) para encapsular un vector de números complejos (que creamos en el capítulo anterior) y poder añadir traits.

La siguiente función sirve para sumar dos vectores entrada a entrada, únicamente tomando como especial el caso en que tenemos vectores de tamaños distintos.

fn add_vectors(ComplexVector(lhs): ComplexVector, ComplexVector(rhs): ComplexVector) -> ComplexVector {
    if lhs.len() != rhs.len() {
        panic!("Cannot add vectors of different size.");
    }

    let result_vector: Vec<Complex> = lhs.iter().zip(rhs.iter()).map(|(&x,&y)| x + y).collect();

    ComplexVector(result_vector)
}

El siguiente es el código para multiplicar un vector por un escalar:

fn product_vector_scalar(ComplexVector(vector): ComplexVector, scalar: Complex) -> ComplexVector {
    ComplexVector(vector.iter().map(|&x| x * scalar).collect())
}

Y la función para conseguir el inverso aditivo:

fn inverse_vector(ComplexVector(vector): ComplexVector) -> ComplexVector {
    ComplexVector(vector.iter().map(|&x| -x).collect())
}

A su vez, los traits Add, Mul y Neg llaman a estas funciones. El código completo para la implementación de vectores complejos está en mi repositorio JPYamamoto/quantum_computing_studies.

Definiciones, propiedades y ejemplos.

Un campo vectorial complejo es un conjunto no vacío \(𝕍\), cuyos elementos llamaremos vectores, con 3 operaciones:

  • Suma: \(+: 𝕍\times 𝕍\to 𝕍\)
  • Negación: \(-: 𝕍\to 𝕍\)
  • Multiplicación por escalar: \(\cdot: \Complex\times 𝕍\to 𝕍\)

y un elemento distinguido llamado el vector cero \(0\in 𝕍\) in el conjunto. Estas operaciones y el cero deben satisfacer las siguientes propiedades: para todos \(V,W,X\in 𝕍\) y para cualesquiera \(c,c_1,c_2\in\Complex\),

  1. Conmutatividad de la suma: \(V+W=W+V\).
  2. Asociatividad de la suma: \((V+W)+X=V+(W+X)\).
  3. El cero es una identidad aditiva: \(V+0=V=0+V\).
  4. Todo vector tiene un inverso: \(V+(-V)=0=(-V)+V\).
  5. La multiplicación por escalar tiene unidad: \(1\cdot V=V\).
  6. La multiplicación por escalar respeta la multiplicación entre complejos: \[c_1\cdot\left(c_2\cdot V\right)=\left(c_1\times c_2\right)\cdot V.\]
  7. La multiplicación por escalar distribuye sobre la suma: \[c\cdot\left(V+W\right)=c\cdot V+c\cdot W.\]
  8. La multiplicación escalar distribuye sobre la suma de complejos: \[ \left(c_1+c_2\right)\cdot V=c_1\cdot V + c_2\cdot V.\]

Ejercicio 2.2.1

Let \(r_1=2,r_2=3\), and \(V=\begin{bmatrix}2\\-4\\1\end{bmatrix}\). Verify Property 6, i.e., calculate \(r_1\cdot (r_2\cdot V)\) and \((r_1\times r_2)\cdot V\) and show that they coincide.

\[ 2\cdot\left(3\cdot\begin{bmatrix}2\\-4\\1\end{bmatrix}\right) = 2\cdot\begin{bmatrix}6\\-12\\3\end{bmatrix} = \begin{bmatrix}12\\-24\\6\end{bmatrix} \]

\[ \left(2\cdot 3\right)\cdot\begin{bmatrix}2\\-4\\1\end{bmatrix} = 6\cdot\begin{bmatrix}2\\-4\\1\end{bmatrix} = \begin{bmatrix}12\\-24\\6\end{bmatrix} \]

Ejercicio 2.2.2

Draw pictures in \(\R^3\) that explain Properties 6 and 8 of the definition of a real vector space.

Figura 1: Solución al ejercicio 2.2.2. Primera parte.

Figura 1: Solución al ejercicio 2.2.2. Primera parte.

En la imagen anterior podemos ver que reescalar 2 veces un vector, sería equivalente a reescalar por el producto de los escalares.

En la siguiente imagen se ve a la izquierda el resultado de escalar un vector por el producto de los escalares, y a la derecha la suma de el producto de escalares.

Figura 2: Solución al ejercicio 2.2.2. Segunda parte.

Figura 2: Solución al ejercicio 2.2.2. Segunda parte.

Ejercicio 2.2.3

Let $c_1=2i, c_2=1+2i,$ and \(A=\begin{bmatrix}1-i&3\\2+2i&4+i\end{bmatrix}\). Verify Properties 6 y 8 in showing \(\Complex^{2\times 2}\) is a complex vector space.

\[ 2i\cdot\left((1+2i)\begin{bmatrix}1-i&3\\2+2i&4+i\end{bmatrix}\right) = 2i\cdot\begin{bmatrix}3+i&3+6i\\-2+6i&2+9i\end{bmatrix} = \begin{bmatrix}-2+6i&-12+6i\\-12-4i&-18+4i\end{bmatrix} \]

\[ \left(2i\cdot(1+2i)\right)\begin{bmatrix}1-i&3\\2+2i&4+i\end{bmatrix} = \left(-4+2i\right)\begin{bmatrix}1-i&3\\2+2i&4+i\end{bmatrix} = \begin{bmatrix}-2+6i&-12+6i\\-12-4i&-18+4i\end{bmatrix} \]

Ambos resultados son iguales, por lo tanto se cumple que la multiplicación por escalares respeta la multiplicación entre complejos. Ahora verificamos que la multiplicación escalar distribuye sobre la suma de complejos:

\[ \left(2i+1+2i\right)\begin{bmatrix}1-i&3\\2+2i&4+i\end{bmatrix} = \left(1+4i\right)\begin{bmatrix}1-i&3\\2+2i&4+i\end{bmatrix} = \begin{bmatrix}5+3i&3+12i\\-6+10i&17i\end{bmatrix} \]

\[ \left(2i\right)\begin{bmatrix}1-i&3\\2+2i&4+i\end{bmatrix}+\left(1+2i\right)\begin{bmatrix}1-i&3\\2+2i&4+i\end{bmatrix} = \begin{bmatrix}2+2i&6i\\-4+4i&-2+8i\end{bmatrix}+\begin{bmatrix}3+i&3+6i\\-2+6i&2+9i\end{bmatrix} = \begin{bmatrix}5+3i&3+12i\\-6+10i&17i\end{bmatrix} \]

Ejercicio 2.2.4

Show that these operations (addition and product) on \(\Complex^{m\times n}\) satisfy Properties 5, 6 and 8 of being a complex vector space.

Sea \(A\in\Complex^{m\times n}\):

Para la propiedad 5:

\[ \left(1\cdot A\right)[j,k]=1\cdot (A[j,k])=A[j,k] \]

Propiedad 6:

\[ \left(c_1\cdot\left(c_2\cdot A\right)\right)[j,k] = c_1\cdot\left(\left(c_2\cdot A\right)[j,k]\right) = c_1\cdot c_2\cdot\left(A[j,k]\right) = \left(c_1\cdot c_2\right)\cdot A[j,k] \]

Propiedad 8:

\[ \left(\left(c_1+c_2\right)A\right)[j,k] = \left(c_1+c_2\right)\cdot\left(A[j,k]\right) = c_1\cdot A[j,k]+c_2\cdot A[j,k] \]

Práctica de Programación 2.2.1

Convert your functions from the last programming drill so that instead of accepting elements of \(\Complex^n\) they accept elements of \(\Complex^{m\times n}\).

En vez de modificar lo construido anteriormente, creé un estructura aparte: ComplexMatrix.

pub struct ComplexMatrix{
    elements: Vec<Complex>,
    rows: usize,
    columns: usize,
}

Como podemos ver, la matriz es en realidad un vector de tamaño \(m\cdot n\). Para acceder a cada elemento de la matriz, utilizamos un algoritmo de redireccionamiento, que podemos ver en la implementación del trait Index:

impl Index<[usize; 2]> for ComplexMatrix {
    type Output = Complex;

    fn index(&self, index: [usize; 2]) -> &Self::Output {
        let [row, column] = &index;

        if row >= &self.rows || column >= &self.columns {
            panic!("Index out of range.")
        }

        &self.elements[(row * &self.columns) + column]
    }
}

Las funciones para suma, multiplicación por escalares e inverso aditivo, no las escribo en el post, puesto que su implementación es análoga a la utilizada sobre vectores (porque nuestra implementación por debajo es únicamente un vector).

El código completo se puede encontrar en mi repositorio JPYamamoto/quantum_computing_studies.

Ejercicio 2.2.5

Find the transpose, conjugate, and adjoint of \[\begin{bmatrix}6-3i&2+12i&-19i\\0&5+2.1i&17\\1&2+5i&3-4.5i\end{bmatrix}.\]

Obtenemos la transpuesta intercambiando los índices de las entradas:

\[\begin{bmatrix}6-3i&0&1\\2+12i&5+2.1i&2+5i\\-19i&17&3-4.5i\end{bmatrix}\]

Para la conjugada, únicamente conjugamos cada uno de los números en las entradas:

\[\begin{bmatrix}6+3i&2-12i&19i\\0&5-2.1i&17\\1&2-5i&3+4.5i\end{bmatrix}\]

La adjunta resulta de combinar ambas operaciones anteriores:

\[\begin{bmatrix}6+3i&0&1\\2-12i&5-2.1i&2-5i\\19i&17&3+4.5i\end{bmatrix}\]

Ejercicio 2.2.6

Prove that conjugation respects scalar multiplication, i.e., \(\overline{c\cdot A}=\overline{c}\cdot\overline{A}\).

Sean \(c\) un escalar y \(A\) una matriz.

\[ \overline{c\cdot A}[j,k] = \overline{\left(c\cdot A\right)[j,k]} = \overline{c\times A[j,k]} \]

Por el Ejercicio 1.2.11 sabemos que lo anterior implica \(\overline{c}\times \overline{A[j,k]}\).

Ejercicio 2.2.7

Propiedades de las operaciones de transposición, conjugación y adjunta (o daga). Para toda \(c\in\Complex\) y para todas matrices \(A,B\in\Complex^{m\times n}\):

  1. La transposición es idempotente: \(\left(A^T\right)^T=A\).
  2. La transposición respeta la suma: \(\left(A+B\right)^T=A^T+B^T\).
  3. La transposición respeta el producto por escalares: \(\left(c\cdot A\right)^T=c\cdot A^T\).
  4. La conjugación es idempotente: \(\overline{\overline{A}}=A\).
  5. La conjugación respeta la suma: \(\overline{A+B}=\overline{A}+\overline{B}\).
  6. La conjugación respeta el producto por escalares: \(\overline{c\cdot A}=\overline{c}\cdot\overline{A}\).
  7. La adjunta es idempotente: \(\left(A^{\dag}\right)^{\dag}=A\).
  8. La adjunta respeta la suma: \(\left(A+B\right)^{\dag}=A^{\dag}+B^{\dag}\).
  9. La adjunta está relacionada con el producto por escalar: \(\left(c\cdot A\right)^{\dag}=\overline{c}\cdot A^{\dag}\).

Prove Properties 7, 8, and 9 using Properties 1-6.

Para la propiedad 7. Tenemos por definición de la adjunta que \(\left(A^{\dag}\right)^{\dag}=\overline{\overline{A^T}}^{T}\). Por la propiedad 4 lo anterior es igual que \({A^{T}}^{T}\). Y eso es igual a \(A\) por la propiedad 1.

Para la propiedad 8. \(\left(A+B\right)^{\dag}=\overline{A+B}^T\). Por la propiedad 5 es igual \(\left(\overline{A}+\overline{B}\right)^T\), y por la propiedad 2 es lo mismo \(\overline{A}^T+\overline{B}^T\). Por definición, lo anterior es igual que \(A^{\dag}+B^{\dag}\).

Para la propiedad 9. \(\left(c\cdot A\right)^{\dag}=\overline{c\cdot A}^T\). Por la propiedad 6 tenemos que es lo mismo \(\left(\overline{c}\cdot\overline{A}\right)^T\), y por la propiedad 3 tenemos \(\overline{c}\cdot\overline{A}^T\). Por definición de adjunta, lo anterior es \(\overline{c}\cdot A^{\dag}\).

Ejercicio 2.2.8

\[ A=\begin{bmatrix}3+2i&0&5-6i\\1&4+2i&i\\4-i&0&4\end{bmatrix} \] \[ B=\begin{bmatrix}5&2-i&6-4i\\0&4+5i&2\\7-4i&2+7i&0\end{bmatrix} \]

Find \(B\star A\). Does it equal \(A\star B\)?

Omito los pasos intermedios, solo aclarando que el operador \(\star\) corresponde a la multiplicación de matrices usual.

\[ B\star A=\begin{bmatrix}37-13i&10&50-44i\\12+3i&6+28i&3+4i\\31+9i&-6+32i&4-60i\end{bmatrix} \]

El resultado es distinto de \(A\star B\).

Ejercicio 2.2.9

La multiplicación de matrices satisface las siguientes propiedades: Para cualesquiera \(A,B\) y \(C\) en \(\Complex^{n\times n}\),

  1. La multiplicación de matrices es asociativa: \((A\star B)\star C=A\star (B\star C)\).
  2. La multiplicación de matrices tiene a \(I_n\) como la unidad: \(I_n\star A=A=A\star I_n\).
  3. La multiplicación de matrices distribuye sobre la suma: \[ A\star (B+C)=(A\star B)+(A\star C),\] \[(B+C)\star A=(B\star A)+(C\star A).\]
  4. La multiplicación de matrices respeta el producto escalar: \[c\cdot (A\star B)=(c\cdot A)\star B=A\star(c\cdot B).\]
  5. La multiplicación de matrices se relaciona a la transpuesta: \[\left(A\star B\right)^T = B^T\star A^T.\]
  6. La multiplicación de matrices respeta la conjugación: \[\overline{A\star B}=\overline{A}\star\overline{B}.\]
  7. La multiplicación de matrices se relaciona con la adjunta: \[\left(A\star B\right)^{\dag}=B^{\dag}\star A^{\dag}.\]

Prove Property 5 in the above list.

Sean \(A\) y \(B\) matrices en \(\Complex^{n\times n}\).

\[\begin{aligned}&\left(A\star B\right)^T[j,k] = \left(A\star B\right)[k,j]=\sum_{h=0}^{n-1}\left(A[k,h]\times B[h,j]\right)\\&= \sum_{h=0}^{n-1}\left(B[h,j]\times A[k,h]\right) = \sum_{h=0}^{n-1}\left(B^T[j,h]\times A^T[h,k]\right) = \left(B^T\star A^T\right)[j,k]\end{aligned}\]

Ejercicio 2.2.10

\[ A=\begin{bmatrix}3+2i&0&5-6i\\1&4+2i&i\\4-i&0&4\end{bmatrix} \] \[ B=\begin{bmatrix}5&2-i&6-4i\\0&4+5i&2\\7-4i&2+7i&0\end{bmatrix} \]

Use \(A\) and \(B\) and show that \((A\star B)^{\dag}=B^{\dag}\star A^{\dag}\).

El libro nos dice que

\[ A\star B=\begin{bmatrix}26-52i&60+24i&26\\9+7i&1+29i&14\\48-21i&15+22i&20-22i\end{bmatrix} \]

por lo tanto

\[ \left(A\star B\right)^{\dag}=\begin{bmatrix}26+52i&9-7i&48+21i\\60-24i&1-29i&15-22i\\26&14&20+22i\end{bmatrix} .\]

por otro lado tenemos

\[ A^{\dag}=\begin{bmatrix}3-2i&1&4+i\\0&4-2i&0\\5+6i&-i&4\end{bmatrix} \] \[ B^{\dag}=\begin{bmatrix}5&0&7+4i\\2+i&4-5i&2-7i\\6+4i&2&0\end{bmatrix} \]

cuyo resultado es igual

\[ \left(A\star B\right)^{\dag}=\begin{bmatrix}26+52i&9-7i&48+21i\\60-24i&1-29i&15-22i\\26&14&20+22i\end{bmatrix} .\]

Ejercicio 2.2.11

Prove Property 7 from Properties 5 and 6.

\[ \left(A\star B\right)^{\dag}=\overline{A\star B}^T=\left(\overline{A}\star\overline{B}\right)^T=\overline{B}^T\star\overline{A}^T=B^{\dag}\star A^{\dag} \]