非线性变换单纯形均匀采样算法验证:密度与采样逻辑核查
三维变换单纯形采样算法核查
问题背景
该算法意图在三维空间的变换单纯形曲面上均匀采样优先级向量,变换方式为对原标准2-单纯形的其中一个权重分量取幂。以下从三个核心维度核查代码正确性:
1. 雅可比密度计算的问题
原代码中用于密度修正的雅可比因子为:
density = power * np.power(w[transform_idx], power - 1)
这一计算是错误的,原因如下:
- 该公式是一维变量变换的雅可比行列式(仅描述单变量$z \to z^p$的长度缩放比例),但我们处理的是二维曲面的测度变换,不能直接套用一维结果。
- 标准2-单纯形是二维曲面,其测度依赖于参数化后的Gram矩阵行列式的平方根。当对某一分量做幂变换后,曲面的测度元素需要重新计算:
假设原单纯形参数化为$(u, v, 1-u-v)$,对第三个分量做$z' = (1-u-v)^p$变换后,新曲面的参数化雅可比矩阵的Gram矩阵行列式为$1 + 2p^2 z^{2(p-1)}$($z=1-u-v$),因此曲面测度元素为$\sqrt{1 + 2p^2 z^{2(p-1)}} du dv$,而非一维的$p z^{p-1}$。 - 额外问题:代码中变换后的向量
transformed分量和不为1,不符合单纯形的定义(单纯形要求所有非负分量和为1),这会导致采样结果不在目标曲面上。
2. 重要性采样逻辑的偏差
原采样代码逻辑:
samples = [] while len(samples) < n_samples: # Sample from the standard 2-simplex u = np.random.uniform(0, 1, 2) u = np.sort(u) w = np.array([u[0], u[1] - u[0], 1 - u[1]]) # Compute the density correction (Jacobian factor) # The transformation stretches/compresses the surface # The Jacobian determinant factor for the surface measure density = power * np.power(w[transform_idx], power - 1) # Rejection sampling if np.random.uniform(0, max_density) <= density: transformed = w.copy() transformed[transform_idx] = np.power(w[transform_idx], power) samples.append(transformed)
该逻辑存在核心偏差:
- 若目标是在变换后的单纯形(分量和为1)上均匀采样,正确的流程应该是:
- 定义变换后的单纯形:将原分量$w_k$替换为$w_k^p$后,重新归一化所有分量使其和为1;
- 推导该变换对应的原单纯形上的诱导分布密度,再基于此设计拒绝采样的接受概率。
- 当前代码未做归一化,采样结果
transformed的分量和为$w_0 + w_1 + w_k^p = (1 - w_k) + w_k^p$($w_k$为被变换的分量),显然不等于1,因此采样结果不在目标单纯形曲面上;同时使用错误的密度因子,无法保证采样的均匀性。
3. 最大密度计算的错误
原代码中的最大密度计算逻辑:
if power >= 1: max_densidy = power # Maximum at w=1 else: max_densidy = power * np.power(0.01, power - 1)
存在两处核心问题:
- 当
power < 1时,使用0.01作为$w$的取值是完全随意的,没有数学依据:
对于一维函数$f(z) = p z^{p-1}$,当$p < 1$时,$z \to 0^+$时$f(z) \to +\infty$,这意味着该函数在原单纯形上没有上界(因为$z$可以无限趋近于0),此时无法用固定的max_density做拒绝采样。 - 即使忽略曲面测度的问题,仅看一维函数的最大值:当$p \geq 1$时,$f(z)=p z^{p-1}$在$z=1$处取最大值$p$,这部分是对的,但当$p < 1$时函数无界,代码中的
0.01是不合理的经验值,会导致大量采样被错误拒绝,或者无法覆盖$z$趋近于0的区域。
修正建议
- 修正变换定义:若目标是变换后的单纯形,需在分量取幂后进行归一化,确保结果满足$\sum_i w'_i = 1$;
- 重新推导密度因子:基于正确的曲面测度变换,计算原单纯形采样点对应变换后曲面的测度比值,作为拒绝采样的接受概率;
- 处理$p < 1$的情况:由于此时一维变换的雅可比无界,无法直接用拒绝采样,需换用其他采样策略(比如先采样变换后的分量,再推导其他分量的分布)。
内容的提问来源于stack exchange,提问作者Engr. Moiz Ahmad
相关产品推荐
相关产品推荐

