# Metropolis-Hastings Monte Carlo Integration

A little update on what I’ve been learning about lately.

Metropolis-Hastings is an algorithm for sampling random values out of a probability distribution. Effectively, for a function `f(x)` you wish to simulate where the curve is higher it is more probable that a random number will be chosen from there. Uniform sampling of the range would mean that all `x` values on the graph have an even probability of being chosen, this could be simulated by saying `f(x) = 1`.

However, if the function `f(x)` represents a curve then the number of samples in high energy (probability) regions needs to be more dense. This can be seen in the simulations of `f(x) = sqrt(x-1)` and `f(x) = sin(1/x)` below.

Metropolis-Hastings is best suited to problems where Direct Sampling and other more efficient solutions are not available. Because it only relies on the availability of a computable function `f(x)` and a proposal density `Q(x|x*)` M-H can correctly sample unusual probability distributions that would else-wise be difficult or impossible to compute. This can be seen below in the simulations of the sine function `f(x) = sin(x) + 1.5`.

#### Matlab code for Metropolis-Hastings Monte Carlo Integration (for generating samples)

Below is the Matlab code used to generate the above graph. By modifying the function `f(x)`, the sample count `N`, the proposal distribution and it’s variance `qV`, and the upper and lower truncation bounds `LB` & `HB` any PDF can be simulated.