LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
random_continuous.c 文件参考
#include <math.h>
#include "random_internal.h"
random_continuous.c 的引用(Include)关系图:

浏览该文件的源代码.

函数

lmmc_status_t lmmc_rng_gamma (lmmc_rng_t *rng, lmmc_real_t shape, lmmc_real_t scale, lmmc_real_t *out)
 生成 Gamma 分布样本 \(\mathrm{Gamma}(\alpha, \beta)\) 。
lmmc_status_t lmmc_rng_beta (lmmc_rng_t *rng, lmmc_real_t alpha, lmmc_real_t beta_param, lmmc_real_t *out)
 生成 Beta 分布样本 Beta(alpha, beta)。
lmmc_status_t lmmc_rng_chi_squared (lmmc_rng_t *rng, lmmc_real_t df, lmmc_real_t *out)
 生成卡方分布样本 Chi-squared(df)。
lmmc_status_t lmmc_rng_student_t (lmmc_rng_t *rng, lmmc_real_t df, lmmc_real_t *out)
 生成 Student-t 分布样本 t(df)。
lmmc_status_t lmmc_rng_f (lmmc_rng_t *rng, lmmc_real_t df1, lmmc_real_t df2, lmmc_real_t *out)
 生成 F 分布样本 F(df1, df2)。

函数说明

◆ lmmc_rng_gamma()

lmmc_status_t lmmc_rng_gamma ( lmmc_rng_t * rng,
lmmc_real_t shape,
lmmc_real_t scale,
lmmc_real_t * out )

生成 Gamma 分布样本 \(\mathrm{Gamma}(\alpha, \beta)\) 。

使用 Marsaglia-Tsang 方法(shape >= 1),shape < 1 时使用 \(X = Y \cdot U^{1/\alpha}\) 变换法(Y ~ Gamma(1+α, β))。

参数
[in]rng已初始化的 RNG。
[in]shape形状参数 \(\alpha\) (> 0)。
[in]scale尺度参数 \(\beta\) (> 0)。
[out]out输出样本值。
返回
LMMC_STATUS_OK 成功; LMMC_STATUS_INVALID_ARGUMENT 若参数非有限、shape <= 0、 scale <= 0 或指针为 NULL。
副作用
  • 就地修改 rng 的内部状态(消耗多个随机数,次数不确定)。
  • 不分配堆内存。

shape < 1 时采用采样恒等式 Gamma(shape) = Gamma(shape+1) * U^(1/shape)。

shape >= 1 时使用 Marsaglia-Tsang 法。

以挤压界快速判定接受。

按完整接受条件判定候选值。

在文件 random_continuous.c 第 4 行定义.

引用了 lmmc_rng_gamma(), lmmc_rng_standard_normal(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK , 以及 lmmc_rng_t::state.

被这些函数引用 lmmc_rng_chi_squared() , 以及 lmmc_rng_gamma().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_rng_beta()

lmmc_status_t lmmc_rng_beta ( lmmc_rng_t * rng,
lmmc_real_t alpha,
lmmc_real_t beta_param,
lmmc_real_t * out )

生成 Beta 分布样本 Beta(alpha, beta)。

参数
[in]rng已初始化的 RNG。
[in]alpha参数 alpha(> 0)。
[in]beta_param参数 beta(> 0)。
[out]out[0,1] 内的有限样本,仅成功时写入。 对数 Gamma 比例支持极小形状参数;舍入或下溢可产生端点 0/1。
返回
LMMC_STATUS_OK 表示成功;LMMC_STATUS_INVALID_ARGUMENT 表示空指针 或非有限、非正形状参数,此时 RNG 保持原状态; LMMC_STATUS_NUMERICAL_FAILURE 表示中间数值无效; LMMC_STATUS_CONVERGENCE_FAILED 表示排除均匀随机数零端点的尝试次数耗尽。
注解
采样失败时 RNG 状态可能已推进。

在文件 random_continuous.c 第 117 行定义.

引用了 lmmc_rng_beta(), LMMC_STATUS_INVALID_ARGUMENT , 以及 LMMC_STATUS_OK.

被这些函数引用 lmmc_rng_beta().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_rng_chi_squared()

lmmc_status_t lmmc_rng_chi_squared ( lmmc_rng_t * rng,
lmmc_real_t df,
lmmc_real_t * out )

生成卡方分布样本 Chi-squared(df)。

参数
[in]rng已初始化的 RNG。
[in]df自由度(> 0)。
[out]out有限且非负的样本,仅成功时写入;极小正自由度可舍入为零。
返回
LMMC_STATUS_OK 成功;无效参数返回 LMMC_STATUS_INVALID_ARGUMENT; 其余采样失败返回相应数值状态。

在文件 random_continuous.c 第 147 行定义.

引用了 lmmc_rng_chi_squared(), lmmc_rng_gamma(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK , 以及 lmmc_rng_t::state.

被这些函数引用 lmmc_rng_chi_squared(), lmmc_rng_f() , 以及 lmmc_rng_student_t().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_rng_student_t()

lmmc_status_t lmmc_rng_student_t ( lmmc_rng_t * rng,
lmmc_real_t df,
lmmc_real_t * out )

生成 Student-t 分布样本 t(df)。

参数
[in]rng已初始化的 RNG。
[in]df自由度(> 0)。
[out]out有限样本,仅成功时写入。
返回
LMMC_STATUS_OK 成功;无效参数返回 LMMC_STATUS_INVALID_ARGUMENT; 样本分母下溢或结果不可表示时返回 LMMC_STATUS_NUMERICAL_FAILURE。

在文件 random_continuous.c 第 177 行定义.

引用了 lmmc_rng_chi_squared(), lmmc_rng_standard_normal(), lmmc_rng_student_t(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK , 以及 lmmc_rng_t::state.

被这些函数引用 lmmc_rng_student_t().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_rng_f()

lmmc_status_t lmmc_rng_f ( lmmc_rng_t * rng,
lmmc_real_t df1,
lmmc_real_t df2,
lmmc_real_t * out )

生成 F 分布样本 F(df1, df2)。

参数
[in]rng已初始化的 RNG。
[in]df1分子自由度(> 0)。
[in]df2分母自由度(> 0)。
[out]out有限且非负的样本,仅成功时写入。
返回
LMMC_STATUS_OK 成功;无效参数返回 LMMC_STATUS_INVALID_ARGUMENT; 样本分母下溢或结果不可表示时返回 LMMC_STATUS_NUMERICAL_FAILURE。

在文件 random_continuous.c 第 211 行定义.

引用了 lmmc_rng_chi_squared(), lmmc_rng_f(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE , 以及 LMMC_STATUS_OK.

被这些函数引用 lmmc_rng_f().

函数调用图:
这是这个函数的调用关系图: