generate data from arbitrary probability random function
Mostrar comentarios más antiguos
HI,
I Have a arbitrary probility function and I want to generate data according to this function
my function is:
f=7.6*exp(-2.1*x)+1.6*exp(-1.8*x)*cos(2.2*x+1.3)+9.4*exp(-2.04*x)*cos(x-2.6)
how can I generate data from this probability density function?
if I generate this data I would like to plot histogram of the generated data.
4 comentarios
Bruno Luong
el 17 de Dic. de 2018
pdf not propertly normalized
f = @(x)7.6*exp(-2.1*x)+1.6*exp(-1.8*x).*cos(2.2*x+1.3)+9.4*exp(-2.04*x).*cos(x-2.6);
integral(f,0,100)
returns
1.0500
Bruno Luong
el 17 de Dic. de 2018
And in addition pdf is negative
>> y=f(linspace(0,10));
>> min(y)
ans =
-0.0268
>>
Torsten
el 17 de Dic. de 2018
Most probably, the coefficients in f are rounded.
hamidreza hamidi
el 22 de Dic. de 2018
Respuestas (1)
n = 1000;
ur = zeros(n,1);
u = rand(n,1);
f = @(x)7.6*exp(-2.1*x)+1.6*exp(-1.8*x).*cos(2.2*x+1.3)+9.4*exp(-2.04*x).*cos(x-2.6);
for i = 1:numel(u)
fun = @(x)integral(f,0,x)-u(i);
ur(i) = fzero(fun,0.5);
end
histogram(ur)
2 comentarios
hamidreza hamidi
el 22 de Dic. de 2018
Torsten
el 2 de En. de 2019
Adapt your probability function such that the integral from 0 to 10 equals 1 (e.g by dividing f(x) by integral_{0}^{10} f(x) dx).
Then the above method will produce random numbers between 0 and 10.
Best wishes
Torsten.
Categorías
Más información sobre Random Number Generation en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!