【发布时间】:2021-04-26 23:08:43
【问题描述】:
如果我们想均匀地生成区间 [a,b] 中的随机数,我们可以很容易地生成它:
A=rand()*(b-a) + a
其中rand()是一个可以生成0到1之间的统一随机数的函数。所以A是[a,b]中的一个随机数。
为了根据y=x-x^2 之类的分布函数生成随机数,我遇到了一个问题。
我想使用提到的方法here。但是我对使用python函数inverse_cdf(np.random.uniform())不感兴趣。
我可以通过对 0 和 X 进行积分来计算函数“y”的 CDF,我称之为“f”。但是当我将 rand() 函数(0 到 1 之间的数字)放入 f 的反函数时,我得到一个复数!
这意味着:A=f^(-1) (rand()) 返回一个复数。
根据分布函数生成随机数是否正确?
我用这个website 来计算f=x^2/2 - x^3/3 的倒数,下面的代码是计算的一部分,表明tmp1 总是负数
for i=1:10
rnd1=rand;
tmp1 = 2*sqrt(6)*sqrt(6*rnd1^2-rnd1)-12*rnd1+1
cTmp1 = tmp1^(1/3)
end
【问题讨论】:
-
我很难理解这个问题,您能否添加一些示例代码并使用您使用的语言进行标记?
-
我稍微编辑了主题。实际上我打算在 matlab 中实现它,我不想使用任何现有的函数。我认为我的方法有问题。可能是我误解了生成随机数的方法。
-
你能展示你的实际代码吗?
-
@AnderBiguri 我在问题中添加了更多信息
-
不知道,我得到了一个更大的方程:www4c.wolframalpha.com/Calculate/MSP/…
标签: matlab random distribution