Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I need to draw from a Maxwell-Boltzmann velocity distribution to initialise a molecular dynamics simulation. I have the PDF but I'm having difficulty finding the correct CDF so that I can make random draws from it.

The PDF I am using using is:

$$f(v)=\sqrt \frac{m}{2\pi kT} \times exp \left( \frac{-mv^2}{2kT}\right) $$

I am told that to find the CDF from the PDF we perform:

$$CDF(x)= \int_{-\infty}^x PDF(x) dx $$

After integrating $ f(v) $ I get:

$$ CDF(v)= \sqrt \frac{m}{2\pi kT} \times \left( \frac{\sqrt\pi\times erf \left( \frac{mv}{2\pi kT} \right) }{2\times \left( \frac{m}{2kT} \right)} \right) $$

$$CDF(v)= _{-\infty} ^{x} \left[ {\sqrt \frac{m}{2\pi kT} \times \left( \frac{\sqrt\pi\times erf \left( \frac{mv}{2\pi kT} \right) }{2\times \left( \frac{m}{2kT} \right)} \right)} \right] $$

1)After I reach this point I am unable to proceed as I do not know how to evaluate something between $x$ and ${-\infty}$.

2)I am also concerned that I have not done the integration correctly.

3)I want to implement the CDF in C++ in the end so I can draw from it. Does anyone know if there will be a problem with doing this because of the erf, or will I be alright with this GSL implimentation ?

I am not a mathematician so please be gentle with your explanations :)

Thanks for your time


@bryansis2010 says that I can evaluate in the range $x$ to $0$ instead of $-\infty$.

Would this then make the CDF:

$$ CDF(v)= \sqrt \frac{m}{2\pi kT} \times \left( \frac{\sqrt\pi\times erf \left( \frac{mv}{2\pi kT} \right) }{2\times \left( \frac{m}{2kT} \right)} \right) $$

as $erf(0)=0$

share|cite|improve this question
How about you change the lower limit to absolute zero, ie 0 kelvin? That is a lower limit because temperatures in the universe do not fall below 0 Kelvin... – bryansis2010 Feb 17 '13 at 15:28
Thanks, but given the definition of the CDF, would that still be OK? – RRs_Ghost Feb 17 '13 at 15:47
i would say it's okay since, by definition, the CDF is cumulative probability that is smaller than a value of $x$. – bryansis2010 Feb 17 '13 at 16:00
cheers @bryansis2010, so then my final CDF is correct? (i.e. is the integration is correct?). Also do you have any thoughts on the GSL erf implementation? – RRs_Ghost Feb 17 '13 at 16:04
i'm no physics person, you might want to bring this question to to ask – bryansis2010 Feb 17 '13 at 16:16

The PDF you gave is for a Gaussian distribution. Your programming language might have a subroutine for generating Gaussian-distributed random variates; if not, inverting the CDF is not the easiest approach. The Box-Muller transform is a good place to start. You give it two uniform random numbers, and it gives you two Gaussian random numbers.

share|cite|improve this answer
Of course! I forgot that, thanks @iannucci. According to wiki each component of the velocity vector has a normal distribution with mean 0 and st-dev sqrt(kT/m). Does this mean I can simply sample from a Gaussian CDF with those parameters and achieve the same thing? i.e. 1/2 *(1+ erf[(x-mu)/sqrt(2*sigma^2)]) – RRs_Ghost Feb 17 '13 at 16:47

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.