|
LMMC
Lamina Mathematic core
|
一元数值积分:梯形、Simpson、Gauss-Legendre、自适应 Simpson。 更多...
结构体 | |
| struct | lmmc_quad_result_t |
| 自适应积分输出结果。 更多... | |
类型定义 | |
| typedef lmmc_real_t(*) | lmmc_quad_func_t(lmmc_real_t x, void *user_data) |
| 被积函数签名 \(f(x)\) 。 | |
函数 | |
| lmmc_status_t | lmmc_quad_trapezoid (lmmc_quad_func_t func, void *user_data, lmmc_real_t a, lmmc_real_t b, size_t n, lmmc_real_t *out_result) |
复合梯形公式:将 \([a,b]\) 等分为 n 段。 | |
| lmmc_status_t | lmmc_quad_simpson (lmmc_quad_func_t func, void *user_data, lmmc_real_t a, lmmc_real_t b, size_t n, lmmc_real_t *out_result) |
复合 Simpson 公式:将 \([a,b]\) 等分为 n 段(要求偶数)。 | |
| lmmc_status_t | lmmc_quad_gauss_legendre (lmmc_quad_func_t func, void *user_data, lmmc_real_t a, lmmc_real_t b, size_t order, lmmc_real_t *out_result) |
| Gauss-Legendre 求积:将 \([a,b]\) 仿射映射到 \([-1,1]\) 后使用正交节点。 | |
| lmmc_status_t | lmmc_quad_adaptive (lmmc_quad_func_t func, void *user_data, lmmc_real_t a, lmmc_real_t b, lmmc_real_t abs_tol, lmmc_real_t rel_tol, size_t max_depth, lmmc_quad_result_t *out_result) |
| 自适应 Simpson 积分,使用最大误差堆控制全局误差。 | |
| lmmc_status_t | lmmc_quad_romberg (lmmc_quad_func_t f, void *ud, lmmc_real_t a, lmmc_real_t b, lmmc_real_t abs_tol, size_t max_iter, lmmc_quad_result_t *out) |
| Romberg 积分(Richardson 外推加速梯形法则)。 | |
| lmmc_status_t | lmmc_quad_tanh_sinh (lmmc_quad_func_t f, void *ud, lmmc_real_t a, lmmc_real_t b, lmmc_real_t abs_tol, size_t max_nodes, lmmc_quad_result_t *out) |
| Tanh-Sinh(双指数)积分,适用于端点奇异性。 | |
| lmmc_status_t | lmmc_quad_gauss_hermite (lmmc_quad_func_t f, void *ud, size_t order, lmmc_real_t *out) |
| Gauss-Hermite 求积:权函数 \(\exp(-x^2)\) ,积分域 \((-\infty, +\infty)\) 。 | |
| lmmc_status_t | lmmc_quad_gauss_laguerre (lmmc_quad_func_t f, void *ud, size_t order, lmmc_real_t *out) |
| Gauss-Laguerre 求积:权函数 \(\exp(-x)\) ,积分域 \([0, +\infty)\) 。 | |
一元数值积分:梯形、Simpson、Gauss-Legendre、自适应 Simpson。
在文件 quadrature.h 中定义.
| struct lmmc_quad_result_t |
自适应积分输出结果。
在文件 quadrature.h 第 24 行定义.
| 成员变量 | ||
|---|---|---|
| lmmc_real_t | value |
积分估计值。 |
| lmmc_real_t | error |
误差估计。 |
| size_t | num_evals |
函数求值次数。 |
| typedef lmmc_real_t(*) lmmc_quad_func_t(lmmc_real_t x, void *user_data) |
被积函数签名 \(f(x)\) 。
在文件 quadrature.h 第 19 行定义.
| lmmc_status_t lmmc_quad_trapezoid | ( | lmmc_quad_func_t | func, |
| void * | user_data, | ||
| lmmc_real_t | a, | ||
| lmmc_real_t | b, | ||
| size_t | n, | ||
| lmmc_real_t * | out_result ) |
复合梯形公式:将 \([a,b]\) 等分为 n 段。
采样点在 [-1,1] 的归一化坐标中生成,并通过溢出安全的中心和半长度 映射到 [a,b];不会直接形成可能溢出的 b-a。
| [in] | func | 被积函数回调。 |
| [in] | user_data | 传递给 func 的用户上下文。 |
| [in] | a | 积分下限。 |
| [in] | b | 积分上限。 |
| [in] | n | 子区间数(>= 1)。 |
| [out] | out_result | 输出积分近似值。 |
func 被调用 n+1 次。在文件 quadrature_fixed.c 第 24 行定义.
引用了 lmmc_quad_center_half_length(), lmmc_quad_trapezoid(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE , 以及 LMMC_STATUS_OK.
被这些函数引用 lmmc_quad_trapezoid().
| lmmc_status_t lmmc_quad_simpson | ( | lmmc_quad_func_t | func, |
| void * | user_data, | ||
| lmmc_real_t | a, | ||
| lmmc_real_t | b, | ||
| size_t | n, | ||
| lmmc_real_t * | out_result ) |
复合 Simpson 公式:将 \([a,b]\) 等分为 n 段(要求偶数)。
采样点先在 [-1,1] 的归一化坐标中生成,再通过溢出安全的中心和半长度 映射到 [a,b];不会直接形成可能溢出的 b-a。
| [in] | func | 被积函数回调。 |
| [in] | user_data | 传递给 func 的用户上下文。 |
| [in] | a | 积分下限。 |
| [in] | b | 积分上限。 |
| [in] | n | 子区间数(必须为偶数且 >= 2)。 |
| [out] | out_result | 输出积分近似值。 |
func 被调用 n+1 次。在文件 quadrature_fixed.c 第 58 行定义.
引用了 lmmc_quad_center_half_length(), lmmc_quad_simpson(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE , 以及 LMMC_STATUS_OK.
被这些函数引用 lmmc_quad_simpson().
| lmmc_status_t lmmc_quad_gauss_legendre | ( | lmmc_quad_func_t | func, |
| void * | user_data, | ||
| lmmc_real_t | a, | ||
| lmmc_real_t | b, | ||
| size_t | order, | ||
| lmmc_real_t * | out_result ) |
Gauss-Legendre 求积:将 \([a,b]\) 仿射映射到 \([-1,1]\) 后使用正交节点。
中心与半长度按端点符号选择等价公式,不直接形成可能溢出的 a+b 或 b-a。对 2*order-1 次以下的多项式精确积分;节点与权重在编译时 预计算(order <= 20)。
| [in] | func | 被积函数回调。 |
| [in] | user_data | 传递给 func 的用户上下文。 |
| [in] | a | 积分下限。 |
| [in] | b | 积分上限。 |
| [in] | order | 正交多项式阶数(节点数),范围 [1, 20]。 |
| [out] | out_result | 输出积分近似值。 |
func 被调用恰好 order 次。在文件 quadrature_gaussian.c 第 272 行定义.
引用了 LMMC_GL_MAX_ORDER, LMMC_GL_MIN_ORDER, lmmc_quad_center_half_length(), lmmc_quad_gauss_legendre(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE , 以及 LMMC_STATUS_OK.
被这些函数引用 lmmc_quad_gauss_legendre().
| lmmc_status_t lmmc_quad_adaptive | ( | lmmc_quad_func_t | func, |
| void * | user_data, | ||
| lmmc_real_t | a, | ||
| lmmc_real_t | b, | ||
| lmmc_real_t | abs_tol, | ||
| lmmc_real_t | rel_tol, | ||
| size_t | max_depth, | ||
| lmmc_quad_result_t * | out_result ) |
自适应 Simpson 积分,使用最大误差堆控制全局误差。
每次二分误差最大的可分叶区间,并复用已经求得的回调样本。 所有叶区间(包括达到深度限制的叶)的校正积分和非负误差估计 分别以补偿求和累加。仅在全局条件 \(sum\_error \le \max(abs\_tol, rel\_tol |sum\_value|)\) 满足时返回成功。误差为 Simpson 外推估计,对不光滑或欠采样函数 不保证严格误差界。 中点和区段半长度使用溢出安全公式。无法继续表示内部采样点的叶 不再细分,但仍保留在全局积分和误差中。
| [in] | func | 被积函数回调。 |
| [in] | user_data | 传递给 func 的用户上下文。 |
| [in] | a | 积分下限。 |
| [in] | b | 积分上限。 |
| [in] | abs_tol | 绝对容差(>= 0)。 |
| [in] | rel_tol | 相对容差(>= 0)。 |
| [in] | max_depth | 最大二分深度(根为 0);工作区按需增长。 |
| [out] | out_result | 包含积分值、误差估计与求值次数。 |
在文件 quadrature_adaptive.c 第 318 行定义.
引用了 lmmc_quad_workspace_t::func, lmmc_quad_workspace_t::heap, lmmc_memory_free(), lmmc_quad_adaptive(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, LMMC_STATUS_WARNING_MAX_DEPTH, lmmc_quad_workspace_t::max_depth , 以及 lmmc_quad_workspace_t::user_data.
被这些函数引用 lmmc_quad_adaptive().
| lmmc_status_t lmmc_quad_romberg | ( | lmmc_quad_func_t | f, |
| void * | ud, | ||
| lmmc_real_t | a, | ||
| lmmc_real_t | b, | ||
| lmmc_real_t | abs_tol, | ||
| size_t | max_iter, | ||
| lmmc_quad_result_t * | out ) |
Romberg 积分(Richardson 外推加速梯形法则)。
通过逐次加密梯形法则并进行 Richardson 外推,快速提升收敛阶。 外推使用增量形式,避免先将有限梯形估计乘以 \(4^j\); 采样点在 [-1,1] 生成后通过溢出安全的中心和半长度映射到 [a,b], 不直接形成可能溢出的 b-a。对光滑被积函数效率极高。
| [in] | f | 被积函数回调。 |
| [in] | ud | 用户数据指针,传递给 f 。 |
| [in] | a | 积分下限。 |
| [in] | b | 积分上限。 |
| [in] | abs_tol | 绝对容差,范围 [1e-15, 1e-1]。 |
| [in] | max_iter | 最大迭代次数(Romberg 表行数),范围 [1, 30]。 |
| [out] | out | 积分结果(值、误差估计、求值次数)。 |
f 被调用次数记录在 out->num_evals 中,最多为 \(2^{max\_iter-1}+1\) 次。在文件 quadrature_extrapolation.c 第 92 行定义.
引用了 lmmc_quad_romberg_state_t::curr, lmmc_quad_result_t::error, lmmc_quad_romberg_state_t::func, lmmc_quad_romberg(), LMMC_STATUS_CONVERGENCE_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_quad_result_t::num_evals, lmmc_quad_romberg_state_t::out, lmmc_quad_romberg_state_t::prev, lmmc_quad_romberg_state_t::user_data , 以及 lmmc_quad_result_t::value.
被这些函数引用 lmmc_quad_romberg().
| lmmc_status_t lmmc_quad_tanh_sinh | ( | lmmc_quad_func_t | f, |
| void * | ud, | ||
| lmmc_real_t | a, | ||
| lmmc_real_t | b, | ||
| lmmc_real_t | abs_tol, | ||
| size_t | max_nodes, | ||
| lmmc_quad_result_t * | out ) |
Tanh-Sinh(双指数)积分,适用于端点奇异性。
利用 \(\tanh(\frac{\pi}{2}\sinh t)\) 变换将端点奇异性映射为指数衰减。 因浮点舍入落到精确端点的节点不调用 f,其极限权重贡献按零处理; 非端点回调的 NaN 或无穷值仍返回数值失败。 对端点处有代数或对数奇异性的被积函数特别有效。
| [in] | f | 被积函数回调。 |
| [in] | ud | 用户数据指针,传递给 f 。 |
| [in] | a | 积分下限。 |
| [in] | b | 积分上限。 |
| [in] | abs_tol | 绝对容差,范围 [1e-15, 1e-1]。 |
| [in] | max_nodes | 实际回调次数的总预算,范围 [1, 1000000]。 |
| [out] | out | 积分结果(值、误差估计、求值次数)。 |
f。 max_nodes 次。在文件 quadrature_tanh_sinh.c 第 136 行定义.
引用了 lmmc_quad_tanh_sinh_state_t::a, lmmc_quad_tanh_sinh_state_t::b, lmmc_quad_tanh_sinh_state_t::center, lmmc_quad_result_t::error, lmmc_quad_tanh_sinh_state_t::func, lmmc_quad_tanh_sinh_state_t::half_length, lmmc_quad_center_half_length(), lmmc_quad_tanh_sinh(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, lmmc_quad_tanh_sinh_state_t::max_nodes, lmmc_quad_result_t::num_evals, lmmc_quad_tanh_sinh_state_t::user_data , 以及 lmmc_quad_result_t::value.
被这些函数引用 lmmc_quad_tanh_sinh().
| lmmc_status_t lmmc_quad_gauss_hermite | ( | lmmc_quad_func_t | f, |
| void * | ud, | ||
| size_t | order, | ||
| lmmc_real_t * | out ) |
Gauss-Hermite 求积:权函数 \(\exp(-x^2)\) ,积分域 \((-\infty, +\infty)\) 。
计算 \(\int_{-\infty}^{+\infty} f(x) \exp(-x^2) dx\) 。
| [in] | f | 被积函数(不含权函数部分)。 |
| [in] | ud | 用户数据指针。 |
| [in] | order | 节点数(阶数),范围 [1, 20]。 |
| [out] | out | 积分结果值。 |
f 被调用恰好 order 次。在文件 quadrature_weighted.c 第 155 行定义.
引用了 lmmc_quad_gauss_hermite().
被这些函数引用 lmmc_quad_gauss_hermite().
| lmmc_status_t lmmc_quad_gauss_laguerre | ( | lmmc_quad_func_t | f, |
| void * | ud, | ||
| size_t | order, | ||
| lmmc_real_t * | out ) |
Gauss-Laguerre 求积:权函数 \(\exp(-x)\) ,积分域 \([0, +\infty)\) 。
计算 \(\int_0^{+\infty} f(x) \exp(-x) dx\) 。
| [in] | f | 被积函数(不含权函数部分)。 |
| [in] | ud | 用户数据指针。 |
| [in] | order | 节点数(阶数),范围 [1, 20]。 |
| [out] | out | 积分结果值。 |
f 被调用恰好 order 次。在文件 quadrature_weighted.c 第 174 行定义.
引用了 LMMC_GL_LAG_MAX_ORDER, lmmc_quad_gauss_laguerre(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE , 以及 LMMC_STATUS_OK.
被这些函数引用 lmmc_quad_gauss_laguerre().