{ "cells": [ { "cell_type": "markdown", "id": "56e87093", "metadata": {}, "source": [ "# Differentiation by First Principles (A Programmer's Perspective)\n", "\n", "If you have taken a course in differential calculus or taken A-Level mathematics, you have likely come across the term \"Differentiation by First Principles\". If not, you may still recognize the following formula:\n", "\n", "$$\n", "\\frac{f(x+h) - f(x)}{h}\n", "$$\n", "\n", "But what does this mean, and what even is differentiation?\n", "\n", "## What is differentiation?\n", "Differentiation is a method used by mathematicians to calculate the _gradient_ of a function. For a linear (straight) line, you can do this by simply dividing the change in y by the change in x:\n", "$$\n", "\\text{gradient} = \\frac{change in y}{change in x}\n", "$$\n", "\n", "Often \"change in\" can be shortened to $\\Delta$ (The Greek capital delta):\n", "$$\n", "\\text{gradient} = \\frac{\\Delta y}{\\Delta x}\n", "$$\n", "\n", "Straight lines are often written in the form:\n", "$$\n", "y = mx + c\n", "$$\n", "\n", "The following code will create a straight line, and we will show how to find its gradient:\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "e8a033a7", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAkzUlEQVR4nO3dd3wVdb7/8deH3nsvIfQOohEEbFgRCyrrruVaV9H96a6711WKurLqKrquV3etqFh2LbsSEBaRYsUuRU0BAqGHBEInEELa5/dHjveRyyYack4yycn7+XjwOGdmvjPzGRLeGSZzPmPujoiIRK9aQRcgIiIVS0EvIhLlFPQiIlFOQS8iEuUU9CIiUa5O0AWUpE2bNh4bGxt0GSIi1caKFSt2uXvbkpZVyaCPjY1l+fLlQZchIlJtmNnm0pbp0o2ISJRT0IuIRDkFvYhIlFPQi4hEOQW9iEiUU9CLiEQ5Bb2ISJRT0IuIVAHLNu3huU/WV8i2q+QHpkREaoqDR/J5dOEaXvtyMzGtGnHNyG40qhfZaFbQi4gE5JO1O5k6O5H0/Ye5blQsd57bN+IhDwp6EZFKt/dQLg+8u4rZK7fRs21jZt0ykhO6taqw/SnoRUQqibvzXtJ2/jA3iX3Zefz6jF7cOqYXDerWrtD9KuhFRCpB5oEc7p2bxKLkHQzq3IzXbhjBgE7NKmXfCnoRkQrk7ry9PI0H3l1Fbn4hk8b246ZTulOnduXd9KigFxGpIFv3ZDNldiKfpe5iePdWTL90MD3aNqn0On7yR4qZdTWzj8xstZklm9ntofmtzGyJma0LvbYsZf2xZpZiZqlmNjnSByAiUtUUFDozP9vIOf+zlO+27uOBiwfx1k0nBRLyULYz+nzgDndfaWZNgRVmtgS4DvjA3aeHAnwyMKn4imZWG3gaOBtIA5aZ2Tx3XxXJgxARqSrW7chiUnwCK7fs4/S+bXnoksF0atEw0Jp+MujdPQPICL3PMrPVQGdgPHB6aNirwMccFfTAcCDV3TcAmNlbofUU9CISVXLzC3n+k/X87cNUGtevzRO/OI7xx3XCzIIu7diu0ZtZLDAM+BpoH/ohgLtnmFm7ElbpDGwtNp0GjChl2xOBiQAxMTHHUpaISKAS0vZx16wE1mzP4vwhHfnjRQNp06R+0GX9rzIHvZk1AeKB37r7gTL+lCppkJc00N1nADMA4uLiShwjIlKVHM4t4In31/LCpxto27Q+L1wTx9kD2gdd1n8oU9CbWV2KQv51d58dmr3DzDqGzuY7ApklrJoGdC023QVID6dgEZGq4KsNu5kcn8Cm3dlcfmJXpozrT/OGdYMuq0Q/GfRWdOr+ErDa3R8vtmgecC0wPfQ6t4TVlwG9zaw7sA24HLgy3KJFRIKSlZPH9PfW8PrXW4hp1Yg3bhzBqF5tgi7rR5XljH40cDWQaGbfheZNpSjg/2VmvwS2AJcBmFkn4EV3H+fu+WZ2G7AIqA3MdPfkCB+DiEil+GhNJlPnJLLjQA43ntydO87pS8N6Fdu+IBLKctfNZ5R8rR3gzBLGpwPjik0vABaUt0ARkaDtOZTL/f9O5p3v0unTvgnPXDWKYTElfnSoStInY0VESuHuzE/IYNq8ZPYfzuP2M3tz65he1KtTvZ7ZpKAXESnBjgM53D0nifdX72Bol+a8ftMI+nWonCZkkaagFxEpxt3557Kt/GnBavIKCrl7XH9uOLk7tWsF/8Gn8lLQi4iEbN59iCmzE/li/W5O6tGK6ZcOIbZN46DLCpuCXkRqvIJC5+XPN/LY4hTq1qrFw5cO5hdxXalVjc/ii1PQi0iNlrI9i7viE/h+6z7O6t+OBy8eTIfmDYIuK6IU9CJSI+XmF/LMx6k8/VEqTRvU5a9XDOPCIR2rRBOySFPQi0iN893WfUyalUDKjizGH9eJ+y4cSKvG9YIuq8Io6EWkxjicW8BfFqcw8/ONtGvagJeujePM/lWvCVmkKehFpEb4Yv0uJscnsmVPNleNiGHyef1o2qBqNiGLNAW9iES1Azl5PLxgNW9+s5XY1o1486aTGNmzddBlVSoFvYhErQ9W7+DuOUlkZuVw86k9+O1ZfapFE7JIU9CLSNTZffAIf/z3KuZ9n07f9k15/uoTGNq1RdBlBUZBLyJRw92Z93060+Ylc/BIPv99dh9uOa1ntWtCFmkKehGJChn7D3PPnCQ+WJPJcV1b8OjPhtCnfdOgy6oSFPQiUq0VFjpvLtvCwwvWUFDo3HvBAK4bFVutm5BFWlkeJTgTuADIdPdBoXn/BPqGhrQA9rn7cSWsuwnIAgqAfHePi0jVIiLAxl2HmByfwNcb9zCqZ2umXzqEmNaNgi6ryinLGf0rwFPAaz/McPdf/PDezP4C7P+R9ce4+67yFigicrT8gkJmfr6RvyxeS706tXhkwmB+Htc1KtsXREJZHiW41MxiS1oWenD4z4EzIlyXiEiJVmccYFJ8Aglp+zl7QHsevHgQ7ZtFVxOySAv3Gv0pwA53X1fKcgcWm5kDz7v7jNI2ZGYTgYkAMTExYZYlItHmSH4BT3+YyjMfr6dFo7o8feXxjBvcQWfxZRBu0F8BvPkjy0e7e7qZtQOWmNkad19a0sDQD4EZAHFxcR5mXSISRVZu2cukWQmsyzzIJcM684cLBtAyipuQRVq5g97M6gCXAieUNsbd00OvmWY2BxgOlBj0IiJHy87N57FFa3n5i410bNaAl687kTH92gVdVrUTzhn9WcAad08raaGZNQZquXtW6P05wP1h7E9EapDP1u1i8uwE0vYe5uqTunHX2L41pglZpJXl9so3gdOBNmaWBtzn7i8Bl3PUZRsz6wS86O7jgPbAnND1szrAG+6+MLLli0i02X84j4feXc0/l2+le5vG/HPiSYzoUbOakEVaWe66uaKU+deVMC8dGBd6vwEYGmZ9IlKDLErezr3vJLH7UC63nNaT357VmwZ1a14TskjTJ2NFJHA7s44wbV4y7yZm0L9jM1669kQGd2kedFlRQ0EvIoFxd+Z8u437568i+0gBvz+nDzef1pO6tWt2E7JIU9CLSCC27TvM3XMS+ThlJyd0a8kjEwbTq52akFUEBb2IVKrCQuf1rzcz/b01ODDtwgFcMzKWWmpCVmEU9CJSadbvPMiU+ES+2bSHU3q34aFLBtO1lZqQVTQFvYhUuPyCQmZ8uoEn3l9Hw7q1eeyyoUw4vrPaF1QSBb2IVKjk9P1Mik8gadsBxg7swP0XD6RdUzUhq0wKehGpEDl5Bfztw3U898kGWjaqx7NXHc95gzsGXVaNpKAXkYhbsXkPd81KYP3OQ/zshC7cc35/WjRSE7KgKOhFJGIOHcnnz4tSePXLTXRq3pBXbxjOaX3aBl1WjaegF5GIWLp2J1NmJ5K+/zDXjozlznP70ri+IqYq0FdBRMKyLzuXB99dzawVafRo25i3bx5JXGyroMuSYhT0IlJuC5MyuOedZPZm53LrmJ78+gw1IauKFPQicswys3K4b24y7yVtZ0DHZrxy/YkM6qwmZFWVgl5EyszdmbUijQffXc3hvALuGtuXm07poSZkVdxPfnXMbKaZZZpZUrF508xsm5l9F/ozrpR1x5pZipmlmtnkSBYuIpUrbW8218z8hjtnJdCnfRPeu/0U/t/pvRTy1UBZzuhfAZ4CXjtq/v+4+2OlrWRmtYGngbOBNGCZmc1z91XlrFVEAlBY6Lz25SYeXZSCAQ+MH8hVI7qpCVk1UpYnTC01s9hybHs4kBp60hRm9hYwHlDQi1QTqZkHmRyfwPLNezmtT1v+dMkgurRUE7LqJpxr9LeZ2TXAcuAOd9971PLOwNZi02nAiDD2JyKVJK+gkBlLN/Dk++toVL82j/98KJcMUxOy6qq8F9eeBXoCxwEZwF9KGFPSd4SXtkEzm2hmy81s+c6dO8tZloiEK2nbfi566nP+vCiFswe0Z8nvTuPS47so5Kuxcp3Ru/uOH96b2QvA/BKGpQFdi013AdJ/ZJszgBkAcXFxpf5AEJGKkZNXwBPvr+OFTzfQqnE9nr/6BM4d2CHosiQCyhX0ZtbR3TNCk5cASSUMWwb0NrPuwDbgcuDKclUpIhXqm417mByfwIZdh/h5XBfuHjeA5o3qBl2WRMhPBr2ZvQmcDrQxszTgPuB0MzuOoksxm4CbQ2M7AS+6+zh3zzez24BFQG1gprsnV8RBiEj5HDySzyPvreHvX22ma6uG/OOXIzi5d5ugy5IIM/eqd5UkLi7Oly9fHnQZIlHto5RM7p6dSMaBHK4f1Z3fn9uHRvX0GcrqysxWuHtcScv0VRWpYfYeyuWB+auY/e02erdrQvyvRnF8TMugy5IKpKAXqSHcnXcTM7hvbjL7D+fxmzN6cesZvahfR03Iop2CXqQGyDyQw71zk1iUvIPBnZvzjxtH0L9js6DLkkqioBeJYu7O28vTeODdVeTmFzLlvH788uTu1FF/mhpFQS8SpbbszmbqnEQ+S93F8O6teGTCELq3aRx0WRIABb1IlCkodF75YhOPLUqhdi3jwYsHceXwGDUhq8EU9CJRZN2OLO6KT+DbLfsY07ctf7pkMJ1aNAy6LAmYgl4kCuTmF/LcJ+t56sNUGtevzRO/OI7xx3VSfxoBFPQi1V5C2j7umpXAmu1ZXDi0E9MuHEDrJvWDLkuqEAW9SDV1OLeAJ95fywufbqBt0/q8cE0cZw9oH3RZUgUp6EWqoa827GZyfAKbdmdzxfCuTBnXn2YN1IRMSqagF6lGDuTkMf29Nbzx9RZiWjXijRtHMKqXmpDJj1PQi1QTH67ZwdTZSWRm5XDTKd3577P70rCe2hfIT1PQi1Rxuw8e4f75q5j7XTp92jfhuatHc1zXFkGXJdWIgl6kinJ3/p2QwbR5yWTl5HH7mb25dUwv6tVR+wI5Ngp6kSpo+/4c7nknkfdXZzK0S3Me+dkI+nVQEzIpn7I8YWomcAGQ6e6DQvP+DFwI5ALrgevdfV8J624CsoACIL+0pvgiUsTdeWvZVh56dzV5hYXcPa4/N5zcndpqXyBhKMv/AV8Bxh41bwkwyN2HAGuBKT+y/hh3P04hL/LjNu8+xJUvfM2U2YkM7NyMhbefyk2n9lDIS9h+8oze3ZeaWexR8xYXm/wK+FmE6xKpMQoKnZc/38hji1OoW6sWD186mMtP7Kr2BRIxkbhGfwPwz1KWObDYzBx43t1nlLYRM5sITASIiYmJQFkiVV/K9qImZN9v3cdZ/dvx4MWD6dC8QdBlSZQJK+jN7G4gH3i9lCGj3T3dzNoBS8xsjbsvLWlg6IfADCh6OHg4dYlUdbn5hTzzcSpPf5RK0wZ1+esVw7hwSEedxUuFKHfQm9m1FP2S9kx3LzGY3T099JppZnOA4UCJQS9SU3y3dR+TZiWQsiOL8cd14r4LB9Kqcb2gy5IoVq6gN7OxwCTgNHfPLmVMY6CWu2eF3p8D3F/uSkWqucO5BfxlcQozP99I+2YNmHldHGf0UxMyqXhlub3yTeB0oI2ZpQH3UXSXTX2KLscAfOXut5hZJ+BFdx8HtAfmhJbXAd5w94UVchQiVdwX63cxOT6RLXuyuXJEDFPO60dTNSGTSlKWu26uKGH2S6WMTQfGhd5vAIaGVZ1INXcgJ4+HF6zmzW+2Etu6EW9NPImTerQOuiypYfTJWJEKsmTVDu55J5GdWUe4+dQe/O7sPjSoqyZkUvkU9CIRtuvgEabNS2Z+Qgb9OjTlhWviGNKlRdBlSQ2moBeJEHdn7nfp/PHfyRw8ks9/n92HW07rqSZkEjgFvUgEZOw/zD1zkvhgTSbDYlrw6IQh9G7fNOiyRAAFvUhYCgudN5dt4eEFaygodO69YADXjYpVfxqpUhT0IuW0cdchJscn8PXGPYzu1ZqHLxlCTOtGQZcl8h8U9CLHKL+gkJc+28jjS9ZSr04tHpkwmJ/HqQmZVF0KepFjsDrjAJPiE0hI28/ZA9rz4MWDaN9MTcikalPQi5TBkfwCnv4wlWc+Xk/zhnV56sphnD9YTcikelDQi/yElVv2MmlWAusyD3LpsM7ce8EAWqoJmVQjCnqRUhw6ks9ji1N45YtNdGzWgJevP5ExfdsFXZbIMVPQi5Tgs3W7mDw7gbS9h7lmZDfuGtuPJvX1z0WqJ33nihSzPzuPPy1Yxb+Wp9GjTWP+dfNIhndvFXRZImFR0IuELEzazr1zk9hzKJdfnd6T28/srSZkEhUU9FLjZWblMG1eMgsSt9O/YzNevu5EBnVuHnRZIhGjoJcay92ZvXIb989fxeHcAu48ty8TT+1B3dpqQibR5Se/o81sppllmllSsXmtzGyJma0LvbYsZd2xZpZiZqlmNjmShYuEY9u+w1z38jLuePt7erZtzILbT+bWMb0U8hKVyvJd/Qow9qh5k4EP3L038EFo+v8ws9rA08B5wADgCjMbEFa1ImEqLHT+/uUmznn8E5Zt2sO0Cwfw9i2j6NVOnSYlepXlUYJLzSz2qNnjKXqOLMCrwMcUPSy8uOFAauiRgpjZW6H1VpW/XJHyW7/zIJPjE1i2aS+n9G7DQ5cMpmsrNSGT6Ffea/Tt3T0DwN0zzKykT5F0BrYWm04DRpS2QTObCEwEiImJKWdZIv8pr6CQFz7dwBPvr6Nh3do8dtlQJhzfWe0LpMaoyF/GlvSvyEsb7O4zgBkAcXFxpY4TORZJ2/YzKT6B5PQDjB3YgfsvHki7pmpCJjVLeYN+h5l1DJ3NdwQySxiTBnQtNt0FSC/n/kSOSU5eAX/7cB3PfbKBlo3q8exVx3Pe4I5BlyUSiPIG/TzgWmB66HVuCWOWAb3NrDuwDbgcuLKc+xMps+Wb9nBXfAIbdh7ishO6cM/5A2jeqG7QZYkE5ieD3szepOgXr23MLA24j6KA/5eZ/RLYAlwWGtsJeNHdx7l7vpndBiwCagMz3T25Yg5DBA4eyefPC9fw2leb6dS8Ia/dMJxT+7QNuiyRwJXlrpsrSll0Zglj04FxxaYXAAvKXZ1IGX2ydidTZyeSvv8w146M5c5z+9JYTchEAH0yVqq5fdm5PDB/NfEr0+jZtjFv3zySuFg1IRMpTkEv1dZ7iRncOzeZfdm53DqmJ78+Q03IREqioJdqJ/NADn+Ym8zC5O0M6tyMV284kYGd1IRMpDQKeqk23J1ZK9J4YP4qcvILmTS2Hzed0p066k8j8qMU9FItbN2TzdQ5iXy6bhfDY1sxfcJgerRtEnRZItWCgl6qtMJC57UvN/HoohQMeGD8QK4a0Y1atdS+QKSsFPRSZaVmHmRSfAIrNu/ltD5teejSwXRu0TDoskSqHQW9VDl5BYXMWLqBJ99fR6P6tXn850O5ZJiakImUl4JeqpSkbfu5c1YCqzMOcP6Qjky7cCBtm9YPuiyRak1BL1VCTl4BT7y/jhc+3UCrxvV4/uoTOHdgh6DLEokKCnoJ3Dcb9zA5PoENuw7xi7iuTB3XX03IRCJIQS+BycrJ49GFKfz9q810bdWQ128cwehebYIuSyTqKOglEB+lZHL37EQyDuRww+ju/P7cPjSqp29HkYqgf1lSqfYeyuWB+auY/e02erdrQvyvRnF8TMugyxKJagp6qRTuzruJGdw3N5n9h/P4zRm9uPWMXtSvoyZkIhVNQS8VbseBHO55J4klq3YwpEtz/nHjCPp3bBZ0WSI1RrmD3sz6Av8sNqsH8Ad3f6LYmNMpeszgxtCs2e5+f3n3KdWLu/Ov5Vt58N3V5OYXMnVcP24YrSZkIpWt3EHv7inAcQBmVpui58LOKWHop+5+QXn3I9XTlt3ZTJmTwOepuxnevRWPTBhC9zaNgy5LpEaK1KWbM4H17r45QtuTaqqg0Hnli008tiiF2rWMBy8exJXDY9SETCRAkQr6y4E3S1k20sy+B9KB35f2gHAzmwhMBIiJiYlQWVKZ1u7I4q5ZCXy3dR9n9GvHgxcPopOakIkEztw9vA2Y1aMoxAe6+46jljUDCt39oJmNA550994/tc24uDhfvnx5WHVJ5cnNL+S5T9bztw/X0aR+HaZdNJCLhnZSEzKRSmRmK9w9rqRlkTijPw9YeXTIA7j7gWLvF5jZM2bWxt13RWC/UgV8v3Ufk+ITWLM9iwuHdmLahQNo3URNyESqkkgE/RWUctnGzDoAO9zdzWw4UAvYHYF9SsAO5xbwxPtreeHTDbRtWp8Xronj7AHtgy5LREoQVtCbWSPgbODmYvNuAXD354CfAb8ys3zgMHC5h3utSAL35frdTJmdwKbd2VwxvCtTxvWnWQM1IROpqsIKenfPBlofNe+5Yu+fAp4KZx9SdWTl5PHwe2t44+stdGvdiDduGsGonmpCJlLV6ZOxUiYfrtnB1NlJZGblcOPJ3bnjnL40rKf2BSLVgYJeftTug0e4f/4q5n6XTp/2TXj2v0YxTE3IRKoVBb2UyN2Z9306f/z3KrJy8rj9zN7cOqYX9eqofYFIdaOgl/+wfX8O97yTyPurMxnatQWPThhC3w5Ngy5LRMpJQS//y915a9lWHnp3NXmFhdxzfn+uH92d2mpfIFKtKegFgM27DzE5PpEvN+xmZI/WTJ8wmG6t1YRMJBoo6Gu4gkLn5c838tjiFOrWqsXDlw7m8hO7qn2BSBRR0NdgKduzuCs+ge+37uOs/u148OLBdGjeIOiyRCTCFPQ1UG5+IU9/lMozH6fSrEFd/nbFMC4Y0lFn8SJRSkFfw3y7ZS+T4hNYu+MgFx/XiT9cOJBWjesFXZaIVCAFfQ2RnZvPXxavZebnG2nftAEzr4vjjH5qQiZSEyjoa4AvUncxeXYiW/Zkc9WIGCaf14+makImUmMo6KPY/sN5PLxgNW8t20ps60a8NfEkTurR+qdXFJGooqCPUktW7eCedxLZmXWEm0/rwe/O6kODumpCJlITKeijzK6DR5g2L5n5CRn069CUF66JY0iXFkGXJSIBCvfBI5uALKAAyD/6eYVWdL/ek8A4IBu4zt1XhrNPKZm788532/jjv1eRfaSAO87uw82n9VQTMhGJyBn9mB95Bux5QO/QnxHAs6FXiaBt+w5z95xEPk7ZybCYoiZkvdurCZmIFKnoSzfjgddCjw/8ysxamFlHd8+o4P3WCIWFzuvfbGH6gtUUOvzhggFcOypWTchE5P8IN+gdWGxmDjzv7jOOWt4Z2FpsOi007z+C3swmAhMBYmJiwiwr+m3cdYhJ8Ql8s3EPo3u1ZvqlQ+jaqlHQZYlIFRRu0I9293QzawcsMbM17r602PKSTi1LfDh46IfEDIC4uDg9QLwU+QWFvPjZRv5nyVrq1anFoxOGcFlcF7UvEJFShftw8PTQa6aZzQGGA8WDPg3oWmy6C5Aezj5rslXpB7gr/nuSth3gnAHteeDiQbRvpiZkIvLjyh30ZtYYqOXuWaH35wD3HzVsHnCbmb1F0S9h9+v6/LE7kl/AUx+m8uzH62nRqC7PXHU85w3qoLN4ESmTcM7o2wNzQmFTB3jD3Rea2S0A7v4csICiWytTKbq98vrwyq15VmwuakKWmnmQS4d15t4LBtBSTchE5BiUO+jdfQMwtIT5zxV778Ct5d1HTXboSD6PLU7hlS820al5Q165/kRO79su6LJEpBrSJ2OroE/X7WTK7ETS9h7mmpHduGtsP5rU15dKRMpH6VGF7M/O48F3V/H2ijR6tGnMv24eyfDurYIuS0SqOQV9FbEwaTv3zk1iz6FcfnV6T24/s7eakIlIRCjoA5aZlcO0ecksSNzOgI7NePm6ExnUuXnQZYlIFFHQB8TdiV+5jQfmr+JwXgF3ntuXiaf2oG5tNSETkchS0AcgbW82U+cksXTtTuK6tWT6hCH0atck6LJEJEop6CtRYaHzj68388h7a3DgjxcN5OqTulFLTchEpAIp6CvJ+p0HmRyfwLJNezm1T1seumQQXVqqCZmIVDwFfQXLKyhkxtINPPnBOhrWrc1jlw1lwvGd1b5ARCqNgr4CJW3bz6T4BJLTDzBucAemXTSQdk3VhExEKpeCvgLk5BXw1w/W8fzSDbRsVI9nrzqe8wZ3DLosEamhFPQRtmzTHibNSmDDrkNcdkIX7jl/AM0b1Q26LBGpwRT0EXLwSD6PLlzDa19upnOLhrx2w3BO7dM26LJERBT0kfDJ2p1MnZ1I+v7DXDcqljvP7UtjNSETkSpCaRSGfdm53D9/FbNXbqNn28bMumUkJ3RTEzIRqVoU9OX0XmIG985NZl92LreN6cVtZ/RSEzIRqZLCeZRgV+A1oANQCMxw9yePGnM6MBfYGJo1292PftxgtZJ5IIc/zE1mYfJ2BnVuxqs3nMjATmpCJiJVVzhn9PnAHe6+0syaAivMbIm7rzpq3KfufkEY+6kS3J23V6Tx4PxV5OQXMmlsP246pTt11IRMRKq4cB4lmAFkhN5nmdlqoDNwdNBXe1v3ZDN1TiKfrtvF8NhWTJ8wmB5t1YRMRKqHiFyjN7NYYBjwdQmLR5rZ90A68Ht3Ty5lGxOBiQAxMTGRKCtsBYXOa19u4s+LUjDggfEDuWqEmpCJSPUSdtCbWRMgHvitux84avFKoJu7HzSzccA7QO+StuPuM4AZAHFxcR5uXeFKzcxiUnwiKzbv5bQ+bXno0sF0btEw6LJERI5ZWEFvZnUpCvnX3X320cuLB7+7LzCzZ8ysjbvvCme/FSmvoJDnP1nPXz9IpVH92jz+86FcMkxNyESk+grnrhsDXgJWu/vjpYzpAOxwdzez4UAtYHd591nREtP2c+es71mzPYvzh3Rk2oUDadu0ftBliYiEJZwz+tHA1UCimX0XmjcViAFw9+eAnwG/MrN84DBwubsHflnmaDl5BTzx/jpe+HQDrRvX4/mrT+DcgR2CLktEJCLCuevmM+BHr2e4+1PAU+XdR2X4esNuJs9OZOOuQ/wiritTz+9P84ZqQiYi0aPGfjI2KyePRxem8PevNtO1VUNev3EEo3u1CbosEZGIq5FB/9GaTO6ek0jGgRxuGN2d35/bh0b1auRfhYjUADUq3fYcyuWB+auY8+02erdrQvyvRnF8TMugyxIRqVA1IujdnfkJGUybl8z+w3n85sze3DqmJ/XrqAmZiES/qA/6HQdyuHtOEu+v3sGQLs35x40j6N+xWdBliYhUmqgNenfnn8u28qcFq8nNL2TKef345clqQiYiNU9UBv2W3dlMnp3AF+t3M6J7Kx6ZMITYNo2DLktEJBBRFfQFhc7Ln2/kscUp1KlViz9dMogrToxREzIRqdGiJuj3Z+dx7cvf8N3WfZzRrx1/umQQHZurCZmISNQEfbOGdejWuhHXj47loqGd1IRMRCQkaoLezHjy8mFBlyEiUuXoFhQRkSinoBcRiXIKehGRKKegFxGJcgp6EZEoF1bQm9lYM0sxs1Qzm1zCcjOzv4aWJ5jZ8eHsT0REjl25g97MagNPA+cBA4ArzGzAUcPOA3qH/kwEni3v/kREpHzCOaMfDqS6+wZ3zwXeAsYfNWY88JoX+QpoYWYdw9iniIgco3A+MNUZ2FpsOg0YUYYxnYGMozdmZhMpOusHOGhmKeWsqw2wq5zrVlc65uhX044XdMzHqltpC8IJ+pJ6DHg5xhTNdJ8BzAijnqIdmi1397hwt1Od6JijX007XtAxR1I4l27SgK7FprsA6eUYIyIiFSicoF8G9Daz7mZWD7gcmHfUmHnANaG7b04C9rv7f1y2ERGRilPuSzfunm9mtwGLgNrATHdPNrNbQsufAxYA44BUIBu4PvySf1LYl3+qIR1z9Ktpxws65ogx9xIvmYuISJTQJ2NFRKKcgl5EJMpFTdD/VDuGaGNmXc3sIzNbbWbJZnZ70DVVFjOrbWbfmtn8oGupDGbWwsxmmdma0Nd7ZNA1VTQz+13o+zrJzN40swZB1xRpZjbTzDLNLKnYvFZmtsTM1oVeW0ZiX1ER9GVsxxBt8oE73L0/cBJwaw045h/cDqwOuohK9CSw0N37AUOJ8mM3s87Ab4A4dx9E0c0elwdbVYV4BRh71LzJwAfu3hv4IDQdtqgIesrWjiGquHuGu68Mvc+i6B9/52Crqnhm1gU4H3gx6Foqg5k1A04FXgJw91x33xdoUZWjDtDQzOoAjYjCz9+4+1Jgz1GzxwOvht6/ClwciX1FS9CX1mqhRjCzWGAY8HXApVSGJ4C7gMKA66gsPYCdwMuhy1UvmlnjoIuqSO6+DXgM2EJRu5T97r442KoqTfsfPmsUem0XiY1GS9CXudVCtDGzJkA88Ft3PxB0PRXJzC4AMt19RdC1VKI6wPHAs+4+DDhEhP47X1WFrkuPB7oDnYDGZvZfwVZVvUVL0NfIVgtmVpeikH/d3WcHXU8lGA1cZGabKLo8d4aZ/SPYkipcGpDm7j/8b20WRcEfzc4CNrr7TnfPA2YDowKuqbLs+KHDb+g1MxIbjZagL0s7hqhiZkbRddvV7v540PVUBnef4u5d3D2Woq/xh+4e1Wd67r4d2GpmfUOzzgRWBVhSZdgCnGRmjULf52cS5b+ALmYecG3o/bXA3EhsNJzulVVGae0YAi6roo0GrgYSzey70Lyp7r4guJKkgvwaeD10ErOBymklEhh3/9rMZgErKbq77FuisB2Cmb0JnA60MbM04D5gOvAvM/slRT/wLovIvtQCQUQkukXLpRsRESmFgl5EJMop6EVEopyCXkQkyinoRUSinIJeRCTKKehFRKLc/wfP5SJU5x+OJQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from typing import Union\n", "\n", "\n", "def straightline_function(m: Union[float, int], c: Union[float, int],\n", " xvalues: list[Union[float, int]]) -> list[float]:\n", " \"\"\"\n", " Takes the values m and c from an equation in the form $y = mx + c$\n", " Applies the function to a list of x values\n", " \"\"\"\n", " return [m * xvalue + c for xvalue in xvalues]\n", "\n", "\n", "# create a list of 100 equally spaced numbers between 0 and 10\n", "xvalues = np.linspace(0, 10, 100)\n", "m = 2\n", "c = 1\n", "yvalues = straightline_function(m, c, xvalues)\n", "plt.plot(xvalues, yvalues)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "cdde537c", "metadata": {}, "source": [ "As you should be able to see from this graph, every 1 you go along the x-axis, you go 2 up the y-axis. This can be confirmed using the formula $\\text{gradient} = \\frac{\\Delta y}{\\Delta x}$ because let's look at the full range of x-values 0-10. So $\\Delta x$ = 10 and $\\Delta y = 20$. Therefore: $\\frac{20}{10} = 2$.\n", "\n", "But what if our function isn't a straight line. How can we find the gradient? Let's plot and have a look at the function $x^2$" ] }, { "cell_type": "code", "execution_count": 2, "id": "3c232cf1", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAryklEQVR4nO3deViVdf7/8ef7sCsCgoiIKCLgvuOWWppaTpvmtFhTWVM607Qv09TUb5q+MzXNNDPty2iblaUtmjU5lVqW5or7ggoCCoiAoigg++f3B6e5GAMFDufch3Pej+vyOtt9znlxH3lxn3v53GKMQSmllGexWR1AKaVU69NyV0opD6TlrpRSHkjLXSmlPJCWu1JKeSBfqwMAdOrUycTFxVkdQ6mf2LdvHwC9e/e2OIlSP7V58+ajxpjIhh5zi3KPi4sjJSXF6hhK/cSECRMAWLVqlaU5lGqIiBxs7DFdLaOUUh5Iy10ppTyQlrtSSnkgLXellPJAWu5KKeWBzlnuIvKmiBSIyK5694WLyHIRSbNfdqz32CMiki4i+0TkYmcFV0op1bimLLm/DUw9476HgZXGmERgpf02ItIPmAn0tz/nFRHxabW0SimlmuSc5W6M+R4oOuPuacB8+/X5wPR69y80xlQYYzKBdGBk60T9qbzi0zz5xR6OlVQ46y2UUspp3vohk693H3HKa7d0nXuUMSYPwH7Z2X5/DJBdb7oc+30/ISJzRCRFRFIKCwtbFKKkvJp5qzNZsjW3Rc9XSimrlFRU88xX+1iRmu+U12/tDarSwH0Nng3EGDPXGJNsjEmOjGzw6NlzSozqwLDuYSzclI2edEQp1Zb8e/thyipruHZEd6e8fkvLPV9EogHslwX2+3OA2HrTdQMOtzzeuV07Ipb0ghK2HDrhzLdRSqlWtSglm4TOwQzrHuaU129puX8GzLJfnwUsrXf/TBEJEJGeQCKw0bGIZ3fpoK608/dh0aZDznwbpZRqNfvzT7H10AlmjohFpKEVHo5ryq6QHwDrgN4ikiMitwJPA1NEJA2YYr+NMWY38CGwB/gSuMMYU+OU5HbBAb5cPqgr/96RR0lFtTPfSimlWsWiTdn4+QhXDm1wk2SrOOeokMaY6xp5aFIj0z8JPOlIqOa6ZkQsi1Ky+ff2w8wc6Zz1V0op1RoqqmtYvCWHKf2iiAgOcNr7eMQRqsO6h5HYOZiFm7LPPbFSSllo+Z58jpdVOW1D6o88otxFhGtHxLIt+wT7jpyyOo5SSjVq0aZsuoYGMi6hk1PfxyPKHeDKoTH4+QgLdcOqUspNZReVsSb9KFclx+Jjc86G1B95TLlHBAdwcf8uLN6SS3mVU7fhKqVUiyzalI1Qtwu3s3lMuQNcN7I7xaer+HKXcw7nVUqplqquqeXDlGwuSIokJizI6e/nUeU+Jj6CHhHteH+jrppRSrmXb/YWUHCqgutctEefR5W7zSbMHNGdjZlFHCgssTqOUkr918JN2XTuEMCFfTqfe+JW4FHlDnDV8G742oSFuvSulHITh0+cZtW+Aq5JjsXXxzW163HlHtkhgCn9ovhkSy4V1bphVSllvQ9TsjG4ZkPqjzyu3KFuw2pRaSVf7XbOUJpKKdVUNbWGDzdlMz4xktjwdi57X48s93EJnYgND+KDDbpqRillrVX7CjhcXM51LlxqBw8td5tNuG5kd9ZlHCO9QDesKqWss2DDITp3CGByvyiXvq9HljvA1cNj8fMRPtANq0opi+QcL+PbfQVcOyIWPxdtSP2Rx5Z7ZIe6I1Y/3pyjR6wqpSyxcGPdEalWjFbrseUOcP2ouiNWv9iRZ3UUpZSXqaqpZeGmbCb27uySI1LP5NHlPiY+gvhO7Vmw4aDVUZRSXmb5nnyOllRw/ShrzjHh0eUuIlw/qjtbDp0gNe+k1XGUUl7k/Q2H6BoayITerjki9UweXe5Qd8RqgK+N99br0rtSyjUyCktYk36UmSO7O31o38Z4fLmHtfPnskFd+XRrLqfKq6yOo5TyAgs2HMLXJsx08b7t9Xl8uQPcOKYHpZU1fLo11+ooSikPd7qyho9Ssrl4QBc6hwRalsMryn1wt1AGxoTy7vqDGGOsjqOU8mCfbz/MyfJqbhrdw9IcXlHuIsKNo3uwP7+EjZlFVsdRSnkoYwzvrM8iKSqYkT3DLc3iFeUOcPngroQE+vKublhVSjnJ9pxiduWe5MbRPRCxZkPqj7ym3IP8fbg6OZYvdx2h4FS51XGUUh7o3XUHae/vw/ShMVZH8Z5yB/jFqO5U1xoWbcy2OopSysMcL63k8x2HuXJYDB0C/ayO413lHh8ZzPjETizYcIiqmlqr4yilPMiilGwqq2u5cXSc1VEALyt3gFlj4jhyspzle/REHkqp1lFTa3h33UFGx4fTu0sHq+MAXljuE/t0JjY8iLfXZlkdRSnlIVam5pN74jQ3nxdndZT/8rpy97HV7Ra5MbNIx5tRSrWKd9YdJDo0kMl9XXtCjrPxunIHuCY5lkA/G++sy7I6ilKqjUsvOMWa9KPcMLoHvi4+IcfZuE8SFwpr58/0ITEs2ZpLcZmON6OUarl31h3E38dm6TgyDXGo3EXkPhHZLSK7ROQDEQkUkXARWS4iafbLjq0VtjXdNCaO8qpaPkzR3SKVUi1zqryKTzbncNngaCKCA6yO8z9aXO4iEgPcDSQbYwYAPsBM4GFgpTEmEVhpv+12+nUNYWRcOPPXZVFTq+PNKKWa76OUHEora5g1Js7qKD/h6GoZXyBIRHyBdsBhYBow3/74fGC6g+/hNDePjSPn+GlWpupukUqp5qmtNcxfl8Ww7mEMjg2zOs5PtLjcjTG5wN+BQ0AeUGyM+RqIMsbk2afJAxo8DYmIzBGRFBFJKSwsbGkMh1zUL4qYsCDe+iHLkvdXSrVd3+4r4OCxMm4Z29PqKA1yZLVMR+qW0nsCXYH2InJDU59vjJlrjEk2xiRHRka2NIZDfH1s3DimB+syjulukUqpZnnrhyy6hAQydUAXq6M0yJHVMpOBTGNMoTGmClgMnAfki0g0gP2ywPGYzjNzRN1ukW/r0rtSqon259ft/njjmB74udHuj/U5kuoQMFpE2knd2JaTgFTgM2CWfZpZwFLHIjpXWDt/rhzajU+35VJUWml1HKVUG/DWD1kE+Nq4bmR3q6M0ypF17huAj4EtwE77a80FngamiEgaMMV+263dMjaOiupaPth4yOooSik3d6KskiVbc5g+JIbw9v5Wx2mUryNPNsY8Djx+xt0V1C3FtxlJUR0Yl9CJd9ZlMXt8PP6+7vk1SyllvQ82ZlNeVcvNY+OsjnJW2mJ2t47rSf7JCpbtzLM6ilLKTVXV1DJ/bRZjEyLoGx1idZyz0nK3uyApkl6R7Xl9TYaeRFsp1aBlO/M4crKc28bFWx3lnLTc7Ww24ZfjerIr96SeRFsp9RPGGF5fnUl8ZHsuSLJm9+3m0HKvZ8bQbnRs58frazKtjqKUcjObso6zM7eYW8f1xGaz9uTXTaHlXk+Qvw+/GNWDFan5ZB0ttTqOUsqNvLEmg7B2fswY2s3qKE2i5X6Gm8b0wNcmvPWDLr0rpeocPFbK13vy+cWo7gT5+1gdp0m03M/QOSSQywd35aPNOZwo04OalFLw5ppMfG3CTW44+mNjtNwbMHt8PGWVNSzYoAc1KeXtjpdW8mFKDtOGxBAVEmh1nCbTcm9A3+gQxid24q0fsqiorrE6jlLKQgs2HOR0VQ2zx7v/7o/1abk34lfn9+JoSQVLtx62OopSyiLlVTW8vfYgE3pH0rtLB6vjNIuWeyN+PAJt7uoMavVMTUp5pU+35nK0pII5bWypHbTcGyUizDm/J+kFJXy335qTiSilrFNba5i3OoP+XUMY0yvC6jjNpuV+FpcN6kqXkED+9f0Bq6MopVzs230FHCgsZc758dSNat62aLmfhZ+PjVvH9WR9RhHbs09YHUcp5UKvfXeAmLAgLhkYbXWUFtFyP4frRnUnJNCX177TpXelvMXmg0VsyjrObeN7uu2Zls6lbaZ2oeAAX24c04Mvdx8ho7DE6jhKKRd4dVXdUAPXjoi1OkqLabk3wc3n1f31nrc6w+ooSiknS8s/xYrUfG4aE0c7f4fOZ2QpLfcmiOwQwNXDu/HJ5lwKTpZbHUcp5UT/+j6DQD8bN58XZ3UUh2i5N9Gc8+Oprq3lzR+yrI6ilHKSvOLTLN2Wy7XJsW59ftSm0HJvoh4R7fnZwGgWrD/IyfIqq+MopZzgjdWZ1Bq4rQ0etHQmLfdmuP2CXpyqqObddQetjqKUamXHSyt5f+MhrhjcldjwdlbHcZiWezMMiAllQu9I3lyTyelKHVBMKU/y9tosyipruH1CL6ujtAot92a6Y2ICx0or+TAl2+ooSqlWUlJRzdtrs7ioXxRJUW1rgLDGaLk304i4cEbGhfOv7w5QWV1rdRylVCt4f8NBik9X8ZuJCVZHaTVa7i1w+8ReHC4uZ+m2XKujKKUcVF5Vw7zVmYxNiGBIbJjVcVqNlnsLTEiKpF90CK+uOkCNDgesVJv28eYcCk9VcMcEz1lqBy33FhER7rwwgYyjpSzbmWd1HKVUC1XV1PLqqgMMiQ1rk8P6no2WewtN7d+FhM7BvPRNup7MQ6k2asmWXHJPnObuSQltcljfs9FybyGbTbhzYgL78k/x9Z58q+MopZqpuqaWl1elMyAmhIm9O1sdp9VpuTvgskHRxEW048Vv0jBGl96Vaks+33GYg8fKuOvCRI9bagcHy11EwkTkYxHZKyKpIjJGRMJFZLmIpNkvO7ZWWHfj62PjNxMT2H34JN/sLbA6jlKqiWpqDS99k06fLh2Y0jfK6jhO4eiS+/PAl8aYPsBgIBV4GFhpjEkEVtpve6wrh8bQrWMQL3yTrkvvSrUR/9mVx4HCUu68MAGbzfOW2sGBcheREOB84A0AY0ylMeYEMA2Yb59sPjDdsYjuzc/Hxu0TerE9+4SeSFupNqC21vDiynR6RbbnZwPa5in0msKRJfd4oBB4S0S2isjrItIeiDLG5AHYLxvcUiEic0QkRURSCgvbdilePTyWrqGBPLdC170r5e7+s+sI+/JPcfekRHw8dKkdHCt3X2AY8KoxZihQSjNWwRhj5hpjko0xyZGRkQ7EsJ6/r407Lkxgmy69K+XWamsNz6/cT0LnYC4b1NXqOE7lSLnnADnGmA322x9TV/b5IhINYL/0ii2NVw+PJSYsSJfelXJjy3blsT+/xOOX2sGBcjfGHAGyRaS3/a5JwB7gM2CW/b5ZwFKHErYR/r427phYt/S+SpfelXI7tbWG51ekkdA5mEsHeu669h85urfMXcACEdkBDAGeAp4GpohIGjDFftsrXDW8my69K+WmvtiZR1qBdyy1Q9168xYzxmwDkht4aJIjr9tW+fvauPPCBB5ZvJNv9xVwYR/P3H9Wqbamptbw/ErvWWoHPUK11V01vBvdw9vxj6/369K7Um7is+25pBeUcP+UJK9Yagct91bn52Pj7kmJ7D58kq92H7E6jlJer6qmludWpNE3OoSp/btYHcdltNydYPqQrsRHtuefy/freO9KWeyTzTkcPFbGA1OSPPZo1IZouTuBr4+N+yYnsT+/hH/vOGx1HKW8VkV1DS+sTGNwbBiT+nreyI9no+XuJJcOjKZPlw48tyKN6ho916pSVli0KZvDxeU8eFGSR478eDZa7k5iswn3T0ki82gpn2zJsTqOUl6nrLKaF79JZ2RcOOMSOlkdx+W03J1oSr8ohsSG8dyKNMqraqyOo5RXeXttFoWnKnhoam+vW2oHLXenEhEemtqbvOJy3lt/0Oo4SnmN4rIqXlt1gEl9OpMcF251HEtouTvZeb06MT6xEy9/m86p8iqr4yjlFV77/gCnKqp58OLe557YQ2m5u8BvL+7N8bIq5q3OtDqKUh6v4GQ5b/2QyRWDu9I3OsTqOJbRcneBQd3CuGRgF95YncHRkgqr4yjl0V74Jo3qGsP9U5KsjmIpLXcXeeCi3pRX1/LSN+lWR1HKY2UeLWXhxmxmjoylR0R7q+NYSsvdRXpFBnNNcizvrT9I1tFSq+Mo5ZGe+Wov/r427pnk3UvtoOXuUvdNTsTPx8YzX++zOopSHmfLoeMs23mEOefHE9khwOo4ltNyd6HOIYHMHt+TL3bksT37hNVxlPIYxhieXraXTsEBzB4fb3Uct6Dl7mJzLuhFRHt/nlqWqkMCK9VKVqYWsDGriHsmJ9I+wKHTVHgMLXcXCw7w5Z7JiWzILOKbvV5xelmlnKq6ppanv9xLfKf2zBwRa3Uct6HlboHrRnYnvlN7nlqWSpUOKqaUQxZuyia9oISHpvbBz0cr7Uc6Jyzg52Pj4Z/14UBhKQs3HrI6jlJt1qnyKp5dvp+RceFc3F9Pa1mflrtFpvSLYnR8OM+uSOOkDkugVIu8suoAx0oreeyyvl45ONjZaLlbRER47NJ+HC+r5OVv9cAmpZor53gZb6zJZMbQGAZ1C7M6jtvRcrfQgJhQrhwaw1trssguKrM6jlJtyjNf7UPAqwcHOxstd4v99uLe2Gzw9H/2Wh1FqTZjy6HjLN12mNnj4+kaFmR1HLek5W6x6NAgbr8ggS925rEh45jVcZRye7W1hic+30NUSAC3T+hldRy3peXuBuacH0/X0ECe+HwPNbV6YJNSZ7Nkay7bs0/wu6l99ICls9BydwNB/j48cklf9uSd5MOUbKvjKOW2Siqq+euXexkSG8b0ITFWx3FrWu5u4rJB0YyI68jfv9qnu0Yq1YhXvk2n4FQFj1/eD5tNd308Gy13NyEiPH55f4rKKnl+RZrVcZRyOwePlfL66kxmDIthaPeOVsdxe1rubmRATCgzR8Ty9tos9uefsjqOUm7l/z7fg5+P8LupfayO0iZoubuZ317ch+AAXx5fultHjVTKbmVqPiv3FnDv5CSiQgKtjtMmaLm7mfD2/jx4cW/WZRzji515VsdRynLlVTU88fkeEjoHc/PYOKvjtBkOl7uI+IjIVhH5t/12uIgsF5E0+6WuHGum60d2p3/XEJ78IpXSimqr4yhlqXnfZ3CoqIwnruivoz42Q2vMqXuA1Hq3HwZWGmMSgZX226oZfGzC/00bQF5xOS/qCbWVF8suKuPlVelcOjCasQmdrI7TpjhU7iLSDbgUeL3e3dOA+fbr84HpjryHtxreoyNXD+/G66szdOOq8krGGP742W5sIjx6aV+r47Q5ji65Pwc8BNQ/40SUMSYPwH7ZuaEnisgcEUkRkZTCwkIHY3imRy7pS3CgL499uks3riqv8/Weuo2o901O0vFjWqDF5S4ilwEFxpjNLXm+MWauMSbZGJMcGRnZ0hgeLby9Pw9P7cPGzCI+2ZJrdRylXKa0oponPttNny4ddCNqCzmy5D4WuEJEsoCFwIUi8h6QLyLRAPZLPVGoA65JjmV4j448tSyV46WVVsdRyiVeWJnG4eJy/jx9gG5EbaEWzzVjzCPGmG7GmDhgJvCNMeYG4DNgln2yWcBSh1N6MZtN+PP0ARSfruKvX+qwwMrz7T1ykjfWZDJzRCzJceFWx2mznPEn8WlgioikAVPst5UD+kaHcNu4nizclM16HRZYebCaWsPDn+wkNMhPj0R1UKuUuzFmlTHmMvv1Y8aYScaYRPtlUWu8h7e7d3ISseFB/H7JTsqraqyOo5RTvLsui23ZJ/jD5f3o2N7f6jhtmq7MaiOC/H14cvpAMgpLeUXPuao80OETp3nmq32cnxTJFYO7Wh2nzdNyb0POT4rkyqExvPrdAd33XXkUYwx/WLqLWgNPTh+AiA7n6ygt9zbmsUv7Ehzgy8Of7NCzNimP8cXOPFakFnD/lCRiw9tZHccjaLm3MRHBATx+eX+2HDrB22uzrI6jlMOOlVTw+NLdDOoWyi26T3ur0XJvg6YN6cqkPp155qu9HDxWanUcpRzyxOd7OFlexd+uGoSv7tPeanROtkEiwpNXDsTPZuOhj3dQq6tnVBv19e4jfLb9MHdOTKRPlxCr43gULfc2qktoII9d1pcNmUUs2HDQ6jhKNVtxWRWPfbqLPl06cPuEXlbH8Tha7m3YNcmxjE/sxF/+s5dDx8qsjqNUszzx+W6OlVby96sH4++rVdTadI62YSLC0z8fhE2EBz/erqtnVJvx5a4jLN6ayx0TExgQE2p1HI+k5d7GxYQF8YfL+7Exs4g3f8i0Oo5S53SspIJHl+ykf9cQ7pyYYHUcj6Xl7gGuHt6NSX0687ev9pFeoAc3KfdljOHRJbs4VV7NP68ZoqtjnEjnrAcQEf7y84G08/fhgQ+3U1VTe+4nKWWBT7fl8uXuI9x/URK9u3SwOo5H03L3EJ07BPLk9IFszynmxZVpVsdR6ieyi8r4w6e7Gd6jI7PHx1sdx+NpuXuQSwdFM2NYDC99m87mgzoYp3IfNbWGBz7cjgGeu3YIPjYdO8bZtNw9zBNX9CemYxD3LtrGqfIqq+MoBcBr3x1gY1YRT1zRX8eOcREtdw/TIdCPZ68ZQu7x0/zxsz1Wx1GKnTnFPLt8/3+/WSrX0HL3QMlx4dw5MYFPtuSwdJueWFtZp6Simrs+2EKn4AAdytfFtNw91N2TEknu0ZFHl+zSwcWUZf7w6S4OFZXx/MwhhLXTMyu5kpa7h/L1sfHczCHYBO76YCuV1bp7pHKtTzbnsHhrLndPSmRUfITVcbyOlrsH69axHX+7ahA7cor5+9f7rI6jvEhGYQn/b+kuRvUM564LE62O45W03D3c1AHR3DC6O3O/z2DFnnyr4ygvUF5Vwx3vb8Xft+7bo+72aA0tdy/w2KX96N81hAc+2k52kY4eqZzr8aW7Sc07ybPXDiE6NMjqOF5Ly90LBPr58MovhlFrDHe8v4WK6hqrIykP9fHmHBalZHPHxF5M7N3Z6jheTcvdS/SIaM8zVw1mR04xT36RanUc5YH2HTnFY5/uZHR8OPdNTrI6jtfTcvciUwd0Yfb4nryz7iBLtuZYHUd5kJPlVdz+3maCA/x44bqhei5UN6CfgJd5aGofRvUM55HFO9l9uNjqOMoD1NYa7l+0jUNFZbzyi2F07hBodSSFlrvX8fOx8dL1wwgL8udX727meGml1ZFUG/fCN2msSC3g/13Wj5E9w62Oo+y03L1QZIcAXrtxOAUnK7h74VZq9PR8qoVWpubz3Io0ZgyL4aYxPayOo+rRcvdSQ2LD+NP0/qxOO8pflukGVtV8afmnuHfhNgbEhPDUlQN13Bg342t1AGWda0d0JzXvFK+vySQpqgPXjIi1OpJqI46XVnLbOykE+Pkw98ZkAv18rI6kztDiJXcRiRWRb0UkVUR2i8g99vvDRWS5iKTZLzu2XlzV2h67tC/jEjrx6Kc72ZSlJ/hQ51ZVU8tvFmwhr7icuTcNp2uYHqjkjhxZLVMNPGCM6QuMBu4QkX7Aw8BKY0wisNJ+W7kpXx8bL18/jNiO7fjVu5v1CFZ1VsYY/vjZbtZlHOPpGQMZ1l2X3dxVi8vdGJNnjNliv34KSAVigGnAfPtk84HpDmZUThbazo/XZyVTU2u45e1NFJfpGZxUw15fncmCDYf49QW9mDGsm9Vx1Fm0ygZVEYkDhgIbgChjTB7U/QEAGjwGWUTmiEiKiKQUFha2RgzlgPjIYP5143AOHivl1+9t1iGC1U8s25nHk8tSuXRgNA9d3NvqOOocHC53EQkGPgHuNcacbOrzjDFzjTHJxpjkyMhIR2OoVjA6PoK/XTWIdRnHeHjxDozRXSRVnS2HjnPfom0M6x7GP64ZjE1HenR7Du0tIyJ+1BX7AmPMYvvd+SISbYzJE5FooMDRkMp1rhzajeyi0/xz+X5iwoJ44CJdQvN2GYUl3DY/hS6hgcy7SfeMaSsc2VtGgDeAVGPMP+s99Bkwy359FrC05fGUFe66MIGZI2J58Zt05q/NsjqOslD+yXJufGMjArx9y0giggOsjqSayJEl97HAjcBOEdlmv+/3wNPAhyJyK3AIuNqhhMrlRIQ/Tx/AsdJK/vj5biKC/blsUFerYykXKz5dxaw3N3KirJKFc8bQs1N7qyOpZmhxuRtj1gCNrXib1NLXVe7B18fGi9cN5cY3NnDfom2EBfkzLrGT1bGUi5yurGH2/BQOFJbw5s0jGNgt1OpIqpl0+AHVqEA/H16/aQS9IoOZ/U4KKXqQk1eoqK7h1+9tZtPBIv5xzRDGJ+oOD22Rlrs6q9B2frx76yiiQwO55a1N7MzRYYI9WXVNLfd8sI3v9hfy9IyBXDFYV8e1VVru6pwiOwTw3m2jCAny46Y3N7DvyCmrIyknqKk1PPTxDr7cfYQ/XNaPa0d0tzqScoCWu2qSrmFBvD97FP6+Nq6ft579+VrwnuTHYl+8NZffXtybX47raXUk5SAtd9VkPSLa88Hs0fj6CNfNXa9L8B6iptbw24+388mWHO6bnMQdExOsjqRagZa7apb4yGAWzhmDr49w/bz17D3S5IOSlRv6sdgXb8nl/ilJ3DM50epIqpVouatm69mpPQvnjMHPx8bMuevZnn3C6kiqBSqra7n7g60s3pLLA1OSuHuSFrsn0XJXLdKzU3s+/NUYOgT68ovXN7Ah45jVkVQzlFfV8Kt3U/hiZx6PXtKXu7TYPY6Wu2qx7hHt+OhX59ElNJCb3tzIt3t1GKG24FR5FTe/tZFV+wt56sqBzD4/3upIygm03JVDuoQGsmjOaBKjgrntnRQ+Ssm2OpI6i/yT5Vzzr/WkZB3nuWuHcP0o3d3RU2m5K4dFBAfwwezRjImP4Lcf7+Clb9J0uGA3lF5QwoxX1nLwWClv3DyCaUNirI6knEjLXbWKDoF+vHnzCK4cGsPfv97Po5/uoqpGT/jhLjZmFnHVa2upqK5h0ZwxXJCkQwp4OofGc1eqPn9fG/+4ejBdQgN5ddUBDh4r5ZXrhxPazs/qaF7to5Rsfr9kJ7Ed2/H2LSPpHtHO6kjKBXTJXbUqm0343dQ+PHPVIDZmFnHlKz+QebTU6lheqbbW8Jf/pPLbj3cwqmcES34zVovdi2i5K6e4OjmWBbeN5nhZJdNeWqN70rhYcVkVt87fxL++y+CG0d1565YR+g3Ky2i5K6cZ2TOcz+4cR7eO7fjl/E08t2I/tbW6odXZ9hw+yeUvrWFN+lH+NH0Af5o2AD8f/VX3NvqJK6eKDW/HJ7efx5VDYnhuRRq3vZNCUWml1bE8kjGGjzfnMOPVH6iormHhnDHcOLoHdWfEVN5Gy105XZC/D/+4ZjD/N60/a9KOcsnzq/WI1lZWUlHN/R9u58GPtjO4Wxif3zWO4T06Wh1LWUjLXbmEiHDTmDgW/+Y8gvx9uG7eep5dvp9q3V3SYTtzirn8xTUs3ZbLfZOTeH/2aDp3CLQ6lrKYlrtyqQExoXx+1zimD4nh+ZVp/PzVtaQX6NDBLVFVU8uzy/cz/ZUfOF1ZwwezR3PP5ER8bLoaRmm5KwsEB/jyz2uH8PL1wzhUVMalL6zh9dUZ1OjG1ibbd+QUM15Zy/Mr07hicFe+uvd8RsVHWB1LuRE9iElZ5tJB0Yzo2ZHfL97Jn79I5fPth3lqxkD6dw21OprbKq+q4cVv0vjXdxmEBPnx2g3DmDog2upYyg3pkruyVOcOgcy7KZnnZw4h98RprnjpB55alkpJRbXV0dzO6rRCpj73PS9/e4ArhnRlxf0XaLGrRumSu7KciDBtSAwXJEXyl2V7mft9Bku25vK7qX2YMTQGm5evQ846Wsqfv0hlRWo+PSLaseC2UYxN6GR1LOXmtNyV2whr589frxrEtSNjeeLzPTz40XbeXZfF737Wh/N6eV+ZFZVW8uqqdN5em4W/j42Hpvbml2N7EujnY3U01QZouSu3M6x7R5bcfh6fbsvlb1/u4/p5Gxif2IkHL+rN4Ngwq+M5XUlFNW+szmTe6gxKK6v5+bBuPHRxbzqH6O6Nqum03JVbstmEGcO6ccnAaN5bf5BXVh1g2ss/MKF3JLdf0IuRPcM97sjL46WVvLU2i/lrsyg+XcXU/l24/6IkkqI6WB1NtUFa7sqtBfr5cNv4eK4dEcs76w7y5ppMrp27nuE9OnLruJ5M6RfV5sdNyTxayvy1WSzalM3pqhqm9IvizokJXvEtRTmPlrtqEzoE+nHHxAR+ObYnH6ZkM291Br9ZsIWokAB+MaoHVyd3Izo0yOqYTVZVU8u3ewt4b8Mhvt9fiK9NuGJwV349oZcuqatWoeWu2pQgfx9mnRfHDaN78O3eAuavy+Kfy/fz7Ir9jO3ViRnDYpjSL4oOge43vK0xhh05xSzZmsvn2w9zrLSSqJAA7p+SxMyRsTpkgGpVWu6qTfKxCZP7RTG5XxRZR0tZvDWXxVtyuP/D7fj72DgvIYKL+3dhYu/OdAm1rjQrqmvYnHWcr/fk8/XuIxwuLsffx8bkfp2ZMbQbF/SObPOrlZR7clq5i8hU4HnAB3jdGPO0s95Lebe4Tu25f0oS905KZPOh43y16whf7TnCI4t3AtArsj1jEzoxsmc4g7uF0a1jkNM2xpZWVLMrt5gth06w9sBRNmUVUV5VS4CvjfGJkdw7JYmL+3XRE2cop3NKuYuID/AyMAXIATaJyGfGmD3OeD+loG4PmxFx4YyIC+fRS/uy98gp1qQd5YcDR/l4cw7vrDsIQHh7f/pFh5DQOZheke3pHtGeLiGBdAkJJCTI95zFX1ldS/7JcvJPlpN74jQZhaUcKCwhLb+EtIJT/DhETlJUMDNHdGdsQifGJkTQzl+/KCvXcdb/tpFAujEmA0BEFgLTAC135RIiQt/oEPpGhzD7/HiqamrZd+QU27JPsD37BPvyT/FRSjallTX/8zw/H6F9gC/BAb4E+vmwPecEABP/voqSimpKK6opO+M5Nqk7KUmvyGCmDujCkNgwBnULJSI4wFU/rlI/4axyjwGy693OAUbVn0BE5gBzALp37+6kGErV8fOxMSAmlAExodwwugdQt4HzyMlyco6f5khx3ZL4sdJKSiuqKSmvpry6hlT70aD9u4bQIdCX9v6+hAT5ERUSQFRIINGhQfSIaKdHjSq346xyb+h77f+M52qMmQvMBUhOTtaxXpXLiQjRoUFn3YVyz7y63RJfun6Yq2Ip1SqctZk+B4itd7sbcNhJ76WUUuoMzir3TUCiiPQUEX9gJvCZk95LKaXUGZyyWsYYUy0idwJfUbcr5JvGmN3OeC+llFI/5bR9s4wxy4Blznp9pZRSjdND45RSygNpuSullAfScldKKQ+k5a6UUh5IjLH++CERKQQOOvASnYCjrRSnNWmu5tFczaO5mscTc/UwxkQ29IBblLujRCTFGJNsdY4zaa7m0VzNo7max9ty6WoZpZTyQFruSinlgTyl3OdaHaARmqt5NFfzaK7m8apcHrHOXSml1P/ylCV3pZRS9Wi5K6WUB2oT5S4iV4vIbhGpFZHkMx57RETSRWSfiFzcyPPDRWS5iKTZLzs6KeciEdlm/5clItsamS5LRHbap0txRpYz3u+PIpJbL9sljUw31T4f00XkYRfkekZE9orIDhFZIiJhjUzn9Pl1rp9d6rxgf3yHiLjk7B0iEisi34pIqv134J4GppkgIsX1Pt8/uCjbWT8XK+aZiPSuNx+2ichJEbn3jGlcMr9E5E0RKRCRXfXua1IXtcrvojHG7f8BfYHewCogud79/YDtQADQEzgA+DTw/L8BD9uvPwz81QWZ/wH8oZHHsoBOLpx/fwQePMc0Pvb5Fw/42+drPyfnugjwtV//a2Ofi7PnV1N+duAS4D/UnWVsNLDBRZ9dNDDMfr0DsL+BbBOAf7vq/1NTPxer5tkZn+sR6g70cfn8As4HhgG76t13zi5qrd/FNrHkboxJNcbsa+ChacBCY0yFMSYTSKfu5NwNTTfffn0+MN0pQe1ERIBrgA+c+T6t7L8nNTfGVAI/ntTcaYwxXxtjqu0311N3xi4rNOVnnwa8Y+qsB8JEJNrZwYwxecaYLfbrp4BU6s5R3BZYMs/qmQQcMMY4cvR7ixljvgeKzri7KV3UKr+LbaLcz6KhE3E39B8/yhiTB3W/LEBnJ+caD+QbY9IaedwAX4vIZvuJwl3hTvtX4zcb+SrY1HnpLL+kbimvIc6eX0352a2eP4hIHDAU2NDAw2NEZLuI/EdE+rso0rk+F6vn2UwaX8CyYn5B07qoVeab007W0VwisgLo0sBDjxpjljb2tAbuc+q+nU3MeR1nX2ofa4w5LCKdgeUistf+V94puYBXgT9RN2/+RN0qo1+e+RINPNfhedmU+SUijwLVwIJGXqbV59eZMRu478yf3eX/1/7nzUWCgU+Ae40xJ894eAt1qx5K7NtTPgUSXRDrXJ+LZfNM6k7veQXwSAMPWzW/mqpV5pvblLsxZnILntbUE3Hni0i0MSbP/rWwoCUZ4dw5RcQXmAEMP8trHLZfFojIEuq+hjlUVk2dfyIyD/h3Aw855aTmTZhfs4DLgEnGvsKxgddo9fl1hqb87Jad9F1E/Kgr9gXGmMVnPl6/7I0xy0TkFRHpZIxx6iBZTfhcLJtnwM+ALcaY/DMfsGp+2TWli1plvrX11TKfATNFJEBEelL313djI9PNsl+fBTT2TaA1TAb2GmNyGnpQRNqLSIcfr1O3UXFXQ9O2ljPWc17ZyPu5/KTmIjIV+B1whTGmrJFpXDG/mvKzfwbcZN8DZDRQ/OPXa2eyb795A0g1xvyzkWm62KdDREZS93t9zMm5mvK5WDLP7Br99mzF/KqnKV3UOr+Lzt5i3Br/qCukHKACyAe+qvfYo9RtWd4H/Kze/a9j37MGiABWAmn2y3AnZn0b+PUZ93UFltmvx1O39Xs7sJu61RPOnn/vAjuBHfb/JNFn5rLfvoS6vTEOuChXOnXrFrfZ/71m1fxq6GcHfv3jZ0ndV+WX7Y/vpN5eW06eR+Oo+0q+o958uuSMbHfa58126jZMn+eCXA1+Lm4yz9pRV9ah9e5z+fyi7o9LHlBl769bG+siZ/wu6vADSinlgdr6ahmllFIN0HJXSikPpOWulFIeSMtdKaU8kJa7Ukp5IC13pZTyQFruSinlgf4/zXIPb0/0zB4AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from typing import Callable\n", "\n", "\n", "def xsquared(x: Union[int, float]) -> Union[int, float]:\n", " \"\"\"\n", " Function of y = x^2\n", " \"\"\"\n", " return x**2\n", "\n", "\n", "def function_to_xvalues(\n", " function: Callable[[Union[int, float]], Union[int, float]],\n", " xvalues: list[Union[float, int]]) -> list[Union[int, float]]:\n", " \"\"\"\n", " Takes a list of xvalues and applies a function to it\n", " \n", " Returns: y-values\n", " \"\"\"\n", " return [function(xvalue) for xvalue in xvalues]\n", "\n", "\n", "xvalues = np.linspace(-10, 10, 100)\n", "yvalues = function_to_xvalues(xsquared, xvalues)\n", "plt.plot(xvalues, yvalues)\n", "plt.axvline(x = 0, color = 'black', label = 'axis at x=0')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "030da38d", "metadata": {}, "source": [ "Let's start by using our previous formula for finding the gradient of a straight line and try and use it between 0 and 10. So, we have one point at (0, 0) and one point at (10, 100). Using the formula for gradient:\n", "$$\n", "\\frac{100 - 0}{10 - 0} = 10\n", "$$\n", "Let's plot this straight line we used as an estimate onto the graph:" ] }, { "cell_type": "code", "execution_count": 3, "id": "235178b6", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "xvalues = np.linspace(-10, 10, 100)\n", "yvalues = function_to_xvalues(xsquared, xvalues)\n", "plt.plot(xvalues, yvalues)\n", "plt.plot(np.linspace(0, 10, 100),\n", " straightline_function(10, 0, np.linspace(0, 10, 100)))\n", "plt.axvline(x=0, color='black', label='axis at x=0')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "15048c37", "metadata": {}, "source": [ "This doesn't look like a very good approximation at all... It doesn't really fit with the gradient of this graph at all... So, what can we do? I mean, the line we just created, what even was it an approximation of? \n", "\n", "A key thing you need to understand is that for non-linear graphs, the gradient is constantly changing. Therefore, at x = 0, the gradient is going to be different from that at x = 10. You should be able to see this on the graph, as the x-values increase, the graph seems to get much steeper. \n", "\n", "Let's try and find the gradient at x = 0. What we could try to do is try different values to test between. So, instead of testing between (0, 0) and (10, 100) why not between (0, 0) and (8, 64) or (7, 49). Let's animate it!" ] }, { "cell_type": "code", "execution_count": 4, "id": "94ce7cdd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from matplotlib.animation import FuncAnimation\n", "from IPython import display\n", "\n", "fig = plt.figure()\n", "lines_plotted = plt.plot([])\n", "line_plotted = lines_plotted[0]\n", "\n", "plt.xlim(-10, 10)\n", "plt.ylim(0, 100)\n", "\n", "xvalues = np.linspace(-10, 10, 100)\n", "yvalues = function_to_xvalues(xsquared, xvalues)\n", "plt.plot(xvalues, yvalues)\n", "plt.axvline(x=0, color='black', label='axis at x=0')\n", "\n", "TOTAL_FRAMES = 99\n", "\n", "legend = plt.legend()\n", "\n", "\n", "def AnimationFunction(frame, legend):\n", " percentage = 1 - (frame + 1) / (TOTAL_FRAMES + 1)\n", " tox = percentage * 10\n", " xrange = np.linspace(0, tox, 100)\n", " gradient = (tox**2) / tox\n", " y = straightline_function(gradient, 0, xrange)\n", " line_plotted.set_data((xrange, y))\n", " line_plotted.set_label(f\"m = {round(gradient, 1)}\")\n", " legend.remove()\n", " legend = plt.legend()\n", "\n", "\n", "anim_created = FuncAnimation(\n", " fig,\n", " lambda frame, l=legend: AnimationFunction(frame, l),\n", " frames=TOTAL_FRAMES,\n", " interval=1000)\n", "video = anim_created.to_html5_video()\n", "html = display.HTML(video)\n", "display.display(html)" ] }, { "cell_type": "markdown", "id": "370bf7b9", "metadata": {}, "source": [ "If you look at the value of m (the blue line legend) you should be able to see that it is slowly approaching 0. What we can say is that as the distance between the two points we choose for $\\frac{\\Delta y}{\\Delta x}$ gets smaller and smaller. The gradient approaches 0. Therefore the gradient at x = 0, is 0. \n", "\n", "Now let's return back to the first principles formula:\n", "$$\n", "\\frac{f(x+h) - f(x)}{h}\n", "$$\n", "\n", "The full version of this formula is actually:\n", "$$\n", "\\lim_{h\\to 0} \\frac{f(x+h) - f(x)}{h}\n", "$$\n", "\n", "What is \"h\" though? $h$ is actually the distance from the x value you want to know the gradient of. So in our animation above, at the time T = 0, the $h$ value is 10. Because we are 10 values away from $ x = 0 $. As we approached x = 0, our line slowly approached h = 0. \n", "\n", "Let's now look at this mathematically. We have the function: $f(x) = x^2$ and we want to know the gradient at the point $x = 0$. Let's write out our formula for first principles once again:\n", "$$\n", "\\lim_{h\\to 0} \\frac{f(x+h) - f(x)}{h}\n", "$$\n", "Now let's substitute the value x = 0:\n", "$$\n", "\\lim_{h\\to 0} \\frac{f(0+h) - f(0)}{h}\n", "$$\n", "What is $f(0)$? $0$\n", "What is $f(h)$? $h^2$:\n", "$$\n", "\\lim_{h\\to 0} \\frac{h^2}{h}\n", "$$\n", "Therefore we can simplify the fraction:\n", "$$\n", "\\lim_{h\\to 0} h\n", "$$\n", "So, as h approaches 0, the value of the gradient is h. Therefore, the gradient at x = 0 is 0." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.12" } }, "nbformat": 4, "nbformat_minor": 5 }