wdlang
- 306
- 0
f(x) = 1/(1+x^{3/2})
x>0
how to generate such a random number?
x>0
how to generate such a random number?
The discussion revolves around generating random numbers according to a specific probability distribution defined by the function f(x) = 1/(1+x^{3/2}) for x > 0. Participants explore various methods for achieving this, including calculating cumulative distribution functions (CDFs) and using inverse functions.
Participants express various methods and approaches to the problem, but there is no consensus on a single method or resolution to the challenges presented, particularly regarding the integrability of the function and the complexity of finding the inverse CDF.
Participants mention potential difficulties with the integrability of the function and the complexity of the resulting integrals, which may affect the ability to derive a usable CDF.
mathman said:The most direct method needs an explicit formula for P(x) =c∫[0,x]f(u)du, where c is defined so that P(∞) = 1. The next step is find an expression for x as the inverse of P.
Now generate a random number (random variable uniform between 0 and 1) and compute x using the inverse function.
digfarenough said:I might be able to help a little to get you started. Correct me if I'm wrong, but:
First, I assume you mean probability distribution, rather than a more general distribution. In that case the integral of the function must equal 1, so you need the scaling factor c that mathman mentioned.
In this case, the integral from 0 to infinity of f(x) is \int_0^\infty f(x) dx = 4\pi/(3\sqrt{3})
So your probability distribution is p(x) = f(x)\frac{3\sqrt{3}}{4\pi}, x\geq0. (Do you mind that x=0 is allowed here?)
The integral of p(x) is a mess:
\int p(x) dx = \frac{\sqrt{3}}{4\pi} \left(2\sqrt{3}atan( \frac{2\sqrt{x}-1}{\sqrt{3}}) - 2log(1+\sqrt{x}) + log(1-\sqrt{x}+x) \right) + C
Use your favorite calculus software to get this instead of trying by hand! E.g. wolfram alpha
So to get the cdf you need to find P(x) = \int_0^x p(u) du = \frac{\sqrt{3}}{4\pi} \left(2\sqrt{3}atan( \frac{2\sqrt{x}-1}{\sqrt{3}}) - 2log(1+\sqrt{x}) + log(1-\sqrt{x}+x) \right) + \frac{1}{4}
...if my quick math is right. You'll want to recheck that (recall sqrt(0) = 0, log(1) = 0, atan(-1/sqrt(3)) = -pi/6, and then it's just a bunch of cancellations).
Now the hard part: You want to invert P(x), some g(x) = P^{-1}(x). I don't know if there's an easy way of doing it. You could use a look-up table by just evaluating P(x) over a set of points and inverting that.
Then, again as mathman said, you generate numbers from U[0,1] and use g(U[0,1]) to sample from p(x). If you do this, make sure you generate a big batch of them and compare them to the original distribution to make sure no bugs or typos have been introduced.
I may have made one or more mistakes there, but this is the general way of sampling from an arbitrary distribution: calculate the cdf of your arbitrary distribution, then invert that cdf and use it to translate from U[0,1] to your desired distribution.
Hope that is slightly helpful!