{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simple Derivative\n", "\n", "Suppose we want to differentiate the function $f(x) = x^2$. For this function we can easily state its analytical derivative $f'(x) = 2x$.\n", "\n", "Instead of implementing the analytical derivative by hand, we want to have it computed algorithmically. Let's say we are interested in the function value $f(x)$ and its derivative at $x=0.5$.\n", "\n", "First we need to implement a function `f` which computes $f(x)$. We are already able to compute $f(0.5)$." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "f(0.5) = 0.25\n" ] } ], "source": [ "def f(x):\n", " return x**2\n", "\n", "print (\"f(0.5) = {}\".format(f(0.5)));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To generate a function which computes the derivative, we use the `derivative` function from the `pyADiff` package. This returns a function for the derivative which we here call `df`. Now we are able to compute $f'(0.5)$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "f'(0.5) = 1.0\n" ] } ], "source": [ "import pyADiff\n", "df = pyADiff.derivative(f)\n", "\n", "print(\"f'(0.5) = {}\".format(df(0.5)));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This result can be verified using the analytical derivative $f'(0.5) = 2 \\times 0.5 = 1$.\n", "\n", "It might be more convenient to see the functions $f$ and $f'$ as graphs. Therefore the packages `numpy` and `matplotlib.pyplot` are included." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we initialize x as 100 points between -1 and 1. And calculate the function value $f$ and its derivative $f'$ at each of the points in x. Note the way`f` and `df` are called repeatedly. While for `f` the numpy vectorization would work as expected and would return all of the inputs `x` squared, `pyADiff` would interpret `f` as a function $f : \\mathbb{R}^{100} \\to \\mathbb{R}^{100}$, where $f_i(x) = x_i^2$ and would return the jacobian of $f$.\n", "\n", "Therefore we explicitly call `f` and `df` for each `x_i` in a loop here." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "x = np.linspace(-1, 1, 100)\n", "\n", "y = np.array([f(x_i) for x_i in x])\n", "dy = np.array([df(x_i) for x_i in x])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The last step is to plot the function $f$ and its derivative $f'$ over x." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEGCAYAAABmXi5tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3xUVfr48c9JDyQhhISEEBJ6RymRIksVaVJk0V3Uta98XcW2qKCuDXV1UbEroqKytp8usvQqIFKl9xZCCykkAdLbZM7vjzuwAdJnJjeTed6v17yYmXvnnieT4cmZc899jtJaI4QQou7zMDsAIYQQNUMSvhBCuAlJ+EII4SYk4QshhJuQhC+EEG7Cy+wAyhMaGqqbN29udhhCCOEytm/fnqa1DittW61O+M2bN2fbtm1mhyGEEC5DKXWyrG0ypCOEEG5CEr4QQrgJSfhCCOEmavUYfmmKiopISEggPz/f7FBcmp+fH1FRUXh7e5sdihCihrhcwk9ISCAwMJDmzZujlDI7HJektSY9PZ2EhARatGhhdjhCiBpi95COUqqZUmqNUuqgUmq/UuqxUvZRSqn3lVJxSqk9Sqnu1W0vPz+fRo0aSbK3g1KKRo0aybckIdyMI3r4FmCy1nqHUioQ2K6UWqm1PlBinxFAG9utF/CJ7d9qkWRvP3kPhXA/dvfwtdZJWusdtvtZwEGg6RW7jQXmaMNmIFgp1cTetoUQos45uQnWv+uUQzt0lo5SqjnQDdhyxaamwOkSjxO4+o/CxWNMVEptU0ptS01NdWR4QghRexVkweIn4cvhsP1LKMxxeBMOS/hKqQBgLvC41jrzys2lvKTUlVe01rO01rFa69iwsFKvDjbd+++/T4cOHbjjjjsA+O9//8u0adPKfc2TTz7J6tWrnRrTxIkTGTNmDBaLxWntCCGc4Ogq+LgPbP0cej0ID24An/oOb8Yhs3SUUt4Yyf5brfXPpeySADQr8TgKSHRE22b4+OOPWbp06aUZLtOnT2fBggXlvuaRRx7hgQceYPDgwU6J6dFHH6W4uJgxY8ZQVFSEl5fLTcASwv3knoPlz8Lu7yG0Ldy3HKKrfXqzQnZnBWWc/fsCOKi1nlHGbguASUqpHzBO1mZorZPsbfvlhfs5kHjllwn7dIwM4sXRncrc/uCDDxIfH8+YMWO47777uOmmm/D19SU0NBSAsWPHMn78eO666y4+/fRT1q1bx7fffktMTAzp6ekkJycTERFR7fjmzZvHRx99xMqVK0lOTmbAgAGsW7eO4OBgJk+ezLRp0/D396/28YUQNUBrOPBfWPIU5J2Hfk9C/6fA28+pzTqiG9gXuBPYq5TaZXvuWSAaQGs9E1gCjATigFzgXge0a4qZM2eybNky1qxZQ2hoKF9++SXdu/9vlumsWbPo27cvLVq04O2332bz5s2XtnXv3p0NGzYwfvz4y4755ptv8u23317VVv/+/Xn//fcve27cuHHMnTuXjz76iGXLlvHyyy8TERHB+PHjyczM5JNPPuHVV1+164+KEMKJspJh8WQ4tAiadIU750FElxpp2u6Er7VeT+lj9CX30cDD9rZ1pfJ64jUlKSmJkucawsPDmTZtGoMGDWLevHmEhIRc2ta4cWMSE68eyXrqqad46qmnKt3mBx98QOfOnenduze33XYbAHPnzrXjpxBCOJ3WsPMbWP4cFBfAjdOg98PgWXPDrzLQayd/f38yMjIue27v3r00atToquSen59f6nBLVXr4AGfOnMHDw4OUlBSsViseHlISSYha7fwJWPgYxK+FmL4w+n0IbV3jYUimsFOHDh2Ii4u79Pj3339n6dKl7Ny5k7feeovjx49f2nbkyBE6d+581TGeeuopdu3addWttGRvsVi49957+e677+jQoQMzZpR12kQIYTprMWz+xJiBk7AdbpoBdy8yJdmDJHy79e/fn507d6K1pqCggAceeIDZs2cTGRnJ22+/zX333YfWmqKiIuLi4oiNjbWrvX/+85/069ePfv36MWPGDD7//HMOHjzooJ9GCOEwZw/B7OGwbKrRq39oE1x3P5j4jVyGdKrhxIkTl+7Xq1ePIUOG8MsvvzBkyBB27959aduYMWMYM2YMAIsWLeKWW26xe7rkCy+8cOl+YGAghw4dsut4QggHKy4yrpRdNx18AuCPn0GXW6EWlDORhO8Azz77LFu2XHlx8eUsFguTJ0+uoYiEEKY4swMWPAIp+6DTH2HEdAioPReQSsJ3gPDw8Es9+bLceuutNRSNEKLGFebC2tdh04cQEA4Tvof2I82O6iqS8IUQwh4n1hu9+nPx0P0uuPEV8A82O6pSScIXQojqyM+EVS/CttnQsDnctQBaDjA7qnJJwhdC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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(x, y, label=\"f(x) = x²\")\n", "plt.plot(x, dy, label=\"f'(x) = 2x\")\n", "plt.xlabel('x')\n", "plt.legend();" ] } ], "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.5" } }, "nbformat": 4, "nbformat_minor": 2 }