diff --git a/presentation/main.tex b/presentation/main.tex new file mode 100644 index 0000000..3066244 --- /dev/null +++ b/presentation/main.tex @@ -0,0 +1,108 @@ +\documentclass[10pt]{beamer} + +\usepackage[utf8]{inputenc} +\usepackage{graphicx} +\usepackage{amssymb, amsthm} +\usepackage{setspace} +\usepackage{amsmath} +\usepackage{hyperref} +\usepackage{geometry} +\usepackage{enumerate} +\usepackage{physics} +\usepackage{listings} +%\usepackage{struktex} +\usepackage{qcircuit} + +\newtheorem{definition}{Definition} +\newtheorem{postulate}{Postulate} +\newtheorem{corrolary}{Corrolary} +\newtheorem{lemma}{Lemma} +\newtheorem{theorem}{Theorem} + +\usetheme[progressbar=frametitle]{metropolis} + +\setbeamercolor{background canvas}{bg=white!20} + +\title{An Efficient Quantum Computing Simulator using a Graphical Description for Many-Qbit Systems} +\subtitle{Simulation in the Stabilizer Formalism} +\author{Daniel Knüttel} +\date{21.02.2020} +\institute{Universität Regensburg} + +\titlegraphic{\small\center Universität Regensburg\\ + Faculty of the Institute of Theoretical Physics + \vspace{-11mm}\flushright\includegraphics[height=1.0cm]{logo.png}} + + +%\logo{\includegraphics[width=1cm]{logo.png}\hfill} +%\newcommand{\nologo}{\setbeamertemplate{logo}{}} % command to set the logo to nothing +%\newcommand{\congress}{Faculty of the Institute of Theoretical Physics} + +%% footer +\makeatletter +\setbeamertemplate{footline} +{ + %\leavevmode% + \hbox{% + + \begin{beamercolorbox}[wd=.9\paperwidth,ht=2.25ex,dp=1ex,left]{Faculty of the Institute of Theoretical Physics}% + \end{beamercolorbox}% + + \begin{beamercolorbox}[wd=.1\paperwidth,ht=2.25ex,dp=1ex,right]{Faculty of the Institute of Theoretical Physics}% + \insertframenumber{} / \inserttotalframenumber\hspace*{2ex} + \end{beamercolorbox}}% + +} +\makeatother + +\begin{document} + +\maketitle + +\section{Introduction} + +{ +\begin{frame}{Motivation} + + \begin{itemize} + \item Some (physical) problems are classically hard to solve. + \item The quantum simulator: Mapping a hard problem to quantum hardware that can simulate this specific problem. + \item The (universal) quantum computer: able to simulate any unitary transformation on the system. + \end{itemize} + +\end{frame} +} + +{ +\begin{frame}{Quantum Errors and Quantum Error Correction} + \begin{itemize} + \item Quantum systems at non-zero temperature often have dephasing effects and a finite population lifetime (relaxation). + \item Fault tolerant QC needs a way to correct for those errors. + \item Several strategies exist one important class of quantum error correction codes are \textbf{stabilizer codes}. + \end{itemize} + +\end{frame} +} + +\section{Binary Quantum Computing} + +{ + +\begin{frame}{Qbits} + + \begin{definition} + A qbit is a two-level quantum mechanical system $\ket{0}, \ket{1}$ with $\braket{0}{1} = 0$. + + In the following $Z = \sigma_Z, X = \sigma_X, Y = \sigma_Y, I = \id$ will be used. + \end{definition} + + Where $Z\ket{0} = +1\ket{0}$ and $Z\ket{1} = -1\ket{1}$. + + \begin{postulate} + A $n$-qbit system is the tensor product of the single-qbit systems. + \end{postulate} + + +\end{frame} +} +\end{document} diff --git a/presentation/spin_chain/time_evolution.ipynb b/presentation/spin_chain/time_evolution.ipynb new file mode 100644 index 0000000..0d05b72 --- /dev/null +++ b/presentation/spin_chain/time_evolution.ipynb @@ -0,0 +1,120 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "simulating... 99 % \n", + "done.\n" + ] + }, + { + "data": { + "image/png": "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fa2zrT+u9qNYZ5sIoLfzvgew/HzaY86cOUOZMmWsgDHGmDREhDJlyhAQEFAko3V8uZP5GFgjIvOd6TuBydndWFUTRWQgsBjwA6ao6k8i8hIQraoRQHPgVRFRXNVlA5zN5+IaUiClp9siVf1KRIoCi50Cxg9YBnzkbDMZmC4iccCfuAq18+JrAdPzw9WAhZswxlz+RCTT78hsFTJOY/ocXF2GmzizH1DVjb5kRlUXAgvTzBvh8X4urgIl7XZJwENe5p8E6meQ1hksGoEx5iLgazXU5SRb1WVONdNCVd2gqu86L58KGHP+4uPj6dKlC9WrV+emm25i4MCB/P333zmezooVK/jhhx9yfL8Xk6lTp7J//373dN++ffn555wJXHH69GmaNWtGUtI/tcrHjx+nUqVKDBzo7t/C+vXrCQ4Oplq1agwePJiUWtw///yT1q1bU716dVq3bs3Ro0dzJF8XolixnP1ynDp1KmXLlqVOnTrUqVOHSZMmuZd98sknVK9enerVq/PJJ5943f7tt9/m1KlTPqebdrv//ve/vmee879e0l53zz4+IMeuu7Ti9+wm4ovZOb7fp556iuXLl/u8na9P/If7nIK5IKpKt27duPPOO9mxYwc7duzg9OnTPPPMMzme1pVYyEyaNInatWtnskX2TZkyhW7duuHn5+ee98ILL3DbbbelWu+RRx7ho48+cn+eixa5gpmPGTOGVq1asWPHDlq1asWYMWNyJF8Xm549exITE0NMTAx9+/YFXAXsiy++yJo1a1i7di0vvvii10I2s0LGs3DParvzKWSSkpLO+3pJe929+tb4HLvu0orfu4ev5uV8ITNo0KDzuyZVNVsvXE/3JwK/AptxtY9szu72l8Krfv36mtbPP//sfj8qIlbvnvBDlq+gkYs0aOSibK07KiI2XZqeli1bpk2bNk0176+//tJSpUrpiRMn9OOPP9YBAwa4l3Xo0EEjIyNVVfXhhx/W+vXra+3atXXEiBHudSpXrqwjRozQunXralBQkG7dulV37typ5cqV0woVKmhoaKhGRUVp7969dc6cOe7tihYtqqqqkZGRetttt2nnzp21SpUqOnToUP300081PDxcg4KCNC4uLt1xnDhxQvv06aNBQUEaHBysc+fOVVXVmTNnalBQkAYGBuozzzyTKq2nnnpKa9eura1atdI1a9Zos2bN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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from pyqcs import State, sample\n", + "from transfer_matrix import T_time_slice\n", + "from hamiltonian import H\n", + "\n", + "from scipy.linalg import expm\n", + "\n", + "nqbits = 3\n", + "g = 0.20\n", + "N = 50\n", + "t_stop = 5\n", + "delta_t = 0.05\n", + "qbits = list(range(nqbits))\n", + "\n", + "n_sample = 400\n", + "measure = 0b10\n", + "\n", + "\n", + "results_qc = []\n", + "results_np = []\n", + "print()\n", + "for t in np.arange(0, t_stop, delta_t):\n", + " # QC simulation\n", + " state = State.new_zero_state(nqbits)\n", + "\n", + " for _ in range(N):\n", + " state = T_time_slice(qbits, t, g, N) * state\n", + "\n", + " #result = sample(state, measure, n_sample)\n", + "\n", + " #results_qc.append(result[0] / n_sample)\n", + "\n", + " amplitude = np.sqrt(np.sum(np.abs(state._qm_state[[False if (i & measure) else True for i in range(2**nqbits)]])**2))\n", + " results_qc.append(amplitude)\n", + "\n", + " # Simulation using matrices\n", + " np_zero_state = np.zeros(2**nqbits)\n", + " np_zero_state[0] = 1\n", + "\n", + " itH = np.matrix(-1j * t * H(nqbits, g))\n", + " T = expm(itH)\n", + "\n", + " np_state = T.dot(np_zero_state)\n", + " amplitude = np.sqrt(np.sum(np.abs(np_state[[False if (i & measure) else True for i in range(2**nqbits)]])**2))\n", + " results_np.append(amplitude)\n", + "\n", + " print(f\"simulating... {int(t/t_stop*100)} % \", end=\"\\r\")\n", + "print()\n", + "print(\"done.\")\n", + "\n", + "errors_trotter = np.arange(0, t_stop, delta_t)**2 / N**2\n", + "\n", + "\n", + "h0 = plt.errorbar(np.arange(0, t_stop, delta_t), results_qc, yerr=errors_trotter, label=f\"Quantum computing ({n_sample} samples, {N} trotterization steps)\")\n", + "h1, = plt.plot(np.arange(0, t_stop, delta_t), results_np, label=\"Classical simulation using explicit transfer matrix\")\n", + "plt.xlabel(\"t\")\n", + "plt.ylabel(r\"$|0\\rangle$ probability amplitude for second spin\")\n", + "plt.title(f\"{nqbits} site spin chain with g={g} coupling to external field\")\n", + "plt.legend(handles=[h0, h1])\n", + "\n", + "plt.show()\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}