LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
optimize_internal.h
浏览该文件的文档.
1#ifndef LMMC_OPTIMIZE_INTERNAL_H
2#define LMMC_OPTIMIZE_INTERNAL_H
3
4#include <math.h>
5#include <string.h>
6#include "memory_bridge.h"
7#include "internal.h"
9#include "lmmc/optimize.h"
10
12typedef struct {
15 size_t* pivots;
17
19 size_t n, size_t vectors, size_t matrices, size_t extra,
20 int need_pivots, lmmc_opt_workspace_t* work);
23
25 const char* operation, size_t iteration,
26 const lmmc_real_t* values, size_t value_count);
29 lmmc_real_t initial_residual, const lmmc_optimize_config_t* cfg);
31 const lmmc_optimize_config_t* cfg, const lmmc_optimize_result_t* out);
35 size_t iteration, const lmmc_optimize_config_t* cfg,
37
40 lmmc_opt_func_t F, lmmc_opt_jac_t J, void* user_data,
41 const lmmc_vec_t* x, const lmmc_vec_t* Fx, lmmc_mat_t* matrix,
42 lmmc_vec_t* x_pert, lmmc_vec_t* F_pert);
44 lmmc_opt_obj_t obj, void* user_data, const lmmc_vec_t* x,
45 const lmmc_vec_t* direction, lmmc_vec_t* trial,
46 lmmc_real_t* value, lmmc_real_t derivative, int attempts, int subtract);
47
48#endif
double lmmc_real_t
Public and internal LMMC real type.
行优先存储的稠密矩阵。
一维稠密向量。
LMMC 内部使用的公共工具(仅源文件可见).
稠密矩阵直接分解接口(LU、Cholesky、QR)。
Private recoverable allocator for persistent LMMC ownership.
int lmmc_optimize_armijo(lmmc_opt_obj_t obj, void *user_data, const lmmc_vec_t *x, const lmmc_vec_t *direction, lmmc_vec_t *trial, lmmc_real_t *value, lmmc_real_t derivative, int attempts, int subtract)
lmmc_real_t lmmc_optimize_norm(const lmmc_vec_t *v)
计算向量的 L2 范数。
int lmmc_optimize_config_is_valid(const lmmc_optimize_config_t *cfg)
lmmc_mat_t lmmc_opt_workspace_matrix(lmmc_opt_workspace_t *work, size_t n)
lmmc_status_t lmmc_optimize_jacobian(lmmc_opt_func_t F, lmmc_opt_jac_t J, void *user_data, const lmmc_vec_t *x, const lmmc_vec_t *Fx, lmmc_mat_t *matrix, lmmc_vec_t *x_pert, lmmc_vec_t *F_pert)
临时向量由外层求解器一次性分配。
void lmmc_optimize_emit(const lmmc_optimize_config_t *cfg, const char *operation, size_t iteration, const lmmc_real_t *values, size_t value_count)
lmmc_vec_t lmmc_opt_workspace_vector(lmmc_opt_workspace_t *work, size_t n)
int lmmc_optimize_stop(lmmc_real_t norm, lmmc_real_t *initial, size_t iteration, const lmmc_optimize_config_t *cfg, lmmc_optimize_result_t *out)
int lmmc_optimize_has_converged(lmmc_real_t residual, lmmc_real_t initial_residual, const lmmc_optimize_config_t *cfg)
lmmc_status_t lmmc_opt_workspace_create(size_t n, size_t vectors, size_t matrices, size_t extra, int need_pivots, lmmc_opt_workspace_t *work)
void lmmc_optimize_result_init(lmmc_optimize_result_t *out)
int lmmc_optimize_arguments_valid(const lmmc_vec_t *x, const lmmc_optimize_config_t *cfg, const lmmc_optimize_result_t *out)
优化与非线性方程组求解模块。
lmmc_status_t(*) lmmc_opt_func_t(const lmmc_vec_t *x, lmmc_vec_t *F, void *user_data)
非线性函数回调:计算 F(x)。
lmmc_status_t(*) lmmc_opt_jac_t(const lmmc_vec_t *x, lmmc_mat_t *J, void *user_data)
Jacobian 回调:计算 J(x)。
lmmc_real_t(*) lmmc_opt_obj_t(const lmmc_vec_t *x, void *user_data)
目标函数回调:计算标量 f(x)。
优化算法配置参数。
工作区由本次调用拥有,视图仅借用存储,释放由调用方负责。
lmmc_status_t
LMMC 库统一返回的状态码.