# Numerical Differentiation Finding a derivative of tabular data can be done using a finite difference. Here we essentially pick two points on a function or a set of data points and calculate the slope from there. You may have done this before in spreadsheets, we're going to do this using python. Let's imagine a time range $t$ as a vector such that $\vec{t}$ = $\pmatrix{t_0, t_1, t_2, ...}$ and a displacement domain as a function of time. We can represent the range and domain as two python arrays `t` and `s` respectively. ```python import numpy as np # Initiate time domain t = np.linspace(0, 2, 100) s = 34 * np.exp(3 * t) ``` Then we can use the following methods to approximate the definitive derivatives as follows. ## Finite Difference ### Forward Difference Uses the point at which we want to find the derivative and a point forwards in the array. $$ f'(x_i) = \frac{f(x_{i+1})-f(x_i)}{x_{i+1}-x_i} $$ *Note: If we apply this to an array, consider what happens at the last point.* ```python for s in t: ds_dt = f(x+) ``` ```python # Forward difference using python arrays dsdt = (s[1:] - s[:-1]) / (t[1:] - t[:-1]) import matplotlib.pyplot as plt # Plot the function plt.plot(t, s, label=r'$s(t)$') plt.plot(t, dsdt, label=b'$/frac{ds}{dt}$') plt.xlabel('Time (t)') plt.ylabel('Displacement (s)') plt.title('Plot of $34e^{3t}$') plt.grid(True) plt.legend() plt.show() ``` ### Backwards Difference Uses the point at which we want to find the derivative and the previous point in the array. $$ f'(x_i) = \frac{f(x_{i})-f(x_{i-1})}{x_i - x_{i-1}} $$ ```python dsdt = (s[1:] - s[:-1]) / (t[1:] - t[:-1]) # Plot the function plt.plot(t, s, label=r'$s(t)$') plt.plot(t, dydx, label=b'$/frac{ds}{dt}$') plt.xlabel('Time (t)') plt.ylabel('Displacement (s)') plt.title('Plot of $34e^{3t}$') plt.grid(True) plt.legend() plt.show() ``` Try plotting both forward and backwards ### Central Difference $$ f'(x_i) = \frac{f(x_{i+1})-f(x_{i-1})}{x_{i+1}-x_{i-1}} $$ ### Problem 1 Use the forward difference formula to approximate the derivative of $f(x)$ at $x = 1$ using step sizes: $h=0.5$ and $h=0.1$ for the following function. $$ f(x) = \ln(x^2 + 1) $$ Compare your results with the analytical solution at $x=1$. Comment on how the choice of $h$ affects the accuracy. ```python ``` ### Problem 2 Use the central difference formula to approximate the derivative of $f(x)$ at $x = 1.2$ using step sizes: $h=0.5$ and $h=0.1$ for the following function. $$ f(x) = e^{-x^2} $$ Compare your results with the analytical solution at $x=1.2$. Comment on how the choice of $h$ affects the accuracy. ```python ```