summaryrefslogtreecommitdiff
path: root/tutorials/module_3/numerical_differentiation.md
blob: b34b315629edf0ff542a257ee2421b9e6a95da48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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. Let's imagine a domain $x$ as a vector such that $\vec{x}$ = $\pmatrix{x_0, x_1, x_2, ...}$. Then we can use the following methods to approximate derivatives

## Forward Difference
Uses the point at which we want to find the derivative and a point forwards on the line.
$$
f'(x_i) = \frac{f(x_{i+1})-f(x_i)}{x_{i+1}-x_i}
$$
*Hint: Consider what happens at the last point.*

```python
import numpy as np
import matplotlib.pyplot as plt

# Initiate vectors
x = np.linspace(0, 2, 100) 
y = 34 * np.exp(3 * x)

dydx =  (y[1:] - y[:-1]) / (x[1:] - x[:-1])

# Plot the function
plt.plot(x, y, label=r'$y(x)$')
plt.plot(x, dydx, label=b'$/frac{dy}{dx}$')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Plot of $34e^{3x}$')
plt.grid(True)
plt.legend()
plt.show()
```


## Backwards Difference
Uses the point at which we want to find
$$
f'(x_i) = \frac{f(x_{i})-f(x_{i-1})}{x_i - x_{i-1}}
$$


```python
import numpy as np
import matplotlib.pyplot as plt

# Initiate vectors
x = np.linspace(0, 2, 100) 
y = 34 * np.exp(3 * x)

dydx =  (y[1:] - y[:-1]) / (x[1:] - x[:-1])

# Plot the function
plt.plot(x, y, label=r'$y(x)$')
plt.plot(x, dydx, label=b'$/frac{dy}{dx}$')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Plot of $34e^{3x}$')
plt.grid(True)
plt.legend()
plt.show()
```
## Central Difference

$$
f'(x_i) = \frac{f(x_{i+1})-f(x_{i-1})}{x_{i+1}-x_{i-1}}
$$