{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction to Finite Frames and RIC-POVM's" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Maturing out of our reflexive habit of working with orthonormal bases, we can instead work with an overcomplete basis or \"frame,\" which can have as many elements as we like. In fact, with probability 1, any randomly chosen set of vectors ($n \\ge d$) will form a frame.\n", "\n", "Let's just think about $d=2$ real vector space. Why not a frame made of 5 vectors?" ] }, { "cell_type": "code", "execution_count": 449, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.1443, 0.0924, 0.7253, 0.4074, -0.2219],\n", " [ 1.2268, 0.234 , 1.0096, 1.3012, -0.2936]])" ] }, "execution_count": 449, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "import scipy as sc\n", "import scipy.linalg\n", "np.set_printoptions(precision=4, suppress=True)\n", "\n", "d, n = 2, 5\n", "R = np.random.randn(d, n); R" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can form the Gram matrix, aka the matrix of inner products:" ] }, { "cell_type": "code", "execution_count": 450, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1.5258, 0.2737, 1.1339, 1.5375, -0.3282],\n", " [ 0.2737, 0.0633, 0.3032, 0.3421, -0.0892],\n", " [ 1.1339, 0.3032, 1.5454, 1.6092, -0.4574],\n", " [ 1.5375, 0.3421, 1.6092, 1.8591, -0.4724],\n", " [-0.3282, -0.0892, -0.4574, -0.4724, 0.1355]])" ] }, "execution_count": 450, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G = R.T @ R; G" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One condition for everything being kosher is that the Gram matrix ought to be rank-$d$." ] }, { "cell_type": "code", "execution_count": 451, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4.7074, 0.4216, 0. , 0. , 0. ])" ] }, "execution_count": 451, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.round(np.linalg.svd(G)[1], decimals=4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We should also check out:" ] }, { "cell_type": "code", "execution_count": 452, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.7706, 1.1721],\n", " [1.1721, 4.3584]])" ] }, "execution_count": 452, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R @ R.T" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll have a frame if the latter has non-0 determinant aka is full rank. This means that the rows of $R$ are linearly independent." ] }, { "cell_type": "code", "execution_count": 453, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.9847520214675856" ] }, "execution_count": 453, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.det(R @ R.T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By the way, the technical definition of a frame is a set of vectors $\\{v\\}$, for which there are constants $a, b > 0$ such that for any vector $u$:\n", "\n", "$$ a ||u||^2 \\leq \\sum_{i} |\\langle u|v_{i}\\rangle|^2 \\leq b||u||^2 $$\n", "\n", "The $a$ and $b$ are called frame bounds, and this definition is always satisfied if the aforementioned conditions are true. We won't be using this definition too much. \n", "\n", "