|
LMMC
Lamina Mathematic core
|
#include "optimize_internal.h"结构体 | |
| struct | lmmc_lm_workspace_t |
枚举 | |
| enum | lmmc_lm_trial_t { LMMC_LM_TRIAL_READY , LMMC_LM_TRIAL_RETRY , LMMC_LM_TRIAL_FAILURE } |
函数 | |
| lmmc_status_t | lmmc_minimize_levenberg_marquardt (lmmc_opt_func_t residual, lmmc_opt_jac_t J, void *user_data, lmmc_vec_t *x, const lmmc_optimize_config_t *cfg, lmmc_optimize_result_t *out) |
| Levenberg-Marquardt 非线性最小二乘。 | |
| struct lmmc_lm_workspace_t |
在文件 optimize_lm.c 第 3 行定义.
| 成员变量 | ||
|---|---|---|
| lmmc_opt_workspace_t | arena | |
| lmmc_vec_t | residual | |
| lmmc_vec_t | next_residual | |
| lmmc_vec_t | delta | |
| lmmc_vec_t | gradient | |
| lmmc_vec_t | trial | |
| lmmc_vec_t | rhs | |
| lmmc_mat_t | jacobian | |
| lmmc_mat_t | gram | |
| lmmc_mat_t | augmented | |
| enum lmmc_lm_trial_t |
| 枚举值 | |
|---|---|
| LMMC_LM_TRIAL_READY | |
| LMMC_LM_TRIAL_RETRY | |
| LMMC_LM_TRIAL_FAILURE | |
在文件 optimize_lm.c 第 9 行定义.
| lmmc_status_t lmmc_minimize_levenberg_marquardt | ( | lmmc_opt_func_t | residual, |
| lmmc_opt_jac_t | J, | ||
| void * | user_data, | ||
| lmmc_vec_t * | x, | ||
| const lmmc_optimize_config_t * | cfg, | ||
| lmmc_optimize_result_t * | out ) |
Levenberg-Marquardt 非线性最小二乘。
求解 (JᵀJ + λI)δ = -Jᵀr,自适应调整 λ(接受步减小 λ,拒绝步增大 λ)。 当 ||r||₂ 或 ||Jᵀr||₂ 满足绝对容差或相对于各自初始范数的相对容差时 收敛,因此允许非零残差的驻点。残差和梯度范数必须均为有限数。 final_residual 为输出 x 处的 ||r||₂。
| [in] | residual | 残差函数回调 r(x)。 |
| [in] | J | Jacobian 回调(可为 NULL,使用有限差分)。 |
| [in] | user_data | 传递给回调的用户数据。 |
| [in,out] | x | 初始猜测 / 输出解。 |
| [in] | cfg | 算法配置(lm_damping 指定初始 λ)。 |
| [out] | out | 迭代结果。 |
尝试阻尼步之前,Jacobian 计算可复用试探缓冲区。
在文件 optimize_lm.c 第 141 行定义.
引用了 lmmc_opt_workspace_t::allocation, lmmc_lm_workspace_t::arena, lmmc_optimize_result_t::failure_reason, lmmc_optimize_result_t::final_residual, lmmc_lm_workspace_t::jacobian, lmmc_optimize_config_t::lm_damping, lmmc_memory_free(), lmmc_minimize_levenberg_marquardt(), LMMC_OPT_FAILURE_NUMERICAL_ISSUE, lmmc_optimize_arguments_valid(), lmmc_optimize_emit(), lmmc_optimize_jacobian(), lmmc_optimize_norm(), lmmc_optimize_result_init(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_lm_workspace_t::next_residual, lmmc_optimize_result_t::num_iter, lmmc_lm_workspace_t::residual, lmmc_vec_t::size , 以及 lmmc_lm_workspace_t::trial.
被这些函数引用 lmmc_minimize_levenberg_marquardt().