{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Finite differences vs Noise"
      ]
    },
    {
      "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": "code",
      "execution_count": 2,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "def f(x):\n",
        "    return np.sin(2*x)\n",
        "def df(x):\n",
        "    return 2*np.cos(2*x)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Here's a pretty simple function and its derivative:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7fe1cc1d2630>"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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\nQggv9n+TN6hv0PoebwAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7fe1cca65a20>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "plot_x = np.linspace(-1, 1, 200)\n",
        "\n",
        "pt.plot(plot_x, f(plot_x), label=\"f\")\n",
        "pt.plot(plot_x, df(plot_x), label=\"df/dx\")\n",
        "pt.grid()\n",
        "pt.legend()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Now what happens to our numerical differentiation if\n",
        "**our function values have a slight amount of error**?"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "collapsed": false
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7fe1cc089e80>"
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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\nXNj/AX10l4JeHbG5AAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7fe1cc19cd68>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "\n",
        "# set up grid\n",
        "n = 10\n",
        "x = np.linspace(-1, 1, n)\n",
        "h = x[1] - x[0]\n",
        "x_df_result = x[1:-1] # chop off first, last point\n",
        "\n",
        "# evaluate f, perturb data, finite differences of f\n",
        "f_x = f(x)\n",
        "\n",
        "f_x += 0.025*np.random.randn(n)\n",
        "\n",
        "df_num_x = (f_x[2:] - f_x[:-2])/(2*h)\n",
        "\n",
        "# plot\n",
        "pt.plot(x, f_x, \"o-\", label=\"f\")\n",
        "pt.plot(plot_x, df(plot_x), label=\"df/dx\")\n",
        "pt.plot(x_df_result, df_num_x, label=\"df/dx num\")\n",
        "pt.grid()\n",
        "pt.legend(loc=\"best\")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "* Now what happens if you set `n = 100` instead of `n = 10`?"
      ]
    }
  ],
  "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.1+"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}