{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Conditioning of Derviative Matrices\n",
        "\n",
        "Construct a matrix that takes a (first) centered difference of a periodic function on $[0,1]$. Call that matrix `D`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import numpy.linalg as la\n",
        "import matplotlib.pyplot as plt"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 80,
      "metadata": {},
      "outputs": [],
      "source": [
        "npts = 100"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 81,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "array([[  0.,  50.,   0., ...,   0.,   0., -50.],\n",
              "       [-50.,   0.,  50., ...,   0.,   0.,   0.],\n",
              "       [  0., -50.,   0., ...,   0.,   0.,   0.],\n",
              "       ..., \n",
              "       [  0.,   0.,   0., ...,   0.,  50.,   0.],\n",
              "       [  0.,   0.,   0., ..., -50.,   0.,  50.],\n",
              "       [ 50.,   0.,   0., ...,   0., -50.,   0.]])"
            ]
          },
          "execution_count": 81,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "\n",
        "x = np.linspace(0, 1, npts, endpoint=False)\n",
        "\n",
        "h = x[1] - x[0]\n",
        "D = (\n",
        "    np.roll(np.diag(np.ones(npts)), -1, axis=0)\n",
        "    -\n",
        "    np.roll(np.diag(np.ones(npts)), 1, axis=0)\n",
        ")/(2*h)\n",
        "\n",
        "D"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Or: an alternate matrix that's based on a global polynomial"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 70,
      "metadata": {},
      "outputs": [],
      "source": [
        "a = np.arange(npts, dtype=np.float64)\n",
        "\n",
        "# Chebyshev nodes\n",
        "nodes = np.cos((2*(a+1)-1)/(2*npts)*np.pi)\n",
        "\n",
        "x = nodes\n",
        "\n",
        "Vdm = np.empty((npts, npts))\n",
        "Vdm_deriv = np.zeros((npts, npts))\n",
        "for i in range(npts):\n",
        "    Vdm[:, i] = np.cos(i*np.arccos(x))\n",
        "    Vdm_deriv[:, i] = (i*np.sin(i*np.arccos(x)))/np.sqrt(1-x**2)\n",
        "        \n",
        "D = Vdm_deriv @ la.inv(Vdm)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Test that the matrix actually takes derivatives:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 82,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "0.111424462966\n"
          ]
        }
      ],
      "source": [
        "alpha = 3\n",
        "\n",
        "f = np.sin(alpha * 2*np.pi*x)\n",
        "df = alpha*2*np.pi*np.cos(alpha * 2*np.pi*x)\n",
        "\n",
        "print(la.norm(df - D@f, np.inf))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 83,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7feddbf12278>]"
            ]
          },
          "execution_count": 83,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7feddbf12358>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(x, D@f- df)\n",
        "plt.plot(x, df)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Investigate the norm of this matrix."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 84,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "100.0"
            ]
          },
          "execution_count": 84,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "la.norm(D, np.inf)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "What function gets amplified like that?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 85,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "100.0"
            ]
          },
          "execution_count": 85,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "amp_func = np.ones(npts)\n",
        "amp_func[2::4] = -1\n",
        "amp_func[3::4] = -1\n",
        "la.norm(D@amp_func, np.inf)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 86,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7fede076bba8>]"
            ]
          },
          "execution_count": 86,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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\nvDhzCQBrtrYyvN+uXH7SgRzcv2fJedp7t6787stjeHLmCu54cRE7tjbRIgWd6gW3fPEQTh89ACFE\n8Tp0bqjj28cN4+SRffn543PZ+L6HmldtaeHCY4ZyyfHD6N65ARa35WiPG743Y4f05uan3+a9+dML\n85v5yL57cOUpw/nQHruUyDR4z12492tH8MAb7/HX196htaWZTTskPXfvxN3/bwyfPHDvkvndOzfw\n408fxGcO6c+NT85ly5pGmmQdG7c38/3/2p9xx+xL54Y6WOfJJFpbOOPDgzlm/z784om5rF2y0NPX\nzU2cPKIvPzp5OHvt1hW2fVBcw4gBPZl40VH84eXFTJq2HNHazAfbW9mndzduPWs0Ywb3LpFp9106\nc/MXDuH0Q/tz67Pz2b6ukcYWQXNLK/9z2sF86YgPUVcn4G1Ppnpa+MpRQzh++N5c/8QcPli2tXit\nzx47kB+ccCA9u3WCVeuLMh05dA+euORobvvnfF6btah4rUcM6MkVJx/IgX13C9xDLfTr2Y27zh3D\nYzNWeCmczU00ii50aajj/84+lM+M6le41t4aujTUc+mn9ufkkf24/ok5bFxZuK83N/ONY/flkuOG\n0bVTPSxoqxGccHBfjhy6Bzc/PY+VC6YW5rfwsf325MpThjOwd/eS87Rvnx7cP+5I7n39Xe5/411k\nSzMbGyV79O7CtaeN4OP79ylZQ48uDVxz6sF85pB+/PKpecVrvamxmctOPJALjh5Cp/o6WNl2rb8w\nZiDHHtCHXzw+l3Xveum+5RubkMFUsyuSUmb+D88BLQKGAJ2Bt4CDo+YfdthhMhU9d52UV/esHP/3\n7VJevZuUW9eXjr832Ruf91Tp+JoF3vi0+yuPdcNQKR+5tHL8tjFS/v28yvGJF0l58/DK8aeulPK6\nvpXjsx/2eK+YXjq++CVvfNGLpePNO7zxF2+sPNbP+kv55I8qx/9yupR3HVc5/uBXpPy/D1eOv/pb\nj8eWtaXjbz3gja9ZUDq+brE3PvVvpePbNnjjr9xWyePXR0h5/zmV4384Uco/nlI5/vRPpPxpn8rx\nl27xeDRuKR1f8m9vfME/S8dXzvHGZ4yvPNbPB0r5+GWV47eMlHL8uMrxf1wg5a8OqRx/7AdSXj+o\ncnz6gx7vVfNKxxc8542/85/S8e2bvPGXf1V5rJ/uKeUzV1eO//EUKe8+qXL8/i9JefuRleOv/J/H\nY/vG0vE37/HG179TOr76bW98+oOl45tXe+Ov3VnJ49bRUv7j/MrxOz8h5T1nVI4/cbmUP9+ncvyF\nGz0ezU2l4wuf98YXv1w6vvwtb3z2I5XH+p+9pXzqqsrxmw6UcuI3K8cfOFfK2w6vHH/4Eilv3K9y\nfOq9Hu+1i0rH5z7hjS+dUvkbDQImSwWbXJWIQErZLIT4FvAUUA/cLaWc5YxhXQPFhzaCT8dqdxfE\nPO1nrQsjpt0vVKaINSS9etLKGixtexGXD41rB23oEjHfZkuhZiul7hq0rrXlB8qadoTMj2nVDJXJ\ntEPHkv5Z6WQy1D8rXW4G+ueAqpUaQkr5OPB4JsyCSlnXuW1cu6UwK4WJuxE1WlrjXj1ZDeek26rp\nj+muwd+nJ9iqZ/OBHu1rZ7CGWJlU253jWjUdGyzje0jXwUaswVarprWW1ph201CZsnUEtfNkMaRH\nWMYo0SX61oxSol5tWVyDZgQRKpNN9G3TYEW82jIoQ3F+nHFoZ9FflG5EvdoyViZT/bN1D7mMYJP0\nT4eHSfRn4R5yRDXiCExTGI4NlpV0gaZMUa+2jJpvJFMW6DvKwcbwsIG+izK1o+gvapdW2xFs8JgV\nPFTTMJYdrGwldJ8eW+i7atFfvumcfYpT4tAQUhP9+GNW8puWUGJRJhvoxxLCyirlFsXD2nl1XSOw\npH+21xAqk2n0ZzFKkeU8HN9DsTJlEKU4oBpzBCEnWxdVAhXpBf83OgoQt89++UtB/PlxMpW/KwDC\nawSx82OMQ9TxdWSKXEOcgYurc+hcu6QIQsdgxV1rXd0w0T/FKMXoWifpnyIPXd2IlSlK/+KiP500\nTFwKzUD/tCLYhPOUp4YskvV0gU5+M6HQFbZPjxZysIkSHec3jdMwlhCWkdF1Gf3Z1L+wa205gg2V\nyWaNwKL+uawRRL2XxPYagt87phpxBDFIwOWN6P8mTgEqXj1pmt9UVGLbHRKxMummC3RrBJrnyUad\noyiTpU3nbNQIIPza6UYQ/m+c1ghM0lUGMrmsEWRyD9XGpnPZUtHolim+TLgRy420TDAO5ccHBaXU\nzW/qRgRR7zjWMQ5JMpXziChIF3dp1XQEYec18dqFXeuYNYTNh+gooiIvHfFqS59H2KsnI2WKyn1r\noulEgxV2rWPaTYPHDPKIbdVU1I2oNfg8tPTP9For6l9SN1akvlrSPwdUW44gNF1gEgbbaNWMi1Is\nhZCxKNFluqCZ0FbNKB5GBssWSrQUpSQZB9CI/kyjlAwiWGvo20arpq0agWbK12oEa6B/DqhGHEEW\nNYIQNJPUqmkkU0qlNMrRGjinKAWOlclmjUDVwdpKFyQYkygeNtIwRZmq9HxG2HzrLa02awSOHWxk\nS6sl/XNANeII4oyDLUdgkKON4uEySqlmjrYoU5UQllXjoLmGKB5O9c8kDWigf0ZOvwr6lwimLNXZ\nIDytZ+taO6AadwRJSMMl+o5px7MapaREP0YyxRkHm+mqaj1QZrCGSJmqqH9GDlZxDZEyVVH/rEd/\nGUQpYW2zDih3BKFhbVRvr+UQMopHJvnNKrRqRvHQXYOSTLYcgSUHG5yTKFMWD5TpOljb0Z+NVs04\nMGXrHrIV/RncQ6KO0DqbA6oRR6CJvgN7nVfMDx6vhEeYwqgYh6wNVpISF3ZpLfmNpVbNSJmyQolx\nDyXZQt8ZRClhD3xZS7mZOH2b0V817iHNdlCrAM/gHnJANeIITFIYFkJtqyFkTLtppEym6SrdFEbG\nKDFpV03QQN8Ru7Rad7Co61/SeS1v1YQI/VNoi1R+oLFKNQInaZi0+qdyrS2kfHNHYJmM85uOO3TA\njsJYa9W0iLCsosTydEFCj3+oTDajFIOWwkiZNGsERkZXh4frGkEVHWzSthfKMikUi13eQw4odwRa\nBisL9G2zVdOgRqDDI9Zg2TQODnO0iTLZ6CQxjf4co+9ImVxGfza73DT1LzHlq6t/LovFMfeQA3Li\nCIQQvxRCzBVCTBdCTBBC9CqMDxZCbBNCTCv8+60L/hWUFcLKpKhky8DZSGFkhb4drqEok8sagc10\ngcUINpKHLf1zXSOwpX+m6Spd/bMU/TkgVxHBM8AIKeUo4G3gisB3C6WUowv/vu6IfylVLb/pIg2j\nGMr7vzFCiRa6MJyib4tpGJ+v0xSGpv5lFcHq8NDdEsXnYc3oZhClhLVqWo1SLDkzB+TEEUgpn5ZS\n+it7FdjHBR9lqnp+0wZK9PfpcbyG4JxEmWynq2LOa7CoqYQS00Z/7aFG4NjBQuk6knbV1FlDokw2\nHKxJ9BfhbKJaNU10I1Qm3Xuo49UIvgo8Efg8RAgxVQjxohDi6Az4Z2uwlOdbjFK01pBVsdiycwru\n0+MEJUbIFNmq6dDBxrW0Wo/+Ar+xqRtFmVx2ucWBKU3901qDRf0zcbAOyNjlCCGeBfqGfHWllHJS\nYc6VQDPwt8J3K4BBUsq1QojDgIlCiIOllBtDjj8OGAcwaNAgUzE9MsnDxSGByBDSIUqMlMkFSgwa\nh7hdNTM2WOXGyxpKjLh2dQ0RrZpxKNFS9Bfa0prkYFPqn3UHa5Dq8Vta/fNuBKYM9M9oDRb0z8Q2\nOSBjTlLK4+O+F0KcB3waOE5KL66XUjYCjYW/pwghFgL7A5NDjn8ncCfAmDFjZPn3WmRTYSJDSMc5\n2qJMLnO0IUqZCfpWMaLNQJcymWw52Iib3SX6BgfRX0qDZYS+HelffRk/1/pnfQ2K+hfX0rqzp4aE\nECcClwGnSim3Bsb7COHBaSHEUGAYsMiFDCVkM4XhEn0n8ogyWBa3cyiXyWbKw+eRGrmqOFgL0Z9R\nuqA9RX+aRtQYfbc3/UuqEbhsd7a1i0G2NQJXnH6NB9+eEV6I92qhQ+gY4KdCiGagBfi6lHKdIxna\nyKbBcom+/c/WUGJEBJEok40bMebGam4sm28zSrGZLrDYZWQkUxYpt+B5NY1gd4mRqRr6Z9vBaj4L\nUS5T3HtJYmXaCWoEcSSl3C9ifDww3gXPWMoqhPT3IS9/IbVrhGWULrCBEmPQd0OXCJnaI0q0YXRt\npwEjUo07W40g0unbjFIsOEyXKbe495IUZeqYzxG0L7KWLkhAiVC6D/lOhxLD0Hcc+olraXVoRK2j\nRMMaQUlLq0qUEjyvMfslBXkoy7QT1QjCXm0ZxcNJnU0XJNg6r5b0zwHViCPQ3M4BzELIch7WC10m\nKNEh+o7joZtyi9svSUcmq04/4VqHtrSqosQY3TCVyamDzSiCjZRJ5x6qZo0gzJmZ3EMd7zmC6lNW\n6Luch7bCxLRqFmWysIZEmdI6gmo6WFs1grg1WEhXKZ1XW9GfYktrnExxr56s+j3k0jk1VL56UveB\nMmMwlV2NIHcE2ujblhJroh//ODbWEMWjmgYr8bymTblZrhGU87CJvsFM/7ScftwDZY71zyWYSpTJ\nMEoJTfmq3kMxumEikwOqMUfgskZgwWBZT8PYyG8mKbGNHvyEUL5CJtso0WANkTJZQN/+uI01RPGw\nGv3ZvodUHazN6M9hlJII8DQ7FB1QbTiCuFdP2kYOzlFiWLEui/ym40f2tYyDqSOoVpSiqRumMkVG\nf67TVbZrBCnQd9x+SaZrKOdhfA/lEUF1KW4fct12POso0XFEUP7qSeN0lUWEnxp9xxg4a/v0ZFUj\nsKh/kU7fVpSyE9QIXESwOjys3kN5jcA+tbv8ZtwDPS67MHY2lKgZpYTt02O9VdNmusCi/pW/erK1\nOaZVM4sopQo1AhcRrA6PLACeA6oxRxC4mLaf9tNOF2QVEYTx0GnV3MlqBGE8Els1DZ4ir5BJxcG6\nrBFE8LAVwUbK5LpG0A4iWC2ZTO+hvEaQDZUbLKWn/dob+jaoEYTxsIV+/N9YSRdYMg5hMmXmYIlA\niRmh7zCZbKHvokxZR38xTjyspdXFGoLHTeJhzcHmjsANRRqHjl4jCOHhEn1DMsJKvQYVI+rwgR6r\n0Z9L/bOYhvFlteL0HepfJjUC03SVrv7lNQL7pI0Sq5HfdIUSy3hYR4ma4b9L9O2PO11DFg+UWdK/\nxDU41j+X91CYTC4iWF/u4vzC36HvJcng6XwHlDuCquU3Q/bpcabEqsbBVroqCSWmdWYuUGJ7e6DM\nVP8yrBEotWo6vIeKPBy2akYZ9rhXW1bM14xgk2RyQDXkCMpu9kzQtyma0TFYJijRdhpG1zmVt7Qa\n1Dl0ZMrKwUL4qy3DWlqzMljW0bfLe8gkSrZRI3BRZ0sRwSbxcEA15AhMjIMllBgWQsbK5BhhGTkz\n1TUk7ZdUDYNlcl4NagR1DRGtmmEtrbZbhSP0z+p5jTK6MWsIa2nV1Y0kHqlTbiZRtaZuxMqkqX8O\nKHcErhUmKoQsylQFhGXd6GreuGE8rEYpVaoRxN24VYv+LLU7++O657WCh2v9q7KDDdvFwLb+OSBn\njkAIcY0QYpkQYlrh38mB764QQiwQQswTQpzgSoYSsoK+LYaQYIawrKQLHNYIlI2DDYSlihIt52h1\njUOoTO0l+kthRFV0I1SmnbFGUB79RawhbBcDo3RVtqkh15xukVLeFBwQQhwEnAUcDPQHnhVC7C+l\nbAk7gDUyMVip0XdzdFoojIdxftO20dU0osG3UBk5AovbOfjjWg7WVrog6Vpb0L/INGOUwXKZclPQ\njTAeca+2rJhvGv1FGWrHz+L4v9FysOXPOCU87OqAqpEaOg24X0rZKKVcDCwAxjrnaoISK/YhN0BY\n1tMFLlGiDfStihIVEVbVUKJFBwshBiuLB8raQY0gjIeubiTxsHIP2bzWKfUv6WFXB+TaEXxLCDFd\nCHG3EGL3wtgA4L3AnKWFsRISQowTQkwWQkxevXp1eklMUCJU7kPeHlGirmGPnB/X0moxRxs8bqJM\nNlFiwhoqipqW0HeQR4VMcSgxeHyF/ZKCx01cQ5zT1420dPTPwDlF7ZcUKpOrOpsOwEtZo0rSDQeU\nykBwO9wAABZrSURBVBEIIZ4VQswM+XcacAewLzAaWAHc7P8s5FCyYkDKO6WUY6SUY/r06ZNGTI+M\nlVg1hbEzoUSb6aoq1gjCWjX935hc6/JXT1pHiSmMgzRNw2jqho5MytGfrnOygb5dPlCmAvAcRrAO\nKBUnKeXxKvOEEHcBjxY+LgUGBr7eB1ieRg4lMkHfwXn+37bQT1EmzVC7HCUmvdoyeFz/b5cGy+S8\nxiLdmA4dbZSoUIco+dsSSCjKZOOhOEsPlMXu06Oqf67uoRRgSsVh+ilfv5svNkqx0SFmOYJ1QC67\nhvoFPn4WmFn4+2HgLCFEFyHEEGAY8LorOYpkgr4hPcKyanQd52iLMoUVBC0+CxE8blGmLFCipfC/\nGtGfEfp2rX+u0oA2wFRS9Oda/3QdrIZuOCCXnG4UQozGS/ssAS4EkFLOEkL8HZgNNAPfdN4xBGYX\nB9QRVqTC2A4h06a3dA2WKXK1hLB0jbTPo6Wp9PixMmleO13d8H9TDfTd0MVAJpf6Z4K+Lacy/Xn1\nnQI8LOufldpLdjUCZ45ASvnlmO9+BvzMFe9Qco2wjI1uigfKjNC37RpBlMFyWSxWMA5N20Jk0o1S\nXKYLTNG37nmKaNUsyuRS/yx1iNmOYIM8VN5LorOGokw27qEOkBpqd2Qtv1nlEDK4T4+RM3NtsCyj\nxKh9erTWkFWU4rJGYDmC9Y9VjSil2hFscF7ie0nyGkHHIisGywQ5WDa6wXm2c7RFmbKOUuIcbNg+\nPS4cbGCecaumg5Sb39JqO4IN8gjKFNuq6brOFhXB2ryHynjYjmBjZbJUZ3NANeQIory0IsJKDCGz\naNUsN1iWnRlEGKyIV1v6PFyi71Aeuik3XZRouUPH/42JEZWq0Z9hCi1LBwvxhj3rGoHSfM01+Dys\ndIjljsA+pVUYlVdbBuf7f7s0WEbo28A5aUUQWSCsajtYmyk3hZZWJZlsRH+2I1jN6C+qpdV2BBuU\nPSsHm8QjuItBkm44oBpzBDaMrmMDp8MjK4NlO+VRIZNK+J8B+q5IFzhegw4PJ2nAkFSP1TVUU/9U\n7yFN3VCSyRB0SkX9c0C14wjC8szgGH07UpiiwbKcow2VyVWOVgdhmaDEaqBvzTXo8DCO/nSNrs4a\ndmb9U60RWCwWx72XJMjD/z9uw0rLVDuOQPfiiAjjEDk/bB/ypBSGLpqJMlhR+XuTnGtdiDOLURPj\nNWg4zLB0QdxNUr7DZOK1iyjCq85XlslE/1SjlKhrrXntjPRVUf+Kr7ZM4mFD/zRrBNavdbn+xdTZ\novQvjwgckDZKLEcOCRfHSn7TFUpMibCS5pe0tGZRLFYp1tlA3y6LxVlFKe2oRqBi4Iyiv6xrBAYA\nL/EeCpMpjwjsU10DFe/J9cdD50elYTR7xZOUPvhQtWpB2v+N6kZkwc3UEhFZQ5lMCkY3VKYEI1rM\nhya0avq/UX3HcXG+iXFQdWb+Lq1BHiprKJMpaVfNoCzKXUaa165c/5LWEHz1ZKL+aepGkIfpGmwD\nvHLd8H+je62VHIGi/jmgGnIEjnO0/nc2ctlxu2qChXSB7YgA9fNUPl/JOKStEWhGKcbXWjflYREl\n2opSkow0mLe0Gp1XxzWq9hLBlsikcJ4sUw05grQKo6rEFlo14x7oKZEpowfKVIyDtiPQ6JAwcrAp\nWlqzcvpWHWzUcyw2ZdLMZVu5hxScU6p0VYJu2Er52ryHHFANOwLNh4aUlNiGwjhE36CGTlIZrCzQ\nt+sagYs0oAHSDcpiXCOwvIYgD20H66pGoHOtq6R/Nu8hB1RbjiCY39RWGBUlNkBYRsbBEH0XZTKI\nUhJlUm3Hs4W+XaBEHZlMevA1U0klMrlo1cxY/5J0w/9N2ggW9Fs1XeufTQfrgGrLEYA5wnKmxJoK\nFipTBI/QllbbKYyU3S3KKDEl+laSKW26qh2hb5UXoBvrn2GNyknKLay1uI7YLVFKZFIFeC6jP81W\nYQdUQ44grcEyyW+6ytFqtLTaQFhOagSOHWzoLq2WWjWNZLLVUhh1rct0Q+UF6KmdfhY1AsM6W9z8\noOxK+pfXCDoO6SIBK+mCKqPEIg9/vkqrpmODZQV9G3RhKLVqtieUqIu+y3ZpdeZgUedh7R5SOK/B\nlK/NCDbIoyhTx6sROOEkhHgAOKDwsRfwgZRytBBiMDAHmFf47lUp5dddyFBBoUoZt6umJvr2v2tP\nKLEok2YfdyqE1R5aNYPnqbMjB5t1jUDzPCkbXZN+d1On7+IeKnwnW9ue6HVyD+kCPIcO1gE5cQRS\nyi/6fwshbgY2BL5eKKUc7YJvLIUhLJfoW5VHhTGxHEIGDZarlEeoTLY7SVJGTjbRt/9dptGfphM3\nXYP/+kYlmZIcgaZuRMmkqn++rlu/h9JGfw70zzI55SSEEMAXgE+65KNEYUrpEn2DIUq0iL7Lebha\nQ/DYyihR0zg0NwZkMjCiztMF7Sz6M0XfnbopyJS24UJX/1QNe5cUDtZ2ukpnDR3/gbKjgZVSyvmB\nsSFCiKlCiBeFEEdH/VAIMU4IMVkIMXn16tXpJdE2DinRt/+bxMfpy/Yht4m+fR6u1xAqk2q6wMTo\nGnRhaK3BUQpDN5VUIpNp9OcIfUPbebLaqmnBYerqRnA8ikfx+K2ArL7Tt0zGnIQQzwJ9Q766Uko5\nqfD32cB9ge9WAIOklGuFEIcBE4UQB0spN5YfREp5J3AnwJgxY6SpnEUKVRiLrXL+dyY3lmwB6hyi\nRMcGrkSmpE6mspZWV2mYch7W04CBdFVxV00XazDUP2WjmzLl5qJVs2mbgUyBSMjpPeTCwUadp52g\nRiClPD7ueyFEA3AGcFjgN41AY+HvKUKIhcD+wGRTOZTJGDlkZETrO2mGwejf7E5RYhmPqP2Sylta\nszJY7cHB+i2tdSpOP6X+GUdaFh1s5FbaLqMUyxFsUSaXgNDA6Vsml6mh44G5Usql/oAQoo8QnnYI\nIYYCw4BFDmVoo9B0gW2UGFQYlRDS1GC5RIlh+U2DNUS1albI5LKTKcDDKF1gEyXaqlGp6l9GBit2\nflRLq+MUms0IFjBquCjZxaD91whccjqL0rQQwDHAT4UQzUAL8HUp5TqHMrSRtnEwRN9+UVP1xi3n\nUXWUaKFGkKTAqQ2WQQ++E5SoOb84t7M7/XMawYbon9K1Thv9uUgDmtYIdK51C9QXftvQRW8NSTws\nkzNOUsr/FzI2HhjvimcshSqMixztFr355TycoMSM0ls+j0TjYKOl1SX6VolSwlJumtdOyTi4jFLK\noz+TlFtCHjt1uspV9Jc2Daiof74jsB2lWKYafrK4naDvch5OUKLLHK0m+i7nYZSuMjFYts+rgYPV\nkqka0Z/lGkFRpvKWVkX9U90vKXhsZ9FfSqevrX8xD7s6oBp0BIrou3wfcl2EZaww7SCFUdLSaoCw\ntNIFjvq4S2SyvJ2D/52WbmRdo8oCfatc6xTRn9J+SVk8H2SwhhIeqjUCRd1wQDXkCNIaLF2FUUQ/\nOjJVGCyHUYpMgbCMzqsGSlRp1QQNlOi/etKxgw3ONYn+4vZLggj9U1iD9j49iq2aQR7BtdiOYINz\nje8hRzUCLZk07iHLVEOOQNNL+7/JxDioKkxEfjOqVTOVTCkQlhJKNEXfihGEtkwmUUrG0Z8LBwul\nr560uYZImarpYG3VCFxGKQoO1jLVsCPQzW+6UGILNYK6BoVWTU30E8YjcX4QJTqsEbhAiZEyuUCJ\nqufVIF1QLf1LlMllBKsZ/UWmfKuofyYO1jLVoCPQubEMUj3tDiXayG+2B/TtcA1FmdJGKZpdaO1h\nDSU8stI/m11uWad8XaYB8xqBe6pajcBFGsZljlYTYe006DspSklR1MwMfTtYQwWPdqB/mUZ/LqMU\nVQdrYJssUw05gjAvnUV+0+Yj+yH79Fhfg4UuDCWU6LJGYBL9mRiH9oa+U0QpSq2amts5VMiUBfrW\nTVc1k9iqaRylOIz+LFMNOwIThUHBOJgYXUWEFbZPj9YaXEYpjh2sv0+PkoO1Ff0lPVCWJfp2FMH6\nc1VfbRk8tiv9S52G0YycjOxAXiPYOSl1frMdoMQiD9M1aCqx0qstMzZYxsZB82ZPbNV0HKVUtLS6\nTAM26+uG/78L/WttbotQEtdgoahutAaL+mdyD1mmGnIENrowkkJIxzWCokwujW4wXaD5OL2RTJrn\nyZmDNUGJmhFEiUwGhl1pDYZARFc3/P9d6Z9sdXwPZeRgizLlNYL2QTZSGNaNg4UoxWWNwEXKoyiT\nYahtZLBcoMT2GP25drAZ1QgqZHJRS1FshijONwRTKjKFtbTmjsARtXf07f/v1GBlgb5V1pAi1FYq\nglqIUpynC7LSP8VicVYRrA4PY/1zWSPI6IHGvEbgiKygb4WL6e9DnhXCMjJYrtG3K5TY4tA56aZh\nUqDvIg8H+tfu0HdIujTq1ZblPNpN9Jeyzpb0XhITmSxTDTqCNAqjYBx8Hk5RYtp0lS76jgtrw1pa\nq53CMEnD1KfTDf8YiTK1qO2XFMaj3dQIUuhf3KstS3ioRilZRH9p7iEF3Sjy2EmLxUKIM4UQs4QQ\nrUKIMWXfXSGEWCCEmCeEOCEwfmJhbIEQ4vI0/LXISrFOATn4c52iRJfbOYSh74RH9lOlqwq/S9ov\nyZ/bnhxsRUurKvpW0A1TmVw62IpXT7qos3WwGoHKfKiMOnYmRwDMxHsv8b+Cg0KIg/DeUHYwcCLw\nGyFEfeE1lbcDJwEHAWcX5ronI5So6aV1kUCJwii0ahZlSml0bRqHCpkM8ut1DcmtmkWZHDzQY7qG\nokztBCWmiVKU1hDy6kknDpYUTt9Q/5JkKqZ8NaMU43so2xpBKrcjpZwDICpv4tOA+wsvq18shFgA\njC18t0BKuajwu/sLc2enkUOJTNF38dWTihGEf2xdlKjSqukfzzi/6QAlFmVKgbCUz6tilGJkHHTT\nMCkMlhFKdF0jcBWllEewrhxBO9U/I0fQHP/2OgfkKv4YALwa+Ly0MAbwXtn4EY5kKCX/Qvzndpj+\nAGxbp6YwK16D24+AjSugW081Hr8/DnZsLYwpKMwzV8NLN3t/xxXS/N/Mf9aT6YN3oe+o5PlNW735\nWwuvh1ZJw0y8COo7KcpUD1P/CguehbULYa+EIK+uAda/48m0eaXa8QH+9vmAwVI4r6/8CqbeA40b\nFa51PSydXLjWy6HHXslrAPjdMbBjs7pMT10Jz/88eb7/m3mPezKtfwcGHp48f/vGwrVe642pFGbH\nf61Nljjd8H8z5U8w7wlP//YZmzx/7QJPpk3vqx0f4C+nQUuTwhoK3714I7zxe2jernYPvfsfT6YN\ny6DXwIT5hePd8RHv/AbH4tbwxA+hU7fk+f5vZj8MS9+A9Utg8Mfi51umREcghHgW6Bvy1ZVSyklR\nPwsZkxCaipIRfMcB4wAGDRqUJGYy1TfAMT+ANW97n/scCCPPjP/NmK9Clx6F+QfA4KPj5w87Hpae\nCS07vM/desMe+0XP320AjB3nGUOAviPhgJPjeRx5ESx4pk2m4afGzz/odE+x/C0Eeg2CrjEObe8R\ncOg50LjJ+7zP4TAkYd1Hfw+WTWmT6dBz4ueP/m/vhvXn9xsdP/9DR8Gos6B5m/d5yDHxv+nUDT52\nKaxb5H3eaziMOCOex+EXQPfebTIN/UT8/P1PgOVTobVgrLrvCb0+FD1/98Ew5nzYusb73O8QGHZC\n9HyAj34LFr3QJtOIz8XPP/gM2Lis7Vr3Hgqdu0fP7zcaRp8DOwrXeuAR3rmOo2O+DyveapNp9H/H\nzz/0nDZ5+hwAA8bEzx98NIz6Ypt+DP049B0RPb9rL/joxZ5TAu9aH3RaPI+xX4M5D7fJtN+n4ucf\ncDKsnNmG2HvsDbvtEz1/j/3gsK94YBOg/6Gw33HxPI76Nix5qU2mkV+In2+ZhJShdljvIEK8AHxf\nSjm58PkKACnl9YXPTwHXFKZfI6U8IWxeFI0ZM0ZOnjw5tZw55ZRTTrVEQogpUsoE7xuO0G3Qw8BZ\nQoguQoghwDDgdeANYJgQYogQojNeQflhRzLklFNOOeWkQKlqBEKIzwK3AX2Ax4QQ06SUJ0gpZwkh\n/o5XBG4GvimlVw0VQnwLeAqoB+6WUs5KtYKccsopp5xSkZXUkGvKU0M55ZRTTvpU7dRQTjnllFNO\nOwnljiCnnHLKqcYpdwQ55ZRTTjVOuSPIKaeccqpxyh1BTjnllFON007RNSSEWA28k+IQewJrLImz\ns1Atrhlqc921uGaozXXrrvlDUso+SZN2CkeQloQQk1VaqDoS1eKaoTbXXYtrhtpct6s156mhnHLK\nKacap9wR5JRTTjnVONWKI7iz2gJUgWpxzVCb667FNUNtrtvJmmuiRpBTTjnllFM01UpEkFNOOeWU\nUwR1aEcghDhRCDFPCLFACHF5teVxRUKIgUKI54UQc4QQs4QQlxTGewshnhFCzC/8v3u1ZbVNhXdh\nTxVCPFr4PEQI8VphzQ8UtjvvUCSE6CWE+IcQYm7hmn+ko19rIcSlBd2eKYS4TwjRtSNeayHE3UKI\nVUKImYGx0GsrPPq/gn2bLoT4sCnfDusIhBD1wO3AScBBwNlCiIR3KO601Ax8T0o5HDgS+GZhrZcD\nz0kphwHPFT53NLoEmBP4fANwS2HN64HzqyKVW7oVeFJKeSBwCN76O+y1FkIMAL4NjJFSjsDbwv4s\nOua1/hNwYtlY1LU9Ce9dL8Pw3uZ4hynTDusIgLHAAinlIinlDuB+IOEddjsnSSlXSCnfLPy9Cc8w\nDMBb758L0/4MnF4dCd2QEGIf4BTg94XPAvgk8I/ClI645t2AY4A/AEgpd0gpP6CDX2u8d6d0E0I0\nAN2BFXTAay2l/Bewrmw46tqeBvxFevQq0EsI0c+Eb0d2BAOA9wKflxbGOjQJIQYDhwKvAXtLKVeA\n5yyAhDey73T0K+CHQOGluOwBfCClLLxctkNe86HAauCPhZTY74UQu9CBr7WUchlwE/AungPYAEyh\n419rn6KurTUb15EdgQgZ69AtUkKIHsB44DtSyo3VlsclCSE+DaySUk4JDodM7WjXvAH4MHCHlPJQ\nYAsdKA0URoWc+GnAEKA/sAteWqScOtq1TiJr+t6RHcFSYGDg8z7A8irJ4pyEEJ3wnMDfpJQPFYZX\n+qFi4f9V1ZLPAR0FnCqEWIKX9vskXoTQq5A+gI55zZcCS6WUrxU+/wPPMXTka308sFhKuVpK2QQ8\nBHyUjn+tfYq6ttZsXEd2BG8AwwqdBZ3xiksPV1kmJ1TIjf8BmCOl/N/AVw8D5xX+Pg+YlLVsrkhK\neYWUch8p5WC8a/tPKeWXgOeBzxemdag1A0gp3wfeE0IcUBg6Du/d4B32WuOlhI4UQnQv6Lq/5g59\nrQMUdW0fBs4tdA8dCWzwU0jaJKXssP+Ak4G3gYXAldWWx+E6P4YXEk4HphX+nYyXM38OmF/4v3e1\nZXW0/mOBRwt/DwVeBxYADwJdqi2fg/WOBiYXrvdEYPeOfq2Ba4G5wEzgHqBLR7zWwH14dZAmPMR/\nftS1xUsN3V6wbzPwuqqM+OZPFueUU0451Th15NRQTjnllFNOCpQ7gpxyyimnGqfcEeSUU0451Tjl\njiCnnHLKqcYpdwQ55ZRTTjVOuSPIKaeccqpxyh1BTjnllFONU+4Icsopp5xqnP4/qbf0JOwZR7EA\nAAAASUVORK5CYII=\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7fede076ba58>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(amp_func)\n",
        "plt.plot(D@amp_func)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Now, what's the conditioning of this matrix like?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 77,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "2.0564138575587231e+18"
            ]
          },
          "execution_count": 77,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "la.cond(D)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "OK, this may not be completely fair. But: can look at the spectrum:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 87,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "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\nNzOzETLvkYOkW4Gjumy6NCJu7PWyLmNB92LU9aJSSZPAJECj0aDZbM4XtXIzMzPOOUB1yTnbqGau\ny3zWIWcdMvZr3uIQEWck/Nw9wLFtz48B9haPe43Pft8NwAaA8fHxmJiYSIgxXM1mE+ccnJHOufmm\nnptGNfNIz2ebOuSsQ8Z+lXVaaSNwjqRDJR0HrAK+A3wXWCXpOEmH0Fq03lhSBrPSnHbC4YsaN6ub\nfltZz5a0BzgVuEnSzQARcS8wRWuheTPwjoh4KiKeBC4CbgZ2AFPFvma1ctXbTu0oBKedcDhXve3U\nihKZDVa/3UrXA9f32HYZcFmX8U3Apn7e12wUHCwE/x9OMdj/P75C2szMOrg4mJlZBxcHMzPr4OJg\nZmYdXBzMzKyDIkb/rreSfg5MV51jAY4AflZ1iAVwzsFyzsGqQ846ZAQYj4jDUl7YVyvrEE1HxJr5\nd6uWpK3OOTjOOVjOOTh1yAitnKmv9WklMzPr4OJgZmYd6lIcNlQdYIGcc7Ccc7Ccc3DqkBH6yFmL\nBWkzMxuuuhw5mJnZEI1kcZD0cUnfl3S3pOslLeux3zpJ05J2Srq4gpxvlHSvpKcl9exckHS/pO2S\n7uyneyDVInJWPZ+HS7pF0n3F9+f12O+pYi7vlDS0j3yfb36Kj6i/tth+u6SVw8q2iIznS/pp2/z9\n6bAzFjmukLRf0j09tkvS3xf/HXdLeumwMxY55ss5IenRtvn8qwoyHivpa5J2FP+fv7PLPoufz4gY\nuS/gNcCzi8cfBT7aZZ8lwC7geOAQ4C7gxCHn/HVgHGgCa+bY737giArnc96cIzKfHwMuLh5f3O3P\nvdg2U8Eczjs/wJ8B/1A8Pge4dgQzng98etjz1yXrK4GXAvf02L4e+Aqtu0q+HLh9RHNOAF+ueC5X\nAC8tHh8G/KDLn/ui53Mkjxwi4qvRuvcDwBZad4yb7RRgZ0Tsjoj/Bq4BzhxWRoCI2BERI39x3gJz\nVj6fxftdWTy+EjhryO8/l4XMT3v+LwKnS+p2y9wqM46EiPg68PAcu5wJfCFatgDLJK0YTrr/s4Cc\nlYuIfRFxR/H457TulXP0rN0WPZ8jWRxmuYBWxZvtaOCBtud76JyQURHAVyVtK+6NPYpGYT6XR8Q+\naP2FB47ssd8vSdoqaYukYRWQhczPL/Ypfrl5FHj+UNLNev9Crz/D3y9OLXxR0rFdto+CUfj7uFCn\nSrpL0lcknVRlkOJU5m8Bt8/atOj5rOwKaUm3Akd12XRpRNxY7HMp8CRwVbcf0WVs4K1XC8m5AKdF\nxF5JRwK3SPp+8RvJwAwgZ+XzuYgf8yvFfB4P/Juk7RGxazAJe1rI/AxlDuewkPf/V+DqiHhC0oW0\njnReVXqyxat6LhfqDuBXI2JG0nrgBlq3RR46SWPAdcC7IuKx2Zu7vGTO+aysOETEGXNtl3Qe8HvA\n6VGcNJtlD9D+W88xwN7BJWyZL+cCf8be4vt+SdfTOvwfaHEYQM7K51PSg5JWRMS+4pB3f4+fcXA+\nd0tq0vpNqezisJD5ObjPHknPBn6Z4Z6SmDdjRDzU9vRyWmt6o2gofx/71f6PcERskvRZSUdExFA/\nd0nSc2gVhqsi4ktddln0fI7kaSVJ64D3AK+PiMd77PZdYJWk4yQdQmsBcGidKwslaamkww4+prXY\n3rXzoWKjMJ8bgfOKx+cBHUc8kp4n6dDi8RHAabTuVV62hcxPe/4/AP6txy82lWWcdZ759bTOT4+i\njcBbii6blwOPHjzlOEokHXVwXUnSKbT+TX1o7lcNPIOAfwJ2RMQne+y2+PmscpV9jtX3nbTOj91Z\nfB3sAHkBsGnWCvwPaP3WeGkFOc+mVZGfAB4Ebp6dk1bnyF3F172jmnNE5vP5wG3AfcX3w4vxNcA/\nFo9/G9hezOd24K1DzNcxP8Df0PolBuCXgH8p/v5+Bzi+gjmcL+OHi7+HdwFfA35t2BmLHFcD+4D/\nKf5uvhW4ELiw2C7gM8V/x3bm6AasOOdFbfO5BfjtCjL+Dq1TRHe3/Zu5vt/59BXSZmbWYSRPK5mZ\nWbVcHMzMrIOLg5mZdXBxMDOzDi4OZmbWwcXBzMw6uDiYmVkHFwczM+vwvwmsrlHUo2C7AAAAAElF\nTkSuQmCC\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7feddbe03f98>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "eigv = la.eigvals(D)\n",
        "\n",
        "plt.plot(eigv.real, eigv.imag, \"o\")\n",
        "plt.xlim([-2, 2])\n",
        "#plt.ylim([-2, 2])\n",
        "plt.grid()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": true
      },
      "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.6.2"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}