1#ifndef _DIFFERENTIAL_EQUATIONS_H_
2#define _DIFFERENTIAL_EQUATIONS_H_
13#include "../../Constants.h"
16using RHSFunc = std::function<Eigen::VectorXd(
double t,
17 const Eigen::VectorXd& x,
const Eigen::VectorXd& u)>;
20using JacFunc = std::function<Eigen::MatrixXd(
double t,
21 const Eigen::VectorXd& x,
const Eigen::VectorXd& u)>;
55 const Eigen::VectorXd& x0,
56 const std::function<Eigen::VectorXd(
double t)>& inputFn,
57 double t0,
double tEnd,
double dt_output,
97 const Eigen::VectorXd& x0,
98 const Eigen::VectorXd& u,
116 const Eigen::VectorXd& x0,
117 const Eigen::VectorXd& u,
131 const Eigen::VectorXd& x,
132 const Eigen::VectorXd& u,
145 Eigen::MatrixXd& C, Eigen::MatrixXd& D);
157 Eigen::MatrixXd& C, Eigen::MatrixXd& D,
int num_signals);
168 Eigen::MatrixXd& C, Eigen::MatrixXd& D);
180 Eigen::MatrixXd& C, Eigen::MatrixXd& D,
int num_signals);
195 const Eigen::MatrixXd& A,
const Eigen::MatrixXd& B,
196 const Eigen::MatrixXd& C,
const Eigen::MatrixXd& D,
198 Eigen::MatrixXd& Ad, Eigen::MatrixXd& Bd,
199 Eigen::MatrixXd& Cd, Eigen::MatrixXd& Dd);
std::function< Eigen::VectorXd(double t, const Eigen::VectorXd &x, const Eigen::VectorXd &u)> RHSFunc
Right-hand side of dx/dt = f(t, x, u).
Definition Differential_equations.h:17
CVODEResult integrate(const RHSFunc &rhs, const Eigen::VectorXd &x0, const std::function< Eigen::VectorXd(double t)> &inputFn, double t0, double tEnd, double dt_output, const CVODEConfig &cfg={}, const JacFunc &jac=nullptr)
Integrates an ODE system using CVODE (BDF, stiff).
Definition Differential_equations.cpp:311
void padeDelaySystemMulti2(double tdelay, Eigen::MatrixXd &A, Eigen::MatrixXd &B, Eigen::MatrixXd &C, Eigen::MatrixXd &D, int num_signals)
Second-order Padé delay approximation for multiple independent signals.
void discretizeABCD(const Eigen::MatrixXd &A, const Eigen::MatrixXd &B, const Eigen::MatrixXd &C, const Eigen::MatrixXd &D, double Ts, Eigen::MatrixXd &Ad, Eigen::MatrixXd &Bd, Eigen::MatrixXd &Cd, Eigen::MatrixXd &Dd)
Discretizes a continuous-time state-space model using the Tustin (bilinear) method.
Definition Differential_equations.cpp:449
void padeDelaySystemMulti3(double tdelay, Eigen::MatrixXd &A, Eigen::MatrixXd &B, Eigen::MatrixXd &C, Eigen::MatrixXd &D, int num_signals)
First-order Padé delay approximation for multiple independent signals.
void padeDelaySystem2(double tdelay, Eigen::MatrixXd &A, Eigen::MatrixXd &B, Eigen::MatrixXd &C, Eigen::MatrixXd &D)
Second-order Padé delay approximation (single signal, order 2).
std::function< Eigen::MatrixXd(double t, const Eigen::VectorXd &x, const Eigen::VectorXd &u)> JacFunc
Jacobian J = ∂f/∂x(t, x, u).
Definition Differential_equations.h:21
Eigen::VectorXd findEquilibriumRobust(const RHSFunc &rhs, const Eigen::VectorXd &x0, const Eigen::VectorXd &u, const JacFunc &jac=nullptr)
Robust equilibrium finder with a cascade of solver strategies.
Definition Differential_equations.cpp:226
std::pair< Eigen::MatrixXd, Eigen::MatrixXd > computeJacobians(const RHSFunc &rhs, const Eigen::VectorXd &x, const Eigen::VectorXd &u, double t=0.0, double eps=1e-8)
Computes ∂f/∂x and ∂f/∂u by central finite differences.
Definition Differential_equations.cpp:373
Eigen::VectorXd findEquilibrium(const RHSFunc &rhs, const Eigen::VectorXd &x0, const Eigen::VectorXd &u, const KINSOLConfig &cfg={}, const JacFunc &jac=nullptr)
Finds a steady-state equilibrium dx/dt = 0 for fixed input u.
Definition Differential_equations.cpp:211
KINSOLStrategy
Nonlinear solver strategy for KINSOL equilibrium finding.
Definition Differential_equations.h:64
void padeDelaySystem3(double tdelay, Eigen::MatrixXd &A, Eigen::MatrixXd &B, Eigen::MatrixXd &C, Eigen::MatrixXd &D)
First-order Padé delay approximation (single signal, order 3).
Tolerance and step-size settings for CVODE integration.
Definition Differential_equations.h:26
double atol
Definition Differential_equations.h:28
double rtol
Definition Differential_equations.h:27
double dt_max
Definition Differential_equations.h:29
bool use_analytical_jac
Definition Differential_equations.h:30
Time histories returned by CVODE integration.
Definition Differential_equations.h:36
std::vector< double > time
Definition Differential_equations.h:37
std::vector< Eigen::VectorXd > states
Definition Differential_equations.h:38
Convergence and scaling settings for KINSOL.
Definition Differential_equations.h:74
int max_iter
Definition Differential_equations.h:77
double damping
Definition Differential_equations.h:81
Eigen::VectorXd f_scale
Definition Differential_equations.h:83
double maa
Definition Differential_equations.h:80
Eigen::VectorXd x_scale
Definition Differential_equations.h:82
double ftol
Definition Differential_equations.h:75
KINSOLStrategy strategy
Definition Differential_equations.h:79
bool use_analytical_jac
Definition Differential_equations.h:78
double stol
Definition Differential_equations.h:76