# Modules

Computational physics learning modules as IPython Notebooks.

#### Basic Plotting

Plotting a function in Python.

#### Introduction to NumPy

Very basic introduction to using and generating NumPy arrays

#### Discrete Fourier Transform

Brief introduction to Discrete Fourier Transform and the Fast Fourier Transform.

#### Linear Algebra in Python

Basic linear algebra in Python.

#### Simple implementation of Euler's method

Basic notebook covering how to implement Euler's method, without much focus on theory

#### Intermediate NumPy

An extension of the Introduction to NumPy-notebook, going through some of the more common features in NumPy.

#### Intermediate plotting

Basic and intermediate plotting with Python using the Matplotlib library. Topics include, figure formatting, subplots, mesh grids and 3D plots.

#### Classes in Python

Introduction to object oriented programming in Python.

#### Numerical Integration

Numerical integration using the trapezoidal and Simpson's rules.

#### Monte Carlo Integration in One Dimension

Numerical integration in one dimension using the Monte Carlo method.

#### Monte Carlo Integration in D Dimensions

Numerical integration in D dimensions using the Monte Carlo method.

#### Bisection Method

Determining a root using the bisection method.

#### Newton-Raphson Method

Determining a root with the Newton-Raphson algorithm.

#### Fixed-Point Iteration

Solving fixed-point problems using the Fix-Point Iteration method.

#### Euler's Method

A thorough walkthrough of the theoretical aspects of Euler's method. Also covers how to solve higher order ODEs.

#### Verlet Integration

Solving a second-order ordinary differential equation (Newton's second law) using Verlet integration.

#### Implicit Euler Method

Solving a first-order ordinary differential equation using the implicit Euler method (backward Euler method).

#### Runge-Kutta Methods

Solving a first-order ordinary differential equation using the Runge-Kutta method.

Solving a first-order ordinary differential equation using Runge-Kutta methods with adaptive step sizes.

#### Partial Differential Equations - Two Examples

This module shows two examples of how to discretize partial differential equations: the 2D Laplace equation and 1D heat equation.

#### Relaxation Methods for Solving PDE's

The Jacobi, Gauss-Seidel and Successive overrelaxation (SOR) methods are introduced and discussed with the Poisson equation as an example.

#### Iterative Gauss-Seidel Method

Solves a linear of system of equations using the iterative Gauss-Seidel method.

#### Polynomial Interpolation

Using polynomial interpolation to interpolate a set of points and to approximate a function or a curve.

#### Cubic Splines

Uses cubic splines to interpolate a given set of data points

#### Trigonometric Interpolation

Using trigonometric interpolation and the discrete Fourier transform to fit a curve to equally spaced data points.

#### Calling Fortran(95) Routines from a Python Script

Making use of the Fortran to Python package F2PY which enables creating and compiling a Fortran routine before converting it to a Python Module, which can be imported to any Python script.

#### Quantum computing - Basics

Uses the qiskit framework to run basic quantum circuits, both locally and on real quantum computers.

#### A quick introduction to the Julia programming language

Julia has to some degree already cemented itself in the scientific community, and will most likely continue to expand in the coming years. It aims at taking the middle ground between Python on one side, and Fortran and C++ on the other. In this notebook we offer a quick introduction for those who wish to venture from Python to Julia.

#### Neural Network From Scratch

Making a neural network from scratch and training the network using a dataset from scikit-learn.