{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Matrix norms"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import numpy.linalg as la\n",
        "import matplotlib.pyplot as pt"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Here's a matrix of which we're trying to compute the norm:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "array([[-0.12603194,  0.74240991],\n",
              "       [ 0.07209953, -0.91593647]])"
            ]
          },
          "execution_count": 14,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "n = 2\n",
        "A = np.random.randn(n, n)\n",
        "A"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Recall:\n",
        "\n",
        "$$||A||=\\max_{\\|x\\|=1} \\|Ax\\|,$$\n",
        "\n",
        "where the vector norm must be specified, and the value of the matrix norm $\\|A\\|$ depends on the choice of vector norm.\n",
        "\n",
        "For instance, for the $p$-norms, we often write:\n",
        "\n",
        "$$||A||_2=\\max_{\\|x\\|=1} \\|Ax\\|_2,$$\n",
        "\n",
        "and similarly for different values of $p$."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "--------------------\n",
        "We can approximate this by just producing very many random vectors and evaluating the formula:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "xs = np.random.randn(n, 1000)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "First, we need to bring all those vectors to have norm 1. First, compute the norms:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(1000,)"
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "p = 2\n",
        "norm_xs = np.sum(np.abs(xs)**p, axis=0)**(1/p)\n",
        "norm_xs.shape"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Then, divide by the norms and assign to `normalized_xs`:\n",
        "\n",
        "Then check the norm of a randomly chosen vector."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "1.0"
            ]
          },
          "execution_count": 16,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "normalized_xs = xs/norm_xs\n",
        "la.norm(normalized_xs[:, 316], p)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Let's take a look:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f71b4646160>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "pt.plot(normalized_xs[0], normalized_xs[1], \"o\")\n",
        "pt.gca().set_aspect(\"equal\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Now apply $A$ to these normalized vectors:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "A_nxs = A.dot(normalized_xs)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "--------------\n",
        "Let's take a look again:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f71b46a20b8>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "pt.plot(normalized_xs[0], normalized_xs[1], \"o\", label=\"x\")\n",
        "pt.plot(A_nxs[0], A_nxs[1], \"o\", label=\"Ax\")\n",
        "pt.legend()\n",
        "pt.gca().set_aspect(\"equal\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Next, compute norms of the $Ax$ vectors:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(1000,)"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "norm_Axs = np.sum(np.abs(A_nxs)**p, axis=0)**(1/p)\n",
        "norm_Axs.shape"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "What's the biggest one?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "1.4175372998707851"
            ]
          },
          "execution_count": 10,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "np.max(norm_Axs)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Compare that with what `numpy` thinks the matrix norm is:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "1.4175373681672399"
            ]
          },
          "execution_count": 11,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "la.norm(A, p)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": []
    }
  ],
  "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.5.0+"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}