PRELIMINARY VERSION
 Approximation of vectors 
       Approximation of planar vectors 
       Approximation of general vectors 
 Approximation of functions 
       The least squares method 
       The projection (or Galerkin) method 
       Example: linear approximation 
       Implementation of the least squares method 
       Perfect approximation 
       Ill-conditioning 
       Fourier series 
       Orthogonal basis functions 
       Numerical computations 
       The interpolation (or collocation) method 
       The regression method 
       Lagrange polynomials 
 Finite element basis functions 
       Elements and nodes 
       The basis functions 
       Example on piecewise quadratic finite element functions 
       Example on piecewise linear finite element functions 
       Example on piecewise cubic finite element basis functions 
       Calculating the linear system 
       Assembly of elementwise computations 
       Mapping to a reference element 
       Example: Integration over a reference element 
 Implementation 
       Integration 
       Linear system assembly and solution 
       Example on computing symbolic approximations 
       Using interpolation instead of least squares 
       Example on computing numerical approximations 
       The structure of the coefficient matrix 
       Applications 
       Sparse matrix storage and solution 
 Comparison of finite element and finite difference approximations 
       Finite difference approximation of given functions 
       Finite difference interpretation of a finite element approximation 
       Making finite elements behave as finite differences 
 A generalized element concept 
       Cells, vertices, and degrees of freedom 
       Extended finite element concept 
       Implementation 
       Computing the error of the approximation 
       Example: Cubic Hermite polynomials 
 Numerical integration 
       Newton-Cotes rules 
       Gauss-Legendre rules with optimized points 
 Approximation of functions in 2D 
       2D basis functions as tensor products of 1D functions 
       Example: Polynomial basis in 2D 
       Implementation 
       Extension to 3D 
 Finite elements in 2D and 3D 
       Basis functions over triangles in the physical domain 
       Basis functions over triangles in the reference cell 
       Affine mapping of the reference cell 
       Isoparametric mapping of the reference cell 
       Computing integrals 
 Exercises 
       Problem 1: Linear algebra refresher 
       Problem 2: Approximate a three-dimensional vector in a plane 
       Problem 3: Approximate a parabola by a sine 
       Problem 4: Approximate the exponential function by power functions 
       Problem 5: Approximate the sine function by power functions 
       Problem 6: Approximate a steep function by sines 
       Problem 7: Approximate a steep function by sines with boundary adjustment 
       Exercise 8: Fourier series as a least squares approximation 
       Problem 9: Approximate a steep function by Lagrange polynomials 
       Problem 10: Approximate a steep function by Lagrange polynomials and regression 
       Problem 11: Define nodes and elements 
       Problem 12: Define vertices, cells, and dof maps 
       Problem 13: Construct matrix sparsity patterns 
       Problem 14: Perform symbolic finite element computations 
       Problem 15: Approximate a steep function by P1 and P2 elements 
       Problem 16: Approximate a steep function by P3 and P4 elements 
       Exercise 17: Investigate the approximation error in finite elements 
       Problem 18: Approximate a step function by finite elements 
       Exercise 19: 2D approximation with orthogonal functions 
       Exercise 20: Use the Trapezoidal rule and P1 elements 
       Exercise 21: Compare P1 elements and interpolation 
       Exercise 22: Implement 3D computations with global basis functions 
       Exercise 23: Use Simpson's rule and P2 elements 
 Bibliography 
The finite element method is a powerful tool for solving partial differential equations. The method can easily deal with complex geometries and higher-order approximations of the solution. Below is a two-dimensional domain with a non-trivial geometry.

The idea of the finite element method is to divide the domain into triangles (elements) and seek a polynomial approximations to the unknown functions on each triangle. The method glues these piecewise approximations together to find a global solution. Linear and quadratic polynomials over the triangles are particularly popular, because of their mathematical simplicity, but higher-degree polynomials are advantageous to create very computationally efficient methods. The reason for using triangles is that they can easily approximate geometrically complicated domains, but quadrilateral elements and boxes in 3D are also widely used.