# Numerical Methods for PDEs
https://hackmd.io/@ubcs3
```
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate as spi
```
```
f = lambda x: 1/(1 + x**2)
a = 0
b = 1
I,error = spi.quad(f,a,b)
```
```
def fourier(f,L,N):
I,_ = spi.quad(f,-L,L)
a0 = 1/L*I
a = np.zeros(N)
b = np.zeros(N)
for n in range(1,N+1):
integrand = lambda x: f(x)*np.cos(n*np.pi*x/L)
I,_ = spi.quad(integrand,-L,L)
a[n-1] = 1/L*I
integrand = lambda x: f(x)*np.sin(n*np.pi*x/L)
I,_ = spi.quad(integrand,-L,L)
b[n-1] = 1/L*I
return (a0,a,b)
```
```
def fouriersum(a0,a,b,x,L):
cosine_sum = sum([a[n-1]*np.cos(n*np.pi*x/L) for n in range(1,len(a)+1)])
sine_sum = sum([b[n-1]*np.sin(n*np.pi*x/L) for n in range(1,len(b)+1)])
return a0/2 + cosine_sum + sine_sum
```
```
A = (1 - 2*r)*np.eye(N-1) + r*np.diag(np.ones(N-2),1) + r*np.diag(np.ones(N-2),-1)
```