138 lines
26 KiB
Plaintext
138 lines
26 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Visually comparing the derivative of a function with one variable and its analytic derivative"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/latex": [
|
|
"It might be useful to plot the found derivative os a functions. \n",
|
|
"This example assumes that \n",
|
|
"\n",
|
|
"\\[\n",
|
|
"f(x) = \\sin\\left(2\\pi x + x^2\\right)\n",
|
|
"\\]\n",
|
|
"\n",
|
|
"which has the following derivative:\n",
|
|
"\n",
|
|
"\\[\n",
|
|
"f'(x) = \\cos\\left(2\\pi x + x^2\\right)\\left(2\\pi + 2x\\right) \n",
|
|
"\\]"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.Latex object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"%%latex\n",
|
|
"It might be useful to plot the found derivative os a functions. \n",
|
|
"This example assumes that \n",
|
|
"\n",
|
|
"\\[\n",
|
|
"f(x) = \\sin\\left(2\\pi x + x^2\\right)\n",
|
|
"\\]\n",
|
|
"\n",
|
|
"which has the following derivative:\n",
|
|
"\n",
|
|
"\\[\n",
|
|
"f'(x) = \\cos\\left(2\\pi x + x^2\\right)\\left(2\\pi + 2x\\right) \n",
|
|
"\\]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\nAAAAAElFTkSuQmCC\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"The max absolute difference is: 1.77636e-15\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import autograd.numpy as np\n",
|
|
"\n",
|
|
"# To do elementwise differentiation:\n",
|
|
"from autograd import elementwise_grad as egrad \n",
|
|
"\n",
|
|
"# To plot:\n",
|
|
"import matplotlib.pyplot as plt \n",
|
|
"\n",
|
|
"\n",
|
|
"def f(x):\n",
|
|
" return np.sin(2*np.pi*x + x**2)\n",
|
|
"\n",
|
|
"def f_grad_analytic(x):\n",
|
|
" return np.cos(2*np.pi*x + x**2)*(2*np.pi + 2*x)\n",
|
|
"\n",
|
|
"# Do the comparison:\n",
|
|
"x = np.linspace(0,1,1000)\n",
|
|
"\n",
|
|
"f_grad = egrad(f)\n",
|
|
"\n",
|
|
"computed = f_grad(x)\n",
|
|
"analytic = f_grad_analytic(x)\n",
|
|
"\n",
|
|
"plt.title('Derivative computed from Autograd compared with the analytical derivative')\n",
|
|
"plt.plot(x,computed,label='autograd')\n",
|
|
"plt.plot(x,analytic,label='analytic')\n",
|
|
"\n",
|
|
"plt.xlabel('x')\n",
|
|
"plt.ylabel('y')\n",
|
|
"plt.legend()\n",
|
|
"\n",
|
|
"plt.show()\n",
|
|
"\n",
|
|
"print(\"The max absolute difference is: %g\"%(np.max(np.abs(computed - analytic))))"
|
|
]
|
|
}
|
|
],
|
|
"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.5"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|