How to generate a random number according to this distribution?

In summary, we discussed the process of generating a random number using a given function, f(x) = 1/(1+x^{3/2}), and the need for an explicit formula for P(x) = c∫[0,x]f(u)du in order to generate the number. We also mentioned the use of inverse functions and a random variable uniform between 0 and 1 to compute x. However, it was noted that this function may be non-integrable and an alternative approach of challenging generated values was suggested. Additionally, we covered the steps for finding the scaling factor and calculating the probability distribution, as well as the challenge of inverting the
  • #1
wdlang
307
0
f(x) = 1/(1+x^{3/2})

x>0

how to generate such a random number?
 
Physics news on Phys.org
  • #2
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.
 
  • #3
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.

but this function seems to be non-integrable
 
  • #4
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 [tex]\int_0^\infty f(x) dx = 4\pi/(3\sqrt{3})[/tex]

So your probability distribution is [tex]p(x) = f(x)\frac{3\sqrt{3}}{4\pi}, x\geq0.[/tex] (Do you mind that x=0 is allowed here?)

The integral of p(x) is a mess:
[tex]\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[/tex]
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 [tex]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}[/tex]

...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 [tex]g(x) = P^{-1}(x).[/tex] 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!
 
Last edited:
  • #5
An alternative approach is to keep generating X values and challenging them: you take another random value from a uniform distribution and compare it against a threshold that depends on f(x).
That's not too hard when the range of X is finite; you generate the values uniformly across the range. With unlimited X it's trickier, but it can be done.
 
  • #6
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 [tex]\int_0^\infty f(x) dx = 4\pi/(3\sqrt{3})[/tex]

So your probability distribution is [tex]p(x) = f(x)\frac{3\sqrt{3}}{4\pi}, x\geq0.[/tex] (Do you mind that x=0 is allowed here?)

The integral of p(x) is a mess:
[tex]\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[/tex]
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 [tex]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}[/tex]

...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 [tex]g(x) = P^{-1}(x).[/tex] 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!

this is very helpful.

the inversion is not a big problem.
 

FAQ: How to generate a random number according to this distribution?

How do you generate a random number according to a specific distribution?

To generate a random number according to a specific distribution, you can use a variety of mathematical methods and algorithms, such as the inverse transform method or the rejection sampling method. These methods use the properties of the desired distribution to generate random numbers that follow that distribution.

What is the purpose of generating a random number according to a distribution?

Generating a random number according to a distribution allows for the creation of more realistic and accurate simulations and models in various fields, such as statistics, physics, and economics. It can also be used in computer programming for tasks such as generating random passwords or selecting random items from a list.

How do you determine which distribution to use for generating random numbers?

The distribution used for generating random numbers depends on the specific scenario and what type of data is being simulated or modeled. For example, if the data follows a normal distribution, then the Box-Muller transform can be used to generate random numbers. It is important to understand the properties and characteristics of the data in order to select the appropriate distribution.

Can you generate a random number according to a custom distribution?

Yes, it is possible to generate a random number according to a custom distribution by using a combination of mathematical methods and algorithms. This can be useful in situations where the data does not follow a standard distribution and a custom one needs to be created.

Is it possible to generate truly random numbers?

It is not possible to generate truly random numbers using a computer, as computers are deterministic machines. However, pseudo-random number generators (PRNGs) can be used to generate numbers that appear random for most practical purposes. These PRNGs use mathematical algorithms and a starting value called a seed to generate a sequence of numbers that have statistical properties similar to those of truly random numbers.

Similar threads

Back
Top