LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
ode.h 文件参考

常微分方程初值问题求解器:Euler、RK4、RK45(自适应)。 更多...

#include <stddef.h>
#include "lmmc/numeric.h"
#include "lmmc/diagnostic.h"
ode.h 的引用(Include)关系图:
此图展示该文件被哪些文件直接或间接地引用了:

浏览该文件的源代码.

结构体

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 中定义.


结构体说明

◆ lmmc_ode_result_t

struct lmmc_ode_result_t

ODE 求解结果统计。

在文件 ode.h 第 46 行定义.

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

失败原因。

◆ lmmc_ode_config_t

struct lmmc_ode_config_t

ODE 求解配置。

在文件 ode.h 第 91 行定义.

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 时用固定状态有限差分.

类型定义说明

◆ lmmc_ode_rhs_t

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用户上下文。
返回
LMMC_STATUS_OK 表示求值成功,其它状态会终止积分。

在文件 ode.h 第 26 行定义.

◆ lmmc_ode_jac_t

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用户上下文。
返回
LMMC_STATUS_OK 表示求值成功。

在文件 ode.h 第 64 行定义.

◆ lmmc_ode_dfdt_t

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用户上下文.
返回
LMMC_STATUS_OK 表示求值成功.

在文件 ode.h 第 81 行定义.

枚举类型说明

◆ 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 配置非法。

在文件 ode.h 第 35 行定义.

函数说明

◆ lmmc_ode_failure_string()

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_ode_default_config()

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输出配置结构体,所有字段将被覆盖写入。
返回
LMMC_STATUS_OK 成功; LMMC_STATUS_INVALID_ARGUMENT 若 problem_dim == 0 或 out_cfg 为 NULL。
副作用
  • 将 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_ode_euler_solve()

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 求值次数、收敛状态等)。
返回
LMMC_STATUS_OK 成功抵达终点; LMMC_STATUS_INVALID_ARGUMENT 若参数非法(dim==0、NULL 指针等); LMMC_STATUS_NUMERICAL_FAILURE 若积分过程中出现 NaN/Inf。
副作用
  • 就地修改 y 数组为终态值。
  • 内部分配临时工作数组(1 个长度为 dim 的缓冲区),函数返回前释放。
  • 回调 rhs 被调用 num_steps 次(每步一次)。
  • 若配置了诊断 sink,则每步发送一个诊断事件。

在文件 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_ode_rk4_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求解统计信息。
返回
LMMC_STATUS_OK 成功抵达终点; LMMC_STATUS_INVALID_ARGUMENT 若参数非法; LMMC_STATUS_NUMERICAL_FAILURE 若积分过程中出现 NaN/Inf。
副作用
  • 就地修改 y 数组为终态值。
  • 内部分配临时工作数组(4 个长度为 dim 的缓冲区用于 k1~k4),函数返回前释放。
  • 回调 rhs 被调用 4 × num_steps 次。
  • 若配置了诊断 sink,则每步发送一个诊断事件。

在文件 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_ode_rk45_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求解统计信息。
返回
LMMC_STATUS_OK 成功抵达终点; LMMC_STATUS_INVALID_ARGUMENT 若参数非法; LMMC_STATUS_NUMERICAL_FAILURE 若积分过程中出现 NaN/Inf; LMMC_STATUS_CONVERGENCE_FAILED 若达到 cfg->max_steps 仍未抵达终点。
副作用
  • 就地修改 y 数组为终态值。
  • 内部分配临时工作数组(6 个长度为 dim 的缓冲区用于 k1~k6 及误差估计),函数返回前释放。
  • 回调 rhs 被调用约 6 × num_steps 次(被拒绝的步也会消耗求值次数)。
  • 若配置了诊断 sink,则每个被接受的步发送一个诊断事件。

在文件 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_ode_implicit_euler_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 )

◆ lmmc_ode_trapezoidal_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 )

◆ lmmc_ode_sdirk4_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_ode_rosenbrock_grk4t_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().

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