54 std::tuple<SymbolicMatrix, SymbolicMatrix, NumericVector>
57 if (opts.n_nodes < 2) {
61 throw InvalidArgument(
"Pseudospectral: n_states must be >= 1");
64 throw InvalidArgument(
"Pseudospectral: n_controls must be >= 0");
70 scheme_ = opts.scheme;
86 throw RuntimeError(
"Pseudospectral: unsupported PseudospectralScheme value");
89 tau_ = (nodes.array() + 1.0) * 0.5;
100 for (
int k = 0; k <
n_nodes_; ++k) {
121 std::tuple<SymbolicMatrix, SymbolicMatrix, NumericVector>
144 throw RuntimeError(
"Pseudospectral: call setup() before quadrature()");
151 for (
int k = 0; k <
n_nodes_; ++k) {
152 weighted_sum = weighted_sum + weights_(k) * integrand(k);
162 void add_dynamics_constraints_impl() {
165 "Pseudospectral: call set_dynamics() before add_dynamics_constraints()");
170 std::vector<SymbolicVector> f(
static_cast<std::size_t
>(
n_nodes_));
171 for (
int k = 0; k <
n_nodes_; ++k) {
175 f[
static_cast<std::size_t
>(k)] =
dynamics_(x_k, u_k, t_k);
179 for (
int i = 0; i <
n_nodes_; ++i) {
181 for (
int j = 0; j <
n_nodes_; ++j) {
182 Dx_i = Dx_i + D_(i, j) *
states_(j, s);
184 opti_.subject_to(Dx_i == half_dt * f[
static_cast<std::size_t
>(i)](s));
Custom exception hierarchy for Janus framework.
Orthogonal polynomial evaluation, spectral nodes, weights, and differentiation matrices.
Shared CRTP base for trajectory transcription methods.
Input validation failed (e.g., mismatched sizes, invalid parameters).
Definition JanusError.hpp:31
Main optimization environment class.
Definition Opti.hpp:167
const NumericMatrix & diff_matrix() const
Get the spectral differentiation matrix.
Definition Pseudospectral.hpp:132
Pseudospectral(Opti &opti)
Construct with a reference to the optimization environment.
Definition Pseudospectral.hpp:43
const NumericVector & quadrature_weights() const
Get the quadrature weights.
Definition Pseudospectral.hpp:135
std::tuple< SymbolicMatrix, SymbolicMatrix, NumericVector > setup(int n_states, int n_controls, double t0, double tf, const PseudospectralOptions &opts={})
Set up the pseudospectral problem with fixed final time.
Definition Pseudospectral.hpp:55
std::tuple< SymbolicMatrix, SymbolicMatrix, NumericVector > setup(int n_states, int n_controls, double t0, const SymbolicScalar &tf, const PseudospectralOptions &opts={})
Set up the pseudospectral problem with variable final time.
Definition Pseudospectral.hpp:122
SymbolicScalar quadrature(const SymbolicVector &integrand) const
Compute quadrature of an integrand over the time domain.
Definition Pseudospectral.hpp:142
Operation failed at runtime (e.g., CasADi eval with free variables).
Definition JanusError.hpp:41
bool tf_is_variable_
Definition TranscriptionBase.hpp:161
SymbolicMatrix controls_
Definition TranscriptionBase.hpp:169
int n_controls_
Definition TranscriptionBase.hpp:155
int n_controls() const
Definition TranscriptionBase.hpp:136
int n_states_
Definition TranscriptionBase.hpp:154
double t0_
Definition TranscriptionBase.hpp:158
int n_states() const
Definition TranscriptionBase.hpp:133
NumericVector tau_
Definition TranscriptionBase.hpp:167
TranscriptionBase(Opti &opti)
Definition TranscriptionBase.hpp:34
double tf_fixed_
Definition TranscriptionBase.hpp:159
std::function< SymbolicVector(const SymbolicVector &, const SymbolicVector &, const SymbolicScalar &)> dynamics_
Definition TranscriptionBase.hpp:173
SymbolicScalar tf_symbolic_
Definition TranscriptionBase.hpp:160
SymbolicMatrix states_
Definition TranscriptionBase.hpp:168
bool setup_complete_
Definition TranscriptionBase.hpp:163
int n_nodes_
Definition TranscriptionBase.hpp:156
SymbolicVector get_state_at_node(int k) const
Definition TranscriptionBase.hpp:189
SymbolicScalar get_duration() const
Definition TranscriptionBase.hpp:175
SymbolicVector get_control_at_node(int k) const
Definition TranscriptionBase.hpp:200
bool dynamics_constraints_added_
Definition TranscriptionBase.hpp:165
SymbolicScalar get_time_at_node(int k) const
Definition TranscriptionBase.hpp:182
bool dynamics_set_
Definition TranscriptionBase.hpp:164
Opti & opti_
Definition TranscriptionBase.hpp:153
Definition Diagnostics.hpp:19
JanusVector< SymbolicScalar > SymbolicVector
Eigen vector of MX elements.
Definition JanusTypes.hpp:72
NumericVector cgl_weights(int N, const NumericVector &nodes)
CGL (Clenshaw-Curtis) quadrature weights on [-1, 1].
Definition OrthogonalPolynomials.hpp:224
JanusMatrix< NumericScalar > NumericMatrix
Eigen::MatrixXd equivalent.
Definition JanusTypes.hpp:66
NumericVector lgl_weights(int N, const NumericVector &nodes)
LGL quadrature weights.
Definition OrthogonalPolynomials.hpp:200
JanusVector< NumericScalar > NumericVector
Eigen::VectorXd equivalent.
Definition JanusTypes.hpp:67
@ CGL
Chebyshev-Gauss-Lobatto nodes.
Definition BirkhoffPseudospectral.hpp:19
@ LGL
Legendre-Gauss-Lobatto nodes.
Definition BirkhoffPseudospectral.hpp:18
PseudospectralScheme
Available pseudospectral node distributions.
Definition Pseudospectral.hpp:17
@ CGL
Chebyshev-Gauss-Lobatto.
Definition Pseudospectral.hpp:19
@ LGL
Legendre-Gauss-Lobatto.
Definition Pseudospectral.hpp:18
JanusMatrix< SymbolicScalar > SymbolicMatrix
Eigen matrix of MX elements.
Definition JanusTypes.hpp:71
NumericMatrix spectral_diff_matrix(const NumericVector &nodes)
Spectral differentiation matrix using barycentric weights.
Definition OrthogonalPolynomials.hpp:412
NumericVector lgl_nodes(int N)
Compute Legendre-Gauss-Lobatto nodes on [-1, 1].
Definition OrthogonalPolynomials.hpp:138
NumericVector cgl_nodes(int N)
Compute Chebyshev-Gauss-Lobatto nodes on [-1, 1].
Definition OrthogonalPolynomials.hpp:181
casadi::MX SymbolicScalar
CasADi MX symbolic scalar.
Definition JanusTypes.hpp:70
Options for Pseudospectral setup.
Definition Pseudospectral.hpp:23
int n_nodes
Number of collocation nodes (including endpoints).
Definition Pseudospectral.hpp:25
PseudospectralScheme scheme
Definition Pseudospectral.hpp:24
JanusVector< SymbolicScalar > SymbolicVector
Eigen vector of MX elements.
Definition JanusTypes.hpp:72
casadi::MX SymbolicScalar
CasADi MX symbolic scalar.
Definition JanusTypes.hpp:70