LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
quadrature_adaptive.c 文件参考
quadrature_adaptive.c 的引用(Include)关系图:

浏览该文件的源代码.

结构体

struct  lmmc_quad_leaf_t
 叶节点保存五个采样值,每个子节点复用其中三个。 更多...
struct  lmmc_quad_sum_t
struct  lmmc_quad_workspace_t

函数

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_quad_leaf_t

struct lmmc_quad_leaf_t

叶节点保存五个采样值,每个子节点复用其中三个。

在文件 quadrature_adaptive.c 第 5 行定义.

lmmc_quad_leaf_t 的协作图:
成员变量
lmmc_real_t x[5]
lmmc_real_t f[5]
lmmc_real_t value
lmmc_real_t error
size_t depth

◆ lmmc_quad_sum_t

struct lmmc_quad_sum_t

在文件 quadrature_adaptive.c 第 13 行定义.

lmmc_quad_sum_t 的协作图:
成员变量
lmmc_real_t sum
lmmc_real_t correction

◆ lmmc_quad_workspace_t

struct lmmc_quad_workspace_t

在文件 quadrature_adaptive.c 第 18 行定义.

lmmc_quad_workspace_t 的协作图:
成员变量
lmmc_quad_func_t func
void * user_data
lmmc_quad_leaf_t * heap
size_t size
size_t capacity
size_t num_evals
size_t max_depth
lmmc_quad_sum_t value
lmmc_quad_sum_t error

函数说明

◆ lmmc_quad_adaptive()

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包含积分值、误差估计与求值次数。
返回
LMMC_STATUS_OK 全局误差估计满足容差; LMMC_STATUS_WARNING_MAX_DEPTH 容差未满足且所有叶因深度或 浮点表示限制不能继续细分,输出仍为有效的有限估计; LMMC_STATUS_INVALID_ARGUMENT 指针为 NULL、端点非有限或 不满足 a < b、容差非有限或为负; LMMC_STATUS_ALLOCATION_FAILED 堆分配失败或容量/字节计数溢出; LMMC_STATUS_NUMERICAL_FAILURE 回调或中间量非有限、求值计数 溢出,或初始区间不能表示五个不同的 Simpson 采样点。
注解
  • 使用可增长的堆工作区(LMMC 可恢复分配器),无递归栈。
  • 已有样本不重复调用;通常初始 5 次,每次二分新增 4 次求值。
  • 只有 OK 或 WARNING_MAX_DEPTH 一次性写入完整 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().

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