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

浏览该文件的源代码.

结构体

struct  lmmc_broyden_workspace_t

函数

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

结构体说明

◆ lmmc_broyden_workspace_t

struct lmmc_broyden_workspace_t

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

lmmc_broyden_workspace_t 的协作图:
成员变量
lmmc_opt_workspace_t arena
lmmc_vec_t value
lmmc_vec_t next_value
lmmc_vec_t delta_x
lmmc_vec_t delta_F
lmmc_vec_t Bdx
lmmc_vec_t rhs
lmmc_mat_t B
lmmc_mat_t lu

函数说明

◆ lmmc_nleq_broyden()

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

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

维护 B ≈ J 的秩一更新:B += (ΔF - B·Δx)·Δxᵀ / (Δxᵀ·Δx)。 初始 B 通过有限差分近似。

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

首次更新前尚无步长差分或下一步残差。

在文件 optimize_broyden.c 第 79 行定义.

引用了 lmmc_opt_workspace_t::allocation, lmmc_broyden_workspace_t::arena, lmmc_broyden_workspace_t::B, lmmc_broyden_workspace_t::delta_x, lmmc_optimize_result_t::failure_reason, lmmc_optimize_result_t::final_residual, lmmc_memory_free(), lmmc_nleq_broyden(), 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_broyden_workspace_t::next_value, lmmc_optimize_result_t::num_iter, lmmc_vec_t::size , 以及 lmmc_broyden_workspace_t::value.

被这些函数引用 lmmc_nleq_broyden().

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