15 if (s->
dfunc != NULL) {
32 if (!lmmc_is_finite(&h) || h <= 0.0) {
43 if (!lmmc_is_finite(&f_plus) || !lmmc_is_finite(&f_minus)) {
54 if (!lmmc_is_finite(derivative)) {
80 if (!lmmc_is_finite(&step) || !lmmc_is_finite(&x_next)) {
87 if (!lmmc_is_finite(&f_next)) {
141 if (s->
func == NULL || s->
out_result == NULL || !lmmc_is_finite(&x0)) {
155 if (!lmmc_is_finite(&s->
fx)) {
#define LMMC_REAL_ADD(res, a, b)
计算 *res = *a + *b 。
#define LMMC_REAL_DIV(res, a, b)
计算 *res = *a / *b 。
#define LMMC_REAL_SUB(res, a, b)
计算 *res = *a - *b 。
double lmmc_real_t
Public and internal LMMC real type.
#define LMMC_REAL_MUL(res, a, b)
计算 *res = *a * *b 。
lmmc_real_t residual_norm
@ LMMC_NONLINEAR_FAILURE_NONE
@ LMMC_NONLINEAR_FAILURE_ZERO_DERIVATIVE
@ LMMC_NONLINEAR_FAILURE_SINGULAR_STEP
@ LMMC_NONLINEAR_FAILURE_MAX_ITER
@ LMMC_NONLINEAR_FAILURE_NUMERICAL_ISSUE
lmmc_real_t min_derivative
lmmc_real_t(*) lmmc_scalar_dfunc_t(lmmc_real_t x, void *user_data)
标量函数导数签名: ,与 lmmc_scalar_func_t 同形参.
lmmc_nonlinear_failure_t failure_reason
lmmc_status_t lmmc_newton_solve(lmmc_scalar_func_t func, lmmc_scalar_dfunc_t dfunc, void *user_data, lmmc_real_t x0, const lmmc_nonlinear_config_t *cfg, lmmc_nonlinear_result_t *out_result)
Newton 法求根.
lmmc_real_t function_value
lmmc_real_t derivative_step
lmmc_real_t(*) lmmc_scalar_func_t(lmmc_real_t x, void *user_data)
标量函数签名: .
void lmmc_nonlinear_do_log(const lmmc_nonlinear_config_t *cfg, size_t iter, lmmc_real_t x, lmmc_real_t f_x)
lmmc_status_t lmmc_nonlinear_x_tolerance(lmmc_real_t x, const lmmc_nonlinear_config_t *cfg, lmmc_real_t *out_x_tol)
void lmmc_nonlinear_reset_result(lmmc_nonlinear_result_t *out_result)
lmmc_status_t lmmc_nonlinear_load_and_validate_config(const lmmc_nonlinear_config_t *cfg, lmmc_nonlinear_config_t *out_cfg)
lmmc_scalar_dfunc_t dfunc
lmmc_nonlinear_result_t * out_result
lmmc_nonlinear_config_t local_cfg
lmmc_status_t
LMMC 库统一返回的状态码.
@ LMMC_STATUS_NUMERICAL_FAILURE
@ LMMC_STATUS_INVALID_ARGUMENT