|
LMMC
Lamina Mathematic core
|
#include "internal/quadrature_internal.h"结构体 | |
| struct | lmmc_quad_romberg_state_t |
函数 | |
| 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 外推加速梯形法则)。 | |
| struct lmmc_quad_romberg_state_t |
在文件 quadrature_extrapolation.c 第 3 行定义.
| 成员变量 | ||
|---|---|---|
| lmmc_quad_func_t | func | |
| void * | user_data | |
| lmmc_real_t | center | |
| lmmc_real_t | half_length | |
| lmmc_real_t | prev[30] | |
| lmmc_real_t | curr[30] | |
| lmmc_quad_result_t * | out | |
| 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().