Heinz,

I'm not quite sure if this is what you need. Even if you have been suggested a good solution, here is a possible alternative.

Suppose you have a number of equally spaced bins (this is not really necessary but it generally is the case), for instance

x = (0:100);

with a cummulative distribution which may be experimental but for this example I'll use this one:

y = (x/100).^4;

This means that the values close to 100 are much more frequent.

You can then apply the inverse function to a series of 1000000 uniformly distributed random numbers such as

y1 = rand(1,1000000);

As you don't know the inverse for any value different from the tabulated ones, you just interpolate:

x1 = interp(y, x, y1);

This is linear interpolation, which in most cases will suffice. You could try splines, at the expense of reduced speed.

It is reasonably fast, 1000000 values take an average of 0.1 ms on an i7 laptop with Windows 7.

Federico


On 18/03/2019 05:22, Heinz Nabielek wrote:
y is a previously defined table with values monotonically increasing from zero 
to one.
h

On 18.03.2019, at 06:43, Federico Miyara <[email protected]> wrote:


Heinz,

I don't find your example clear enough. What's y? Is it defined previously?

Perhaps an example would be useful.

Regards,

Federico Miyara


On 17/03/2019 19:49, Heinz Nabielek wrote:
I need to generate random deviates x according to a given cumulative 
distribution y that is available only in tabular form.

Scilab coding was easy by table lookup:

length(y)=   360. // only for general information
N=1000;
z=grand(1,N,'def');
x=[];
for i=1:N;
x=[x find(y>z(i),1)];
end;

Problem is that execution times are exponentially increasing when I want one 
million deviates.

Can you suggest a significantly more efficient procedure?
Heinz
_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users



---
El software de antivirus Avast ha analizado este correo electrónico en busca de 
virus.
https://www.avast.com/antivirus

_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

Reply via email to