|
LMMC
Lamina Mathematic core
|
#include "internal/nonlinear_internal.h"结构体 | |
| struct | bisection_state_t |
函数 | |
| lmmc_status_t | lmmc_bisection_solve (lmmc_scalar_func_t func, void *user_data, lmmc_real_t left, lmmc_real_t right, const lmmc_nonlinear_config_t *cfg, lmmc_nonlinear_result_t *out_result) |
| 二分法求根. | |
| struct bisection_state_t |
在文件 nonlinear_bisection.c 第 3 行定义.
| 成员变量 | ||
|---|---|---|
| lmmc_scalar_func_t | func | |
| void * | user_data | |
| lmmc_nonlinear_config_t | local_cfg | |
| lmmc_nonlinear_result_t * | out_result | |
| lmmc_real_t | left | |
| lmmc_real_t | right | |
| lmmc_real_t | f_left | |
| lmmc_real_t | f_right | |
| size_t | iter | |
| lmmc_status_t lmmc_bisection_solve | ( | lmmc_scalar_func_t | func, |
| void * | user_data, | ||
| lmmc_real_t | left, | ||
| lmmc_real_t | right, | ||
| const lmmc_nonlinear_config_t * | cfg, | ||
| lmmc_nonlinear_result_t * | out_result ) |
二分法求根.
要求 f(left)*f(right) < 0(或端点本身为根)。中点与半区间宽度按 端点符号选择等价公式,不形成可能溢出的 left+right 或 right-left。收敛判据为 |f(mid)| <= abs_tol 或半区间宽度 <= x_tol。
| [in] | func | 标量函数 f(x). |
| [in] | user_data | 传递给 func 的用户上下文. |
| [in] | left | 区间左端点,要求 left < right. |
| [in] | right | 区间右端点. |
| [in] | cfg | 配置参数,可为 NULL(使用默认值). |
| [out] | out_result | 求根结果统计. |
在文件 nonlinear_bisection.c 第 126 行定义.
引用了 lmmc_nonlinear_result_t::converged, lmmc_nonlinear_result_t::failure_reason, bisection_state_t::func, bisection_state_t::iter, bisection_state_t::left, lmmc_bisection_solve(), LMMC_NONLINEAR_FAILURE_MAX_ITER, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, bisection_state_t::local_cfg, lmmc_nonlinear_config_t::max_iter, bisection_state_t::out_result, bisection_state_t::right , 以及 bisection_state_t::user_data.
被这些函数引用 lmmc_bisection_solve().