|
LMMC
Lamina Mathematic core
|
结构体 | |
| struct | lmmc_minres_state_t |
函数 | |
| lmmc_status_t | lmmc_minres_solve (const lmmc_sparse_mat_t *a, const lmmc_vec_t *b, const lmmc_precond_t *precond, const lmmc_itersolve_config_t *cfg, lmmc_vec_t *x, lmmc_itersolve_result_t *out_result) |
| MINRES 求解对称(可能不定)稀疏系统 A x = b 。 | |
| struct lmmc_minres_state_t |
在文件 itersolve_minres.c 第 4 行定义.
| 成员变量 | ||
|---|---|---|
| lmmc_vec_t | r_prev | |
| lmmc_vec_t | r_curr | |
| lmmc_vec_t | y | |
| lmmc_vec_t | v | |
| lmmc_vec_t | lanczos_tmp | |
| lmmc_vec_t | w_prev2 | |
| lmmc_vec_t | w_prev | |
| lmmc_vec_t | w_next | |
| lmmc_vec_t | true_r | |
| double | beta | |
| double | old_beta | |
| double | beta_next | |
| double | alpha | |
| double | dbar | |
| double | epsln | |
| double | cs | |
| double | sn | |
| double | phibar | |
| double | norm_r | |
| double | threshold | |
| lmmc_status_t lmmc_minres_solve | ( | const lmmc_sparse_mat_t * | a, |
| const lmmc_vec_t * | b, | ||
| const lmmc_precond_t * | precond, | ||
| const lmmc_itersolve_config_t * | cfg, | ||
| lmmc_vec_t * | x, | ||
| lmmc_itersolve_result_t * | out_result ) |
MINRES 求解对称(可能不定)稀疏系统 A x = b 。
当 cfg->apply_op 非 NULL 时使用 matrix-free 模式(此时 a 必须为 NULL)。 若同时提供 a 和 cfg->apply_op ,返回 LMMC_STATUS_INVALID_ARGUMENT 。
precond 表示求解 M*z=r;仅接受 NULL / NONE 或有限严格正的 Jacobi。 ILU0 / ILUT 返回 INVALID_ARGUMENT,非正 Jacobi 返回 NOT_POSITIVE_DEFINITE, 非有限内部数据返回 NUMERICAL_FAILURE,尺寸不符返回 DIMENSION_MISMATCH。
初始及每次完成 x 更新后计算真实残差 r=b-A*x,仅在 ||r||_2 <= abs_tol + rel_tol * ||b||_2 时标记收敛。统计和诊断报告真实范数, num_iter 计完成的解更新次数;达到 max_iter 或基空间耗尽仍返回 OK, converged 为零。错误保留最近成功计算的残差统计,算子错误原样传播。 每步额外执行一次前向算子以检查真实残差。一次分配九个长度 n 的工作向量, 迭代中不分配;restart 被忽略。
在文件 itersolve_minres.c 第 215 行定义.
引用了 lmmc_minres_state_t::lanczos_tmp, lmmc_itersolve_do_log(), lmmc_itersolve_finish(), lmmc_itersolve_initial(), lmmc_itersolve_result_init(), lmmc_itersolve_workspace(), lmmc_memory_free(), lmmc_minres_solve(), LMMC_STATUS_OK, lmmc_minres_state_t::norm_r, lmmc_minres_state_t::r_curr, lmmc_minres_state_t::r_prev, lmmc_vec_t::size, lmmc_minres_state_t::threshold, lmmc_minres_state_t::true_r, lmmc_minres_state_t::v, lmmc_minres_state_t::w_next, lmmc_minres_state_t::w_prev, lmmc_minres_state_t::w_prev2 , 以及 lmmc_minres_state_t::y.
被这些函数引用 lmmc_minres_solve().