LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
statistics_internal.h
浏览该文件的文档.
1#ifndef LMMC_STATISTICS_INTERNAL_H
2#define LMMC_STATISTICS_INTERNAL_H
3
4/* Private shared helpers for the statistics translation units. */
5#include <float.h>
6#include <math.h>
7#include <stdlib.h>
8
9#include "internal.h"
10#include "memory_bridge.h"
11#include "lmmc/config.h"
12#include "lmmc/numeric.h"
13#include "lmmc/stats.h"
14
15
16static inline lmmc_status_t lmmc_validate_vec(const lmmc_vec_t* x) {
17 return lmmc_vec_descriptor_is_valid(x)
20}
21
22static inline lmmc_status_t lmmc_validate_mat(const lmmc_mat_t* x) {
23 return lmmc_mat_descriptor_is_valid(x)
26}
27
28static inline lmmc_status_t lmmc_finalize_nonnegative(lmmc_real_t value, lmmc_real_t* out_value) {
29 lmmc_real_t zero, tol;
30 if (!lmmc_is_finite(&value) || out_value == NULL) {
32 }
33
34 LMMC_REAL_INIT(&zero);
35 LMMC_REAL_INIT(&tol);
36
37 LMMC_REAL_SET_D(&zero, 0.0);
39 LMMC_REAL_NEG(&tol, &tol);
40
41 if (LMMC_REAL_CMP(&value, &zero) < 0) {
42 if (LMMC_REAL_CMP(&value, &tol) > 0) {
43 LMMC_REAL_SET_D(&value, 0.0);
44 } else {
45 LMMC_REAL_CLEAR(&zero);
46 LMMC_REAL_CLEAR(&tol);
48 }
49 }
50
51 LMMC_REAL_SET(out_value, &value);
52
53 LMMC_REAL_CLEAR(&zero);
54 LMMC_REAL_CLEAR(&tol);
55 return LMMC_STATUS_OK;
56}
57
58#ifndef LMMC_SQRT_2PI
59#define LMMC_SQRT_2PI 2.5066282746310002
60#endif
61
62#ifndef LMMC_LOG_SQRT_2PI
63#define LMMC_LOG_SQRT_2PI 0.9189385332046727
64#endif
65
66/* Stable log-factorial/log-gamma corrections and Poisson deviance primitives
67 * shared by discrete and continuous distribution kernels. */
71
76lmmc_status_t lmmc_log_beta(double a, double b, double* out_log_beta);
78 double x, double complement_x, double a, double b, double* out_log_kernel);
79
80/* Regularized incomplete gamma/beta helpers (defined in statistics_internal.c).
81 * Results are written only after a finite, in-range value has converged. */
93
94#endif
LMMC binary real type and arithmetic spelling.
#define LMMC_REAL_CLEAR(x)
释放一个 lmmc_real_t 变量(POD 类型为空操作)。
#define LMMC_REAL_INIT(x)
初始化一个 lmmc_real_t 变量(POD 类型为空操作)。
double lmmc_real_t
Public and internal LMMC real type.
#define LMMC_REAL_SET(dst, src)
将一个 lmmc_real_t 赋值到另一个:*dst = *src 。
#define LMMC_REAL_EPSILON
既有算法的经验近似阈值,非机器 epsilon。
#define LMMC_REAL_CMP(a, b)
比较 *a 与 *b ,返回 -1/0/1 。
#define LMMC_REAL_NEG(res, a)
取相反数,*res = -*a 。
#define LMMC_REAL_SET_D(dst, dbl)
将一个 double 字面量赋值到 lmmc_real_t 。
行优先存储的稠密矩阵。
一维稠密向量。
LMMC 内部使用的公共工具(仅源文件可见).
Private recoverable allocator for persistent LMMC ownership.
数值标量、特殊函数和 FFT 公共接口。
lmmc_status_t lmmc_log_beta(double a, double b, double *out_log_beta)
稳定计算 log B(a,b) 和 log(x^a complement_x^b / B(a,b))。 独立传入补数以保留微小上尾;负无穷表示有效下溢,失败时输出保持不变。
lmmc_real_t lmmc_stirling_error(lmmc_real_t x)
lmmc_status_t regularized_gamma_lower(lmmc_real_t a, lmmc_real_t x, lmmc_real_t *out)
正则化不完全伽马函数下尾 P(a, x) = gamma(a, x) / Gamma(a)。 使用级数展开或连分数展开。
lmmc_status_t regularized_gamma_upper_cf(lmmc_real_t a, lmmc_real_t x, lmmc_real_t *out)
正则化不完全伽马函数上尾 Q(a, x) = 1 - P(a, x)。 使用 Lentz 连分数展开。
lmmc_status_t regularized_beta(lmmc_real_t x, lmmc_real_t a, lmmc_real_t b, lmmc_real_t *out)
lmmc_status_t regularized_beta_upper(lmmc_real_t x, lmmc_real_t a, lmmc_real_t b, lmmc_real_t *out)
计算上尾;1 - x 舍入至端点时仍保留 x。
lmmc_real_t lmmc_log_gamma_stirling_error(lmmc_real_t x)
lmmc_status_t regularized_gamma_upper(lmmc_real_t a, lmmc_real_t x, lmmc_real_t *out)
正则化不完全伽马函数上尾 Q(a, x)。
lmmc_real_t lmmc_deviance_part(lmmc_real_t x, lmmc_real_t mean)
lmmc_status_t lmmc_beta_log_kernel(double x, double complement_x, double a, double b, double *out_log_kernel)
基础统计量与组合数学接口。
lmmc_status_t
LMMC 库统一返回的状态码.
@ LMMC_STATUS_OK
@ LMMC_STATUS_NUMERICAL_FAILURE
@ LMMC_STATUS_INVALID_ARGUMENT