how to make random vector with a certain profile

조회 수: 2 (최근 30일)
samuel
samuel 2020년 7월 21일
댓글: samuel 2020년 7월 21일
Well, im looking for a way to produce a random vector that behave like the profile in the picture.
It needs to start from let's say around 2, then climbs up to a max value not higher than 20, and then drops to zero.
That is the general idea, the distribution doesnt have to be exactly like in the graph.
does anyone have a good idea how to make that happened?
  댓글 수: 2
Walter Roberson
Walter Roberson 2020년 7월 21일
Do you happen to have the data for that plot available? Rather than us having to read it off the graph and enter the values by hand.
samuel
samuel 2020년 7월 21일
the data is random, it is just an example.
the profile is what matter. do you still need the data? i will send it

댓글을 달려면 로그인하십시오.

답변 (2개)

Bruno Luong
Bruno Luong 2020년 7월 21일
편집: Bruno Luong 2020년 7월 21일
r=linspace(0,1.5);
fv=(1.5-r).*(2+10*exp(-((r-1)./0.3).^2)); % whatever unnormaized pdf
% NOTE: This method assumes r is an equidistance vector
% otherwise you need to multiply fv by dr before cumulative sum
c = cumsum(fv);
c=(c-c(1))/(c(end)-c(1));
[cu,loc] = unique(c);
rs=r(loc);
x=interp1(cu, rs, rand(1,1e6)); % your random vector
% Check
subplot(2,1,1);
plot(r,fv);
subplot(2,1,2);
hist(x,100)
  댓글 수: 5
Bruno Luong
Bruno Luong 2020년 7월 21일
If you want change for different pdf fv then change it, it in the line #1 & 2 of my code example.
samuel
samuel 2020년 7월 21일
actualy r is given and constant. that i can not change.
for fv (#2 line), if i play with numbers, wont it mess up the profile?

댓글을 달려면 로그인하십시오.


Bruno Luong
Bruno Luong 2020년 7월 21일
편집: Bruno Luong 2020년 7월 21일
Modified code in case r is not equidistance (but monotonic)
rmid = 0.5*(r(1:end-1) + r(2:end));
dr = r(2:end)-r(1:end-1);
fvfun = @(r)(1.5-r).^3.*(2+50*exp(-((r-1)./0.3).^2)); % whatever
fv = fvfun(rmid);
c = cumsum(fv.*dr);
c = [0, c]/c(end);
[cu, loc] = unique(c);
x = interp1(cu, r(loc), rand(1,1e6));

카테고리

Help CenterFile Exchange에서 Random Number Generation에 대해 자세히 알아보기

제품


릴리스

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by