|
LMMC
Lamina Mathematic core
|
#include "internal/nonlinear_internal.h"结构体 | |
| struct | secant_state_t |
函数 | |
| lmmc_status_t | lmmc_secant_solve (lmmc_scalar_func_t func, void *user_data, lmmc_real_t x0, lmmc_real_t x1, const lmmc_nonlinear_config_t *cfg, lmmc_nonlinear_result_t *out_result) |
| 割线法求根. | |
| struct secant_state_t |
在文件 nonlinear_secant.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 | x0 | |
| lmmc_real_t | x1 | |
| lmmc_real_t | f0 | |
| lmmc_real_t | f1 | |
| size_t | iter | |
| lmmc_status_t lmmc_secant_solve | ( | lmmc_scalar_func_t | func, |
| void * | user_data, | ||
| lmmc_real_t | x0, | ||
| lmmc_real_t | x1, | ||
| const lmmc_nonlinear_config_t * | cfg, | ||
| lmmc_nonlinear_result_t * | out_result ) |
割线法求根.
仅需函数值,不需要导数。使用两个初始点 x0 != x1 逼近;函数值先按 相邻值的最大绝对值缩放,异号函数值使用凸组合计算截距,因此函数值差、 初始点差均不必在原始量级上可表示。非零常数缩放 f 不改变判定。 收敛判据同 Newton 法。
| [in] | func | 标量函数 f(x). |
| [in] | user_data | 传递给 func 的用户上下文. |
| [in] | x0 | 第一个初始点. |
| [in] | x1 | 第二个初始点,须 x0 != x1. |
| [in] | cfg | 配置参数,可为 NULL. |
| [out] | out_result | 求根结果统计. |
在文件 nonlinear_secant.c 第 106 行定义.
引用了 lmmc_nonlinear_config_t::abs_tol, lmmc_nonlinear_result_t::converged, secant_state_t::f0, secant_state_t::f1, lmmc_nonlinear_result_t::failure_reason, secant_state_t::func, lmmc_nonlinear_result_t::function_value, secant_state_t::iter, lmmc_nonlinear_do_log(), LMMC_NONLINEAR_FAILURE_MAX_ITER, LMMC_NONLINEAR_FAILURE_NONE, LMMC_NONLINEAR_FAILURE_NUMERICAL_ISSUE, lmmc_nonlinear_load_and_validate_config(), lmmc_nonlinear_reset_result(), lmmc_secant_solve(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, secant_state_t::local_cfg, lmmc_nonlinear_config_t::max_iter, secant_state_t::out_result, lmmc_nonlinear_result_t::residual_norm, lmmc_nonlinear_result_t::root, secant_state_t::user_data, secant_state_t::x0 , 以及 secant_state_t::x1.
被这些函数引用 lmmc_secant_solve().