{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e5e44fb3",
   "metadata": {},
   "source": [
    "## Ejemplo 3.3: Un fotón con incertidumbre"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71cd75b7",
   "metadata": {},
   "source": [
    "$\\newcommand{\\ket}[1]{|{#1}\\rangle}\\newcommand{\\bra}[1]{\\langle{#1}|}$Modelamos un fotón con polarización lineal $\\theta$ con el estado puro $\\ket{\\theta} = \\bigl[\\begin{smallmatrix}\\cos(\\theta)\\\\ \\sin(\\theta)\\end{smallmatrix}\\bigr]$.\n",
    "\n",
    "Consideremos un experimento que genera un fotón con una polarización bien $\\ket{\\pi/3}$ o $\\ket{\\pi/4}$, pero desconocemos cuál de ellas. Si las dos polarizaciones tienen la misma probabilidad, el estado resultante se corresponde con la *mezcla probabilística* de las matrices de densidad de cada posibilidad:\n",
    "\\begin{align*}\n",
    "  \\rho = \\frac{1}{2} \\ket{\\pi/3} \\bra{\\pi/3} + \\frac{1}{2} \\ket{\\pi/4} \\bra{\\pi/4}.\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e51496e6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rho =\n",
      "\n",
      "   0.3750   0.4665\n",
      "   0.4665   0.6250\n",
      "\n"
     ]
    }
   ],
   "source": [
    "% Definimos una función que devuelve la matriz de densidad de probabilidad de este fotón\n",
    "function [rho] = foton(theta)\n",
    "  ket_theta = [cos(theta); sin(theta)];\n",
    "  rho = ket_theta * ket_theta';\n",
    "end\n",
    "\n",
    "rho = 1/2*foton(pi/3) + 1/2*foton(pi/4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04c52a7e",
   "metadata": {},
   "source": [
    "Se puede comprobar que $\\rho$ cumple las propiedades de una matriz de densidad de un sistema cuántico: $\\rho\\succeq 0$, $\\rho=\\rho^H$ y $\\text{Tr}[\\rho]=1$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5b8486fb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "autovalores_rho =\n",
      "\n",
      "   0.982963\n",
      "   0.017037\n",
      "\n",
      "rho es autohermitica\n",
      "traza_rho = 1\n"
     ]
    }
   ],
   "source": [
    "autovalores_rho = eigs(rho)\n",
    "if(isequal(rho,rho')), printf('rho es autohermitica\\n') else printf('rho no es autohermitica\\n') end\n",
    "traza_rho = trace(rho)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3271a5ba",
   "metadata": {},
   "source": [
    "Además en este caso, el estado resultante es un estado mixto, ya que el rango de $\\rho$ es igual a $2 > 1$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6f653e76",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rango_rho = 2\n"
     ]
    }
   ],
   "source": [
    "% Calculamos su rango con el comando:\n",
    "rango_rho = rank(rho)"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Octave",
   "language": "octave",
   "name": "octave"
  },
  "language_info": {
   "file_extension": ".m",
   "help_links": [
    {
     "text": "GNU Octave",
     "url": "https://www.gnu.org/software/octave/support.html"
    },
    {
     "text": "Octave Kernel",
     "url": "https://github.com/Calysto/octave_kernel"
    },
    {
     "text": "MetaKernel Magics",
     "url": "https://metakernel.readthedocs.io/en/latest/source/README.html"
    }
   ],
   "mimetype": "text/x-octave",
   "name": "octave",
   "version": "8.2.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
