c++中使用rand()的线性分布
linear distribution in c++ using rand()
我正在编写一个函数,该函数生成n个随机数x,使得xmin<x<xmax。使用rand()进行均匀分布很容易做到这一点。
int points[n];
for (int i = 0; i < n; i++) {
points[i] = rand() % (xmax - xmin) + xmin;
}
然而,我想控制分布,使给定x值的概率为px = (px2 * (x - xmin) + px1 * (xmax - x)) / (xmax - xmin)
,其中px1和px2是常数。换句话说,就是线性分布。
我可以通过将区间划分为足够小的离散区间,并对每个区间使用上面的算法来伪造这一点,其中n与子区间的平均概率成比例。然而,我更愿意在区间中应用连续分布。这可以通过使用rand()或其他方法来实现吗?
对于与某个线性函数成比例的PDF,CDF将与x
的平方成比例。因此,采样需要sqrt(),类似
x = xmin + sqrt(urand())*(xmax - xmin);
y = ymin + sqrt(urand())*(ymax - ymin);
其中urand()是U(0,1)RNG(可能等于rand()/RAND_MAX
,但我很久以前就放弃了rand(),转而使用C++11)
更新
如果您想使用p1
和p2
(假设它们是概率,使得p1+p2=1),则需要进行一些修改,首先选择要采样的分支:
r1 = urand();
if (r1 < p2) // range [0...p2), first branch
x = xmin + sqrt(urand())*(xmax-xmin);
else // range [p2...1), range length is 1-p2=p1
x = xmax - sqrt(urand())*(xmax-xmin);
y
的类似采样
相关文章:
- 向量上的线性搜索
- 二叉搜索如何比线性搜索更快?
- 线性丢番图方程 - 求给定区间内的解数和解
- 查找自动生成键并具有线性内存消耗的小型关联数组
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 线性优化目标函数中的绝对值
- 改变或缩放两个正态分布以具有特定的相关系数
- 如何创建没有特定定义的随机分布?uniform_int_distribution是从其他类继承的吗?
- 犰狳C++:带有模量计算的线性组合
- C++(线性搜索和排序)
- 一般采用可索引/可调用的线性组合
- C++线性搜索算法,确定数组中元素的数量
- C++随机数分布传递给函数
- 如何在 c++ 中线性搜索两个数组?
- 从转换后的容器元素创建离散分布
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 生成线性随机整数C++
- 使用本征求解线性方程组
- 在 SEAL 中重新线性化一个密文
- c++中使用rand()的线性分布