{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Table of Contents](table_of_contents.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Topic 6. Projection Operators\n", "\n", "Author: Alexander Petrie \n", "Email: alexander.petrie@gmail.com\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "A projection is a mapping of some space onto a subspace of the original space. A **projection operator** is a linear operator P that maps a space to the subspace. In order for an operater to be a projection operator, it must be idempotent. This means that whenever P is applied twice to any value, it gives the same result as if it were applied just once. i.e. $P^2 = P$. One example of a projection is mapping a 3D object onto a 2D subspace. This is done in video games. The graphics are often generated in a 3D environment and they are then projected onto a 2D screen so we can see them. A projection is an orthogonal projection if its range and nullspace are orthogonal. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Explaination of the theory\n", "Let $W$ be a finite dimentional vector space and $P$ be a projection on $W$. Suppose the subspaces $U$ avnd $V$ are the range and null space of $P$ respectively. \n", "\n", "### Properties of a projection operator\n", "* $P^2 = P$ ($P$ is *idempotent*)\n", " * This means that if you use $P$ to try to operate on a value that has already been operated on by $P$, the value will not change. \n", " \n", " \n", "* $\\forall \\, x \\in U \\, \\colon \\, Px = x$\n", " * This means that if $P$ operates on some value in the range space of $P$, that value does not change.\n", " \n", " \n", "* There is a direct sum $W = U \\bigoplus V$. Every vector x in $W$ my be decomposed as x = u + v where u is in range of $P$ and v is in the null space of $P$\n", " * In other words: if $P\\,\\colon\\;W\\rightarrow W$, then $W = \\mathcal{R}(P) + \\mathcal{N}(P)$\n", " \n", " \n", "* The range and null space of a projection are complimentary, meaning they are disjoint.\n", "\n", "\n", "* If $P$ is a projection, $(I - P)$ is also a projection.\n", " * Proof: $(I-P)^2 = (I-P)(I-P)$ \n", " $=I-P-P-P^2 = I - P - P + P$ \n", " $= I-P$\n", " \n", " \n", "* $P$ projects onto the range space $U$. $(I-P)$ projects onto the null space $V$.\n", "\n", "### Orthogonal projections\n", "When $U$ (range space of $P$) and $V$ (null space of $P$) are orthogonal subspaces, ($\\mathcal{R}(P)\\, \\bot\\,\\mathcal{N}(P)$), $P$ is an **orthogonal projection**. Orthogonal projections are very useful because if you can orthgonally project a value onto a subspace, that projection is the closest representation of the value on that subspace (see engineering example at the end). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simple Numerical Example\n", "\n", "### Example 1\n", "\n", "This first example is an orthogonal projection of a vector in $\\mathbb{R}^2$ to the line y = 0. It orthogonally projects all points in $\\mathbb{R}^2$ to this line. \n", "The projection matrix is:\n", "$$\n", " P=\n", " \\left[ {\\begin{array}{cc}\n", " 1 & 0 \\\\\n", " 0 & 0 \\\\\n", " \\end{array} } \\right]\n", "$$\n", "\n", "You can verify it is a projection by computing $P^2 = P$. \n", "You can change the x and y points in the code and it will show how they project onto the line y = 0." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'y - axis')" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt \n", "\n", "# Change the variables below (keep values between -10 and 10)\n", "x = -2\n", "y = 5\n", "\n", "# Form vector (in R2) z from points x and y\n", "z = np.array([[x],[y]])\n", "\n", "#Form projection matrix\n", "P = np.array([[1,0],[0,0]])\n", "\n", "#project z onto line y = 0\n", "z_proj = np.dot(P,z)\n", "\n", "#plot result\n", "plt.plot([z[0],z_proj[0]],[z[1],z_proj[1]],color='green', linestyle='dashed', linewidth = 3, \n", " marker='o', markerfacecolor='blue', markersize=8)\n", "plt.ylim(-10, 10)\n", "plt.xlim(-10, 10)\n", "plt.plot([-10,10],[0,0])\n", "# x-axis label \n", "plt.xlabel('x - axis') \n", "# frequency label \n", "plt.ylabel('y - axis') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example 2\n", "\n", "This example is similar to the first in that it maps all points in $\\mathbb{R}^2$ to a line. However, now the line is y = x. \n", "The projection matrix in this case is: \n", "\n", "$$\n", " P=\n", " \\left[ {\\begin{array}{cc}\n", " 0.5 & 0.5 \\\\\n", " 0.5 & 0.5 \\\\\n", " \\end{array} } \\right]\n", "$$ \n", "You can change the x and y points in the code and it will show how they project onto the line y = x." ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-11.0, 11.0, -11.0, 11.0)" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt \n", "\n", "# Change the variables below (keep values between -10 and 10)\n", "x = -5\n", "y = 8\n", "\n", "# Form vector (in R2) z from points x and y\n", "z = np.array([[x],[y]])\n", "\n", "#Form projection matrix\n", "P = np.array([[0.5,0.5],[0.5,0.5]])\n", "\n", "#project z onto line y = 0\n", "z_proj = np.dot(P,z)\n", "\n", "#plot result\n", "plt.plot([z[0],z_proj[0]],[z[1],z_proj[1]],color='green', linestyle='dashed', linewidth = 3, \n", " marker='o', markerfacecolor='blue', markersize=8)\n", "plt.ylim(-10, 10)\n", "plt.xlim(-10, 10)\n", "plt.plot([-10,10],[-10,10])\n", "# x-axis label \n", "plt.xlabel('x - axis') \n", "# frequency label \n", "plt.ylabel('y - axis') \n", "plt.axis('equal')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## An Engineering Application\n", "\n", "If we are given a point $x \\in S$, suppose that we would like to approximate $x$ with a point in $V \\subset S$. Assuming that $x \\notin V$, we need to find the point in $V$ that is closest to $x$. This point is given by the orthogonal projection of $x$ onto $V$. \n", "\n", "In this example, let $V$ be the plane in $\\mathbb{R}^3$ spanned by the vectors $\n", " y = \\left[ {\\begin{array}{c}\n", " 1 \\\\\n", " 0 \\\\\n", " 1 \\\\\n", " \\end{array} } \\right]\n", "$\n", "and\n", "$\n", " z =\\left[ {\\begin{array}{c}\n", " 0 \\\\\n", " 1 \\\\\n", " 1 \\\\\n", " \\end{array} } \\right]\n", "$.\n", "\n", "If $\n", "A=\n", " \\left[ {\\begin{array}{cc}\n", " 1 & 0 \\\\\n", " 0 & 1 \\\\\n", " 1 & 1 \\\\\n", " \\end{array} } \\right]\n", "$ \n", "then the projection matrix that projects points in $\\mathbb{R}^3$ orthogonally onto the plane spanned by $y$ and $z$ is described by $P = A(A^HA)^{-1}A^H$. Note that the columns of $A$ are the vectors that span $V$. In the python code below, we project the vector \n", "$\n", " q =\\left[ {\\begin{array}{c}\n", " 7 \\\\\n", " 8 \\\\\n", " 9 \\\\\n", " \\end{array} } \\right]\n", "$\n", "onto the plane $V = span(x,y)$, and get $\n", " Pq =\\left[ {\\begin{array}{c}\n", " 5 \\\\\n", " 6 \\\\\n", " 11 \\\\\n", " \\end{array} } \\right]\n", "$.\n", "\n", "This vector is the closest approximation of $q$ on $V$." ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is the projection matrix\n", "[[ 0.66666667 -0.33333333 0.33333333]\n", " [-0.33333333 0.66666667 0.33333333]\n", " [ 0.33333333 0.33333333 0.66666667]]\n", "This is the approximation on the plane V\n", "[[ 5.]\n", " [ 6.]\n", " [11.]]\n" ] } ], "source": [ "import numpy as np\n", "\n", "A = np.array([[1, 0],[0, 1],[1, 1]])\n", "T = np.linalg.inv(np.dot(A.T,A))\n", "P = np.dot(T,A.T)\n", "P = np.dot(A,P)\n", "print('This is the projection matrix')\n", "print(P)\n", "\n", "q = np.array([[7],[8],[9]])\n", "Pq = np.dot(P,q)\n", "print('This is the approximation on the plane V')\n", "print(Pq)" ] } ], "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.0" } }, "nbformat": 4, "nbformat_minor": 2 }