|
LMMC
Lamina Mathematic core
|
常微分方程初值问题求解器:Euler、RK4、RK45(自适应)。 更多...
结构体 | |
| struct | lmmc_ode_result_t |
| ODE 求解结果统计。 更多... | |
| struct | lmmc_ode_config_t |
| ODE 求解配置。 更多... | |
类型定义 | |
| typedef lmmc_status_t(*) | lmmc_ode_rhs_t(lmmc_real_t t, const lmmc_real_t *y, lmmc_real_t *y_prime, size_t dim, void *user_data) |
| ODE 右端函数签名 \(y' = f(t, y)\) 。 | |
| typedef lmmc_status_t(*) | lmmc_ode_jac_t(lmmc_real_t t, const lmmc_real_t *y, lmmc_real_t *J, size_t dim, void *user_data) |
| ODE Jacobian 回调签名 \(J = \partial f / \partial y\) 。 | |
| typedef lmmc_status_t(*) | lmmc_ode_dfdt_t(lmmc_real_t t, const lmmc_real_t *y, lmmc_real_t *dfdt, size_t dim, void *user_data) |
| ODE 对时间偏导回调签名 \(\partial f / \partial t\). | |
枚举 | |
| enum | lmmc_ode_failure_t { LMMC_ODE_FAILURE_NONE = 0 , LMMC_ODE_FAILURE_INVALID_DIMENSION = 1 , LMMC_ODE_FAILURE_INVALID_STEP = 2 , LMMC_ODE_FAILURE_MAX_STEPS = 3 , LMMC_ODE_FAILURE_NUMERICAL_ISSUE = 4 , LMMC_ODE_FAILURE_RHS_EVAL_FAILED = 5 , LMMC_ODE_FAILURE_TOLERANCE_INCONSISTENT = 6 } |
| ODE 求解失败原因。 更多... | |
函数 | |
| const char * | lmmc_ode_failure_string (lmmc_ode_failure_t reason) |
| 获取失败原因对应的可读字符串。 | |
| lmmc_status_t | lmmc_ode_default_config (lmmc_real_t t_start, lmmc_real_t t_end, size_t problem_dim, lmmc_ode_config_t *out_cfg) |
| 根据积分区间与维度生成合理的默认求解配置。 | |
| lmmc_status_t | lmmc_ode_euler_solve (lmmc_ode_rhs_t rhs, void *user_data, size_t dim, lmmc_real_t t_start, lmmc_real_t t_end, lmmc_real_t *y, const lmmc_ode_config_t *cfg, lmmc_ode_result_t *out_result) |
| 显式 Euler 法求解常微分方程初值问题 \(y' = f(t,y)\) 。 | |
| lmmc_status_t | lmmc_ode_rk4_solve (lmmc_ode_rhs_t rhs, void *user_data, size_t dim, lmmc_real_t t_start, lmmc_real_t t_end, lmmc_real_t *y, const lmmc_ode_config_t *cfg, lmmc_ode_result_t *out_result) |
| 经典四阶 Runge-Kutta 法求解 \(y' = f(t,y)\) (固定步长)。 | |
| lmmc_status_t | lmmc_ode_rk45_solve (lmmc_ode_rhs_t rhs, void *user_data, size_t dim, lmmc_real_t t_start, lmmc_real_t t_end, lmmc_real_t *y, const lmmc_ode_config_t *cfg, lmmc_ode_result_t *out_result) |
| 自适应 Runge-Kutta-Fehlberg (RK45) 求解器。 | |
| lmmc_status_t | lmmc_ode_implicit_euler_solve (lmmc_ode_rhs_t rhs, void *user_data, size_t dim, lmmc_real_t t_start, lmmc_real_t t_end, lmmc_real_t *y, const lmmc_ode_config_t *cfg, lmmc_ode_result_t *out_result) |
| 隐式 Euler 法求解器(A-稳定,适用于刚性问题)。 | |
| lmmc_status_t | lmmc_ode_trapezoidal_solve (lmmc_ode_rhs_t rhs, void *user_data, size_t dim, lmmc_real_t t_start, lmmc_real_t t_end, lmmc_real_t *y, const lmmc_ode_config_t *cfg, lmmc_ode_result_t *out_result) |
| 梯形法求解器(A-稳定,二阶精度)。 | |
| lmmc_status_t | lmmc_ode_sdirk4_solve (lmmc_ode_rhs_t rhs, void *user_data, size_t dim, lmmc_real_t t_start, lmmc_real_t t_end, lmmc_real_t *y, const lmmc_ode_config_t *cfg, lmmc_ode_result_t *out_result) |
| 4 阶 SDIRK 求解器,采用嵌入误差估计和自适应步长。 非线性阶段按 abs_tol/rel_tol、当前及阶段状态计算 h*残差与 h*修正的加权 RMS。 迭代耗尽时保留最后接受的 y、final_t 和 num_steps,当前步不提交。 容差控制局部误差,不保证全局严格误差界;纯相对容差保持零绝对误差下限。 | |
| lmmc_status_t | lmmc_ode_rosenbrock_grk4t_solve (lmmc_ode_rhs_t rhs, void *user_data, size_t dim, lmmc_real_t t_start, lmmc_real_t t_end, lmmc_real_t *y, const lmmc_ode_config_t *cfg, lmmc_ode_result_t *out_result) |
| Rosenbrock-Wanner GRK4T 求解器(线性隐式,四阶,每步一次 LU)。 | |
常微分方程初值问题求解器:Euler、RK4、RK45(自适应)。
在文件 ode.h 中定义.
| struct lmmc_ode_result_t |
| 成员变量 | ||
|---|---|---|
| int | converged |
是否成功抵达终点。 |
| size_t | num_steps |
实际接受的积分步数。 |
| size_t | num_rhs_evals |
RHS 求值次数。 |
| lmmc_real_t | final_t |
终止时刻。 |
| lmmc_ode_failure_t | failure_reason |
失败原因。 |
| struct lmmc_ode_config_t |
| 成员变量 | ||
|---|---|---|
| lmmc_real_t | initial_step |
初始步长建议。 |
| lmmc_real_t | min_step |
最小允许步长。 |
| lmmc_real_t | max_step |
最大允许步长。 |
| lmmc_real_t | abs_tol |
局部误差绝对容差。 |
| lmmc_real_t | rel_tol |
局部误差相对容差。 |
| size_t | max_steps |
最大允许步数。 |
| lmmc_real_t | adaptive_step_beta |
自适应步长安全系数(典型 0.8~0.9)。 |
| lmmc_diagnostic_sink_t | diagnostics |
统一诊断出口。 |
| lmmc_ode_jac_t | jacobian |
可选 Jacobian 回调(隐式方法使用,NULL 时用有限差分)。 |
| lmmc_ode_dfdt_t | time_derivative |
可选时间偏导回调, NULL 时用固定状态有限差分. |
| typedef lmmc_status_t(*) lmmc_ode_rhs_t(lmmc_real_t t, const lmmc_real_t *y, lmmc_real_t *y_prime, size_t dim, void *user_data) |
ODE 右端函数签名 \(y' = f(t, y)\) 。
| [in] | t | 当前时间。 |
| [in] | y | 当前状态向量,长度 dim 。 |
| [out] | y_prime | 输出导数向量,长度 dim 。 |
| [in] | dim | 状态维度。 |
| [in] | user_data | 用户上下文。 |
| typedef lmmc_status_t(*) lmmc_ode_jac_t(lmmc_real_t t, const lmmc_real_t *y, lmmc_real_t *J, size_t dim, void *user_data) |
ODE Jacobian 回调签名 \(J = \partial f / \partial y\) 。
| [in] | t | 当前时间。 |
| [in] | y | 当前状态向量,长度 dim 。 |
| [out] | J | 输出 Jacobian 矩阵(行优先,dim×dim)。 |
| [in] | dim | 状态维度。 |
| [in] | user_data | 用户上下文。 |
| typedef lmmc_status_t(*) lmmc_ode_dfdt_t(lmmc_real_t t, const lmmc_real_t *y, lmmc_real_t *dfdt, size_t dim, void *user_data) |
ODE 对时间偏导回调签名 \(\partial f / \partial t\).
| [in] | t | 当前时间. |
| [in] | y | 当前状态向量, 长度 dim. |
| [out] | dfdt | 输出时间偏导向量, 长度 dim. |
| [in] | dim | 状态维度. |
| [in] | user_data | 用户上下文. |
| enum lmmc_ode_failure_t |
ODE 求解失败原因。
| 枚举值 | ||
|---|---|---|
| LMMC_ODE_FAILURE_NONE | 0 | 成功。 |
| LMMC_ODE_FAILURE_INVALID_DIMENSION | 1 | 维度参数非法。 |
| LMMC_ODE_FAILURE_INVALID_STEP | 2 | 步长参数非法(如负值)。 |
| LMMC_ODE_FAILURE_MAX_STEPS | 3 | 达到最大步数仍未抵达终点。 |
| LMMC_ODE_FAILURE_NUMERICAL_ISSUE | 4 | 状态变量出现 NaN/Inf 等。 |
| LMMC_ODE_FAILURE_RHS_EVAL_FAILED | 5 | RHS 回调返回非 LMMC_STATUS_OK 。 |
| LMMC_ODE_FAILURE_TOLERANCE_INCONSISTENT | 6 | abs_tol 与 rel_tol 配置非法。 |
| const char * lmmc_ode_failure_string | ( | lmmc_ode_failure_t | reason | ) |
获取失败原因对应的可读字符串。
在文件 ode_common.c 第 8 行定义.
引用了 LMMC_ODE_FAILURE_INVALID_DIMENSION, LMMC_ODE_FAILURE_INVALID_STEP, LMMC_ODE_FAILURE_MAX_STEPS, LMMC_ODE_FAILURE_NONE, LMMC_ODE_FAILURE_NUMERICAL_ISSUE, LMMC_ODE_FAILURE_RHS_EVAL_FAILED, lmmc_ode_failure_string() , 以及 LMMC_ODE_FAILURE_TOLERANCE_INCONSISTENT.
被这些函数引用 lmmc_ode_failure_string().
| lmmc_status_t lmmc_ode_default_config | ( | lmmc_real_t | t_start, |
| lmmc_real_t | t_end, | ||
| size_t | problem_dim, | ||
| lmmc_ode_config_t * | out_cfg ) |
根据积分区间与维度生成合理的默认求解配置。
根据 t_start 与 t_end 的跨度自动设置初始步长、最小/最大步长、 容差及最大步数等参数,适合大多数非刚性问题。
| [in] | t_start | 积分起始时间。 |
| [in] | t_end | 积分终止时间。 |
| [in] | problem_dim | 状态向量维度(>= 1)。 |
| [out] | out_cfg | 输出配置结构体,所有字段将被覆盖写入。 |
out_cfg 指向的结构体全部字段覆盖写入默认值。在文件 ode_common.c 第 48 行定义.
引用了 lmmc_ode_config_t::abs_tol, lmmc_ode_config_t::adaptive_step_beta, lmmc_ode_config_t::diagnostics, lmmc_ode_config_t::initial_step, lmmc_ode_config_t::jacobian, LMMC_DEFAULT_ABS_TOL, LMMC_DEFAULT_REL_TOL, lmmc_ode_default_config(), LMMC_REAL_DIV, LMMC_REAL_MUL, LMMC_REAL_SET, LMMC_REAL_SET_D, LMMC_REAL_SUB, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_ode_config_t::max_step, lmmc_ode_config_t::max_steps, lmmc_ode_config_t::min_step, lmmc_ode_config_t::rel_tol , 以及 lmmc_ode_config_t::time_derivative.
被这些函数引用 lmmc_ode_default_config() , 以及 lmmc_ode_load_and_validate_config().
| lmmc_status_t lmmc_ode_euler_solve | ( | lmmc_ode_rhs_t | rhs, |
| void * | user_data, | ||
| size_t | dim, | ||
| lmmc_real_t | t_start, | ||
| lmmc_real_t | t_end, | ||
| lmmc_real_t * | y, | ||
| const lmmc_ode_config_t * | cfg, | ||
| lmmc_ode_result_t * | out_result ) |
显式 Euler 法求解常微分方程初值问题 \(y' = f(t,y)\) 。
使用固定步长(由 cfg->initial_step 决定)逐步推进,一阶精度。 适用于快速原型验证,不建议用于高精度需求。
| [in] | rhs | 右端函数回调。 |
| [in] | user_data | 传递给 rhs 的用户上下文指针。 |
| [in] | dim | 状态向量维度(>= 1)。 |
| [in] | t_start | 积分起始时间。 |
| [in] | t_end | 积分终止时间。 |
| [in,out] | y | 输入初始条件,输出终态向量,长度 dim 。 |
| [in] | cfg | 求解配置(步长、容差等)。 |
| [out] | out_result | 求解统计信息(步数、RHS 求值次数、收敛状态等)。 |
y 数组为终态值。rhs 被调用 num_steps 次(每步一次)。在文件 ode_explicit.c 第 116 行定义.
引用了 ode_explicit_state_t::dim, lmmc_ode_result_t::failure_reason, ode_explicit_state_t::h, lmmc_ode_config_t::initial_step, ode_explicit_state_t::k, lmmc_memory_alloc(), lmmc_memory_free(), lmmc_ode_do_log(), lmmc_ode_euler_solve(), LMMC_ODE_FAILURE_NUMERICAL_ISSUE, LMMC_REAL_SUB, LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_OK, ode_explicit_state_t::local_cfg, lmmc_ode_config_t::max_step, lmmc_ode_config_t::min_step, ode_explicit_state_t::out_result, ode_explicit_state_t::rhs, ode_explicit_state_t::t, ode_explicit_state_t::user_data, validate_and_init_ode_config(), ode_explicit_state_t::work_bytes , 以及 ode_explicit_state_t::y.
被这些函数引用 lmmc_ode_euler_solve().
| lmmc_status_t lmmc_ode_rk4_solve | ( | lmmc_ode_rhs_t | rhs, |
| void * | user_data, | ||
| size_t | dim, | ||
| lmmc_real_t | t_start, | ||
| lmmc_real_t | t_end, | ||
| lmmc_real_t * | y, | ||
| const lmmc_ode_config_t * | cfg, | ||
| lmmc_ode_result_t * | out_result ) |
经典四阶 Runge-Kutta 法求解 \(y' = f(t,y)\) (固定步长)。
使用固定步长(由 cfg->initial_step 决定),四阶精度。 每步需要 4 次 RHS 求值。
| [in] | rhs | 右端函数回调。 |
| [in] | user_data | 传递给 rhs 的用户上下文指针。 |
| [in] | dim | 状态向量维度(>= 1)。 |
| [in] | t_start | 积分起始时间。 |
| [in] | t_end | 积分终止时间。 |
| [in,out] | y | 输入初始条件,输出终态向量,长度 dim 。 |
| [in] | cfg | 求解配置(步长、容差等)。 |
| [out] | out_result | 求解统计信息。 |
y 数组为终态值。rhs 被调用 4 × num_steps 次。在文件 ode_explicit.c 第 448 行定义.
引用了 ode_explicit_state_t::dim, ode_explicit_state_t::h, lmmc_ode_config_t::initial_step, lmmc_ode_do_log(), lmmc_ode_rk4_solve(), LMMC_REAL_SUB, LMMC_STATUS_OK, ode_explicit_state_t::local_cfg, lmmc_ode_config_t::max_step, lmmc_ode_config_t::min_step, ode_explicit_state_t::out_result, ode_explicit_state_t::rhs, ode_explicit_state_t::t, ode_explicit_state_t::user_data, validate_and_init_ode_config(), ode_explicit_state_t::work_bytes , 以及 ode_explicit_state_t::y.
被这些函数引用 lmmc_ode_rk4_solve().
| lmmc_status_t lmmc_ode_rk45_solve | ( | lmmc_ode_rhs_t | rhs, |
| void * | user_data, | ||
| size_t | dim, | ||
| lmmc_real_t | t_start, | ||
| lmmc_real_t | t_end, | ||
| lmmc_real_t * | y, | ||
| const lmmc_ode_config_t * | cfg, | ||
| lmmc_ode_result_t * | out_result ) |
自适应 Runge-Kutta-Fehlberg (RK45) 求解器。
使用嵌入式 4(5) 阶公式进行局部误差估计,自动调整步长以满足 cfg->abs_tol 和 cfg->rel_tol 指定的精度要求。每步需要 6 次 RHS 求值。 适用于大多数非刚性问题。
| [in] | rhs | 右端函数回调。 |
| [in] | user_data | 传递给 rhs 的用户上下文指针。 |
| [in] | dim | 状态向量维度(>= 1)。 |
| [in] | t_start | 积分起始时间。 |
| [in] | t_end | 积分终止时间。 |
| [in,out] | y | 输入初始条件,输出终态向量,长度 dim 。 |
| [in] | cfg | 求解配置(步长范围、容差、最大步数等)。 |
| [out] | out_result | 求解统计信息。 |
y 数组为终态值。rhs 被调用约 6 × num_steps 次(被拒绝的步也会消耗求值次数)。在文件 ode_explicit.c 第 335 行定义.
引用了 ode_explicit_state_t::dim, ode_explicit_state_t::h, lmmc_ode_config_t::initial_step, lmmc_ode_do_log(), lmmc_ode_rk45_solve(), LMMC_REAL_SUB, LMMC_STATUS_OK, ode_explicit_state_t::local_cfg, lmmc_ode_config_t::max_step, lmmc_ode_config_t::min_step, ode_explicit_state_t::out_result, ode_explicit_state_t::rhs, ode_explicit_state_t::t, ode_explicit_state_t::user_data, validate_and_init_ode_config(), ode_explicit_state_t::work_bytes , 以及 ode_explicit_state_t::y.
被这些函数引用 lmmc_ode_rk45_solve().
| lmmc_status_t lmmc_ode_implicit_euler_solve | ( | lmmc_ode_rhs_t | rhs, |
| void * | user_data, | ||
| size_t | dim, | ||
| lmmc_real_t | t_start, | ||
| lmmc_real_t | t_end, | ||
| lmmc_real_t * | y, | ||
| const lmmc_ode_config_t * | cfg, | ||
| lmmc_ode_result_t * | out_result ) |
隐式 Euler 法求解器(A-稳定,适用于刚性问题)。
在文件 ode_implicit.c 第 124 行定义.
引用了 lmmc_ode_config_t::abs_tol, lmmc_optimize_config_t::abs_tol, ode_implicit_euler_ctx_t::callback_failed, lmmc_vec_t::data, ode_implicit_euler_ctx_t::dim, lmmc_ode_result_t::failure_reason, lmmc_ode_config_t::initial_step, ode_implicit_euler_ctx_t::jac_base_rhs, ode_implicit_euler_ctx_t::jac_cb, ode_implicit_euler_ctx_t::jac_rhs_perturbed, ode_implicit_euler_ctx_t::jac_y_perturbed, lmmc_ode_config_t::jacobian, lmmc_memory_alloc(), lmmc_memory_free(), lmmc_ode_do_log(), LMMC_ODE_FAILURE_INVALID_DIMENSION, LMMC_ODE_FAILURE_NUMERICAL_ISSUE, lmmc_ode_implicit_euler_solve(), lmmc_optimize_default_config(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_optimize_config_t::max_iter, lmmc_ode_config_t::max_step, lmmc_ode_config_t::min_step, lmmc_ode_result_t::num_rhs_evals, lmmc_vec_t::owns_data, lmmc_ode_config_t::rel_tol, lmmc_optimize_config_t::rel_tol, ode_implicit_euler_ctx_t::rhs, ode_implicit_euler_ctx_t::rhs_eval_count, lmmc_vec_t::size, ode_implicit_euler_ctx_t::user_data , 以及 validate_and_init_ode_config().
被这些函数引用 lmmc_ode_implicit_euler_solve().
| lmmc_status_t lmmc_ode_trapezoidal_solve | ( | lmmc_ode_rhs_t | rhs, |
| void * | user_data, | ||
| size_t | dim, | ||
| lmmc_real_t | t_start, | ||
| lmmc_real_t | t_end, | ||
| lmmc_real_t * | y, | ||
| const lmmc_ode_config_t * | cfg, | ||
| lmmc_ode_result_t * | out_result ) |
梯形法求解器(A-稳定,二阶精度)。
在文件 ode_implicit.c 第 308 行定义.
引用了 lmmc_ode_config_t::abs_tol, lmmc_optimize_config_t::abs_tol, ode_trapezoidal_ctx_t::callback_failed, lmmc_vec_t::data, ode_trapezoidal_ctx_t::dim, ode_trapezoidal_ctx_t::f_n, lmmc_ode_result_t::failure_reason, lmmc_ode_config_t::initial_step, ode_trapezoidal_ctx_t::jac_base_rhs, ode_trapezoidal_ctx_t::jac_cb, ode_trapezoidal_ctx_t::jac_rhs_perturbed, ode_trapezoidal_ctx_t::jac_y_perturbed, lmmc_ode_config_t::jacobian, lmmc_memory_alloc(), lmmc_memory_free(), lmmc_ode_do_log(), LMMC_ODE_FAILURE_INVALID_DIMENSION, LMMC_ODE_FAILURE_NUMERICAL_ISSUE, lmmc_ode_trapezoidal_solve(), lmmc_optimize_default_config(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_optimize_config_t::max_iter, lmmc_ode_config_t::max_step, lmmc_ode_config_t::min_step, lmmc_ode_result_t::num_rhs_evals, lmmc_vec_t::owns_data, lmmc_ode_config_t::rel_tol, lmmc_optimize_config_t::rel_tol, ode_trapezoidal_ctx_t::rhs, ode_trapezoidal_ctx_t::rhs_eval_count, lmmc_vec_t::size, ode_trapezoidal_ctx_t::user_data , 以及 validate_and_init_ode_config().
被这些函数引用 lmmc_ode_trapezoidal_solve().
| lmmc_status_t lmmc_ode_sdirk4_solve | ( | lmmc_ode_rhs_t | rhs, |
| void * | user_data, | ||
| size_t | dim, | ||
| lmmc_real_t | t_start, | ||
| lmmc_real_t | t_end, | ||
| lmmc_real_t * | y, | ||
| const lmmc_ode_config_t * | cfg, | ||
| lmmc_ode_result_t * | out_result ) |
4 阶 SDIRK 求解器,采用嵌入误差估计和自适应步长。 非线性阶段按 abs_tol/rel_tol、当前及阶段状态计算 h*残差与 h*修正的加权 RMS。 迭代耗尽时保留最后接受的 y、final_t 和 num_steps,当前步不提交。 容差控制局部误差,不保证全局严格误差界;纯相对容差保持零绝对误差下限。
在文件 ode_singly_diagonally_implicit.c 第 288 行定义.
引用了 ode_sdirk_state_t::delta, ode_sdirk_state_t::dim, ode_sdirk_state_t::error, ode_sdirk_state_t::f_pert, ode_sdirk_state_t::f_stage, lmmc_ode_result_t::failure_reason, ode_sdirk_state_t::h, lmmc_ode_config_t::initial_step, ode_sdirk_state_t::k, lmmc_memory_alloc(), lmmc_ode_do_log(), LMMC_ODE_FAILURE_INVALID_DIMENSION, lmmc_ode_sdirk4_solve(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, ode_sdirk_state_t::local_cfg, ode_sdirk_state_t::matrix, ode_sdirk_state_t::matrix_data, lmmc_ode_config_t::max_step, lmmc_ode_config_t::min_step, ode_sdirk_state_t::out_result, ode_sdirk_state_t::pivots, ode_sdirk_state_t::residual, ode_sdirk_state_t::rhs, ode_sdirk_state_t::rhs_sum, SDIRK_STAGES, SDIRK_VECTORS, ode_sdirk_state_t::smoothed, ode_sdirk_state_t::t, ode_sdirk_state_t::user_data, validate_and_init_ode_config(), ode_sdirk_state_t::work, ode_sdirk_state_t::work_bytes, ode_sdirk_state_t::y, ode_sdirk_state_t::y_hat, ode_sdirk_state_t::y_new, ode_sdirk_state_t::y_pert , 以及 ode_sdirk_state_t::y_stage.
被这些函数引用 lmmc_ode_sdirk4_solve().
| lmmc_status_t lmmc_ode_rosenbrock_grk4t_solve | ( | lmmc_ode_rhs_t | rhs, |
| void * | user_data, | ||
| size_t | dim, | ||
| lmmc_real_t | t_start, | ||
| lmmc_real_t | t_end, | ||
| lmmc_real_t * | y, | ||
| const lmmc_ode_config_t * | cfg, | ||
| lmmc_ode_result_t * | out_result ) |
Rosenbrock-Wanner GRK4T 求解器(线性隐式,四阶,每步一次 LU)。
在文件 ode_rosenbrock.c 第 280 行定义.
引用了 ode_rosenbrock_state_t::dfdt, ode_rosenbrock_state_t::dim, ode_rosenbrock_state_t::error, ode_rosenbrock_state_t::f0, ode_rosenbrock_state_t::f_pert, ode_rosenbrock_state_t::f_stage, lmmc_ode_result_t::failure_reason, ode_rosenbrock_state_t::h, lmmc_ode_config_t::initial_step, ode_rosenbrock_state_t::k, lmmc_memory_alloc(), lmmc_ode_do_log(), LMMC_ODE_FAILURE_INVALID_DIMENSION, lmmc_ode_rosenbrock_grk4t_solve(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, ode_rosenbrock_state_t::local_cfg, ode_rosenbrock_state_t::matrix_data, lmmc_ode_config_t::max_step, lmmc_ode_config_t::min_step, ode_rosenbrock_state_t::out_result, ode_rosenbrock_state_t::pivots, ode_rosenbrock_state_t::rhs, ode_rosenbrock_state_t::rhs_vec, ROS_STAGES, ROS_VECTORS, ode_rosenbrock_state_t::t, ode_rosenbrock_state_t::user_data, validate_and_init_ode_config(), ode_rosenbrock_state_t::W, ode_rosenbrock_state_t::work, ode_rosenbrock_state_t::work_bytes, ode_rosenbrock_state_t::y, ode_rosenbrock_state_t::y_new, ode_rosenbrock_state_t::y_pert , 以及 ode_rosenbrock_state_t::y_stage.
被这些函数引用 lmmc_ode_rosenbrock_grk4t_solve().