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

浏览该文件的源代码.

结构体

struct  lmmc_newton_workspace_t

函数

lmmc_status_t lmmc_nleq_newton (lmmc_opt_func_t F, lmmc_opt_jac_t J, void *user_data, lmmc_vec_t *x, const lmmc_optimize_config_t *cfg, lmmc_optimize_result_t *out)
 Newton 法求解非线性方程组 F(x) = 0。

结构体说明

◆ lmmc_newton_workspace_t

struct lmmc_newton_workspace_t

在文件 optimize_newton.c 第 3 行定义.

lmmc_newton_workspace_t 的协作图:
成员变量
lmmc_opt_workspace_t arena
lmmc_vec_t value
lmmc_vec_t delta
lmmc_vec_t rhs
lmmc_mat_t jacobian
lmmc_mat_t lu

函数说明

◆ lmmc_nleq_newton()

lmmc_status_t lmmc_nleq_newton ( lmmc_opt_func_t F,
lmmc_opt_jac_t J,
void * user_data,
lmmc_vec_t * x,
const lmmc_optimize_config_t * cfg,
lmmc_optimize_result_t * out )

Newton 法求解非线性方程组 F(x) = 0。

每步求解 J(x)δ = -F(x) 并通过 LU 分解;若 J 为 NULL,则使用 单边有限差分近似 Jacobian,默认步长大小为 sqrt(LMMC_REAL_EPSILON) * max(|x_j|, 1)。优先使用前向扰动; 当前向点不可表示时自动改用后向扰动,并使用实际可表示步长。 残差范数采用缩放平方和计算,避免有限大残差或小残差因直接平方而 溢出或下溢。

参数
[in]F非线性函数回调。
[in]JJacobian 回调(可为 NULL,使用有限差分)。
[in]user_data传递给回调的用户数据。
[in,out]x初始猜测 / 输出解。
[in]cfg算法配置。
[out]out迭代结果。
返回
::LMMC_STATUS_OK(通过 out->converged 判断是否收敛)。
副作用
  • 就地修改 x->data。
  • 分配并释放临时向量(Fx, delta)和矩阵(Jmat, Jlu)+ pivots 数组。
  • 多次调用 F 和 J 回调。

检查每个迭代结果,包括最后一次允许的更新。

差分计算复用求解阶段暂时空闲的 delta 与 rhs 缓冲区。

在文件 optimize_newton.c 第 47 行定义.

引用了 lmmc_opt_workspace_t::allocation, lmmc_newton_workspace_t::arena, lmmc_newton_workspace_t::delta, lmmc_optimize_result_t::failure_reason, lmmc_optimize_result_t::final_residual, lmmc_newton_workspace_t::jacobian, lmmc_memory_free(), lmmc_nleq_newton(), LMMC_OPT_FAILURE_NONE, LMMC_OPT_FAILURE_NUMERICAL_ISSUE, lmmc_optimize_arguments_valid(), lmmc_optimize_emit(), lmmc_optimize_jacobian(), lmmc_optimize_norm(), lmmc_optimize_result_init(), lmmc_optimize_stop(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_optimize_result_t::num_iter, lmmc_newton_workspace_t::rhs, lmmc_vec_t::size , 以及 lmmc_newton_workspace_t::value.

被这些函数引用 lmmc_nleq_newton().

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