diff --git a/datascienceintro/RootFinding_Newton.ipynb b/datascienceintro/RootFinding_Newton.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..1cf8b4fad802bcc8293c6dcf5fd84d11e25db8c4
--- /dev/null
+++ b/datascienceintro/RootFinding_Newton.ipynb
@@ -0,0 +1,248 @@
+{
+  "cells": [
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "mlFU2iWsADAb"
+      },
+      "source": [
+        "# Newton's Method for Root Finding\n",
+        "\n",
+        "In many applications, we need to find the root of a function, i.e. the point where the function crosses the $x$-axis: $f(x_r) = 0$\n",
+        "\n",
+        "A variety of methods exist for this problem, in this examle we want to use Newton's method. The general idea is the following:\n",
+        "We start at some point, our initial guess $x_0$. Then, we calculate the value of the function at point $x_n$ (starting from the initial guess) $f(x_n)$, as well as the derivative $f'(x_n)$, the derivative is the slope of the tangent line to the function $f(x)$ at this point $x_n$:\n",
+        "$$ y = f(x_n) + f'(x_n)(x-x_n)$$\n",
+        "We now want to find the point where the tangent line intersects with the $x$-axis, i.e. we set $y=0$, leading to:\n",
+        "$$f'(x_n)(x-x_n) = -f(x_n)$$\n",
+        "Assuming $f'(x_n) \\neq 0$, we can divide both sides by $f'(x_n)$, solve for $x$ and then iterate.\n",
+        "\n",
+        "More concisely, the overall approach is:\n",
+        "\n",
+        "\n",
+        "1. Choose an initial guess $ x_0 $.\n",
+        "2. Iterate using the formula:\n",
+        "$$x_{n+1} = x_n - \\frac{f(x_n)}{f'(x_n)}$$\n",
+        "   where $ n = 0, 1, 2, \\ldots $\n",
+        "\n",
+        "The process continues until the difference between successive approximations is less than a predetermined tolerance level or until a maximum number of iterations is reached.\n",
+        "\n",
+        "Note that if our initial guess $x_0$ is not suitable, the method may not converge.\n",
+        "\n",
+        "One of the underrated features of modern deep learning frameworks is the automatic differentiation. In \"conventional\" deep learning, we use this as a tool behind the scenes to train a neural network and do not really interact with this. However, this method is useful in a range of applications, such as physics-informed neural networks or, indeed, this example of finding the root of a function efficiently.\n",
+        "While we perceive deep-learning frameworks such as [PyTorch](https://pytorch.org/) or [TensorFlow](https://www.tensorflow.org/) primarily as libraries for deep learning (and we do indeed use them for this purpose), they are, essentially, heavily optimised libraries for matrix operations and numerical handling of equations that can, in addition, levarage the computation power of GPUs.\n",
+        "\n",
+        "Note that while we would ideally work with functions where we can caluclate the derivative analytically, this is not necessary.\n",
+        "We will use the example of a conic steel vessel discussed in the lecture \"Numerical Models in Processing\" by [PD Dr. W. Lenz](https://www.iob.rwth-aachen.de/habilitation-von-dr-wolfgang-lenz/). In this example, a numerical solution is derived which we will use as starting point.\n",
+        "\n",
+        "First, we will start with a motivating generic example to get familiar with the method and general code structure before then turning to the concrete example."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 1,
+      "metadata": {
+        "id": "FTDBpsfQAJUu"
+      },
+      "outputs": [],
+      "source": [
+        "import numpy as np\n",
+        "import matplotlib.pyplot as plt\n",
+        "import seaborn as sns\n",
+        "\n",
+        "import torch\n",
+        "\n",
+        "from datetime import datetime\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "gbNrWJBShOFE"
+      },
+      "source": [
+        "## General Example\n",
+        "\n",
+        "We start with a generic example using the function\n",
+        "$f(x) = \\cos(x) -x$.\n",
+        "\n",
+        "First, we plot the function.\n",
+        "Note that we directly use [torch.tensor](https://pytorch.org/docs/stable/tensors.html) as we will later on use the automatic differentiation to implement Newton's method for finding roots.\n",
+        "\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "fQA-El5LATbi"
+      },
+      "outputs": [],
+      "source": [
+        "def f(x):\n",
+        "    return # YOUR CODE HERE"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "5Kh08W8faFrI"
+      },
+      "source": [
+        "Let's first make a plot of this function.\n",
+        "Assuming that we already know that the root of the function is at $x=0.755$, we add a vertical line to indicate this root."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 3,
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 472
+        },
+        "id": "Os50IvYqAV2S",
+        "outputId": "1e6aff52-9d90-4c90-d07c-f5e1b916b4d9"
+      },
+      "outputs": [
+        {
+          "data": {
+            "image/png": "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5EFBQaJz587i9OnTYvv27cLNzU3MmDFDv40jR46IgIAAERMTo1/WtWtX0ahRI3HkyBFx4MABUatWLdGvX79y37+C7Ny5UwAQFy9efOy1mJgYERAQII4cOSKEEOLatWtizpw54vjx4yIiIkJs2rRJVK9eXbRt27a80y6SsLAw8eWXX4rTp0+L69evizVr1gg3NzcxaNAgfcx/91EIId544w1RrVo1sXv3bnH8+HHRqlUr0apVKzl2waiYmBhRs2ZN0bFjRxETEyNu376tb4/GmNMxXLdunbC2thahoaHiwoULYuTIkcLZ2Vl/F+prr70mpk+fro8/ePCgsLKyEgsWLBAXL14Us2bNEiqVSpw7d06uXSjQ6NGjhZOTk9i7d6/BsUpPT9fH/Hf/PvjgA/Hnn3+K69evixMnTohXX31VaDQaER4eLscuFGrKlCli7969IiIiQhw8eFB06tRJuLq6ioSEBCGEeR+/h/Ly8kS1atXEtGnTHnvN3I5fSkqK/rsOgPjiiy/EqVOnRFRUlBBCiE8//VQ4OzuLTZs2ibNnz4qePXsKf39/kZGRod/GM888I77++mv988L+hksDiyUZDR48WAB4rO3Zs0cfExkZKbp16yZsbGyEq6urmDJlisH/LPbs2SMAiIiICP2ye/fuiX79+gl7e3vh6Ogohg4dqi/ATEG/fv1E69at830tIiLC4GcQHR0t2rZtKypXriysra1FzZo1xVtvvSWSkpLKMeOiO3HihGjRooVwcnISGo1G1KlTR3zyyScGZwL/u49CCJGRkSHGjBkjKlWqJGxtbcWLL75oUICYipCQkHx/Zx89SW2Ox/Drr78W1apVE2q1WjRv3lwcPnxY/1q7du3E4MGDDeLXr18vateuLdRqtahXr57YsmVLOWdcNAUdq5CQEH3Mf/dv4sSJ+p+Fh4eH6N69uzh58mT5J19Er7zyivDy8hJqtVpUqVJFvPLKK+LatWv61835+D30559/CgDi8uXLj71mbsfv4XfWf9vDfdBqteL9998XHh4ewtraWnTs2PGx/fb19RWzZs0yWGbsb7g0SEIIUXoX9YiIiIgsC8dZIiIiIjKCxRIRERGRESyWiIiIiIxgsURERERkBIslIiIiIiNYLBEREREZwWKJiIiIyAgWS0RERERGsFgiIiIiMoLFEhEREZERLJaIiP7jzp078PT0xCeffKJfFhYWBrVajV27dsmYGRHJgXPDERHlY+vWrejVqxfCwsIQEBCAhg0bomfPnvjiiy/kTo2IyhmLJSKiAowdOxY7d+5E06ZNce7cORw7dgzW1tZyp0VE5YzFEhFRATIyMhAUFISbN2/ixIkTqF+/vtwpEZEM2GeJiKgA169fR2xsLLRaLSIjI+VOh4hkwjNLRET5yM7ORvPmzdGwYUMEBARg4cKFOHfuHNzd3eVOjYjKGYslIqJ8vPXWW/jll19w5swZ2Nvbo127dnBycsLmzZvlTo2IyhkvwxER/cfevXuxcOFCrF69Go6OjlAoFFi9ejX279+PpUuXyp0eEZUznlkiIiIiMoJnloiIiIiMYLFEREREZASLJSIiIiIjWCwRERERGcFiiYiIiMgIFktERERERrBYIiIiIjKCxRIRERGRESyWiIiIiIxgsURERERkBIslIiIiIiNYLBEREREZ8X8GVSOuSRXUXQAAAABJRU5ErkJggg==",
+            "text/plain": [
+              "<Figure size 640x480 with 1 Axes>"
+            ]
+          },
+          "metadata": {},
+          "output_type": "display_data"
+        }
+      ],
+      "source": [
+        "x_space = np.linspace(-10, 10, 500)\n",
+        "y_space = f(torch.tensor(x_space))\n",
+        "\n",
+        "sns.lineplot(x=x_space, y=y_space, label='f(x)')\n",
+        "plt.axhline(y=0, color='black', linestyle='--', label='y=0')\n",
+        "\n",
+        "# we use the value we have found below for illustration.\n",
+        "plt.axvline(x=0.755, color='red', linestyle='--', label='x=0.755')\n",
+        "plt.title('Plot of f(x) = cos(x) - x')\n",
+        "plt.xlabel('x')\n",
+        "plt.ylabel('f(x)')\n",
+        "plt.legend()\n",
+        "plt.show()"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "id": "0f4dvR4FBVAl",
+        "outputId": "9e2e810a-1f9f-4436-ea38-78f07d8ed591"
+      },
+      "outputs": [
+        {
+          "name": "stdout",
+          "output_type": "stream",
+          "text": [
+            "Converged after 5 iterations.\n",
+            "Time taken: 0:00:00.001611\n",
+            "Root approximated at x = 0.7390851378440857\n",
+            "Function value at root approximation f(x) = 0.0\n"
+          ]
+        }
+      ],
+      "source": [
+        "x = torch.tensor([0.1], requires_grad=True)\n",
+        "tolerance = 1e-6\n",
+        "max_iterations = 100\n",
+        "\n",
+        "t_start = datetime.now()\n",
+        "for i in range(max_iterations):\n",
+        "    y = f(x)\n",
+        "    # YOUR CODE HERE\n",
+        "    with torch.no_grad():\n",
+        "        # Replacing in-place copy with out-of-place operation\n",
+        "        x_new = # YOUR CODE HERE\n",
+        "\n",
+        "    if torch.abs(x_new - x).item() < tolerance: #add .item() to get a python number\n",
+        "        t_stop = datetime.now()\n",
+        "        print(f'Converged after {i+1} iterations.')\n",
+        "        print(f'Time taken: {t_stop - t_start}')\n",
+        "        break\n",
+        "\n",
+        "    x = x_new.clone().detach().requires_grad_(True)  # Create a new tensor with gradient enabled\n",
+        "\n",
+        "print(f'Root approximated at x = {x.item()}')\n",
+        "print(f'Function value at root approximation f(x) = {f(x).item()}')"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "Svek5D1zaYaJ"
+      },
+      "source": [
+        "# With Optimiser\n",
+        "\n",
+        "In the above code, we have implemented Newton's method directly.\n",
+        "However, modern deep learning packages include poweful optimisers that perform the calculation of the gradient, as well as the subsequent updates of the parameters.\n",
+        "\n",
+        "As an exercise, re-write the code to use the [Adam](https://pytorch.org/docs/stable/generated/torch.optim.Adam.html) optimiser.\n",
+        "\n",
+        "*Hint*: You need to think of a suitable loss function;\n",
+        "\n",
+        "*Note*: Depending on the problem at hand, using an optimiser and loss function may (or may not) improve convergence. You may find that the standard approach works sufficiently well for your problem."
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "aOVC7XJle_fr"
+      },
+      "source": [
+        "**Exercise**\n",
+        "Modify the above code to use the Adam optimiser"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "pyeAplQKevqA"
+      },
+      "outputs": [],
+      "source": [
+        "##\n",
+        "## Your code goes here\n",
+        "##"
+      ]
+    }
+  ],
+  "metadata": {
+    "colab": {
+      "provenance": []
+    },
+    "kernelspec": {
+      "display_name": "datascienceintro-eVBNPtpL-py3.11",
+      "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.11.11"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}