56 std::tuple<SymbolicMatrix, SymbolicMatrix, NumericVector>
59 if (opts.n_nodes < 2) {
63 throw InvalidArgument(
"BirkhoffPseudospectral: n_states must be >= 1");
66 throw InvalidArgument(
"BirkhoffPseudospectral: n_controls must be >= 0");
72 scheme_ = opts.scheme;
86 throw RuntimeError(
"BirkhoffPseudospectral: unsupported BirkhoffScheme value");
89 tau_ = (nodes.array() + 1.0) * 0.5;
91 bk_weights_ = B_.row(
n_nodes_ - 1).transpose();
101 for (
int k = 0; k <
n_nodes_; ++k) {
108 for (
int k = 0; k <
n_nodes_; ++k) {
110 V_(k, i) =
opti_.variable(0.0);
129 std::tuple<SymbolicMatrix, SymbolicMatrix, NumericVector>
155 throw RuntimeError(
"BirkhoffPseudospectral: call setup() before quadrature()");
158 throw InvalidArgument(
"BirkhoffPseudospectral: integrand size mismatch");
162 for (
int k = 0; k <
n_nodes_; ++k) {
163 weighted_sum = weighted_sum + bk_weights_(k) * integrand(k);
174 void add_dynamics_constraints_impl() {
177 "BirkhoffPseudospectral: call set_dynamics() before add_dynamics_constraints()");
182 std::vector<SymbolicVector> f(
static_cast<std::size_t
>(
n_nodes_));
183 for (
int k = 0; k <
n_nodes_; ++k) {
184 f[
static_cast<std::size_t
>(k)] =
190 for (
int i = 0; i <
n_nodes_; ++i) {
191 opti_.subject_to(V_(i, s) == half_dt * f[
static_cast<std::size_t
>(i)](s));
195 for (
int i = 1; i <
n_nodes_ - 1; ++i) {
197 for (
int j = 0; j <
n_nodes_; ++j) {
198 Bv_i = Bv_i + B_(i, j) * V_(j, s);
205 for (
int j = 0; j <
n_nodes_; ++j) {
206 wv = wv + bk_weights_(j) * V_(j, s);
Custom exception hierarchy for Janus framework.
Orthogonal polynomial evaluation, spectral nodes, weights, and differentiation matrices.
Shared CRTP base for trajectory transcription methods.
BirkhoffPseudospectral(Opti &opti)
Construct with a reference to the optimization environment.
Definition BirkhoffPseudospectral.hpp:45
std::tuple< SymbolicMatrix, SymbolicMatrix, NumericVector > setup(int n_states, int n_controls, double t0, const SymbolicScalar &tf, const BirkhoffPseudospectralOptions &opts={})
Set up the Birkhoff problem with variable final time.
Definition BirkhoffPseudospectral.hpp:130
SymbolicScalar quadrature(const SymbolicVector &integrand) const
Compute quadrature of an integrand over the time domain.
Definition BirkhoffPseudospectral.hpp:153
const NumericVector & quadrature_weights() const
Get the Birkhoff quadrature weights.
Definition BirkhoffPseudospectral.hpp:143
std::tuple< SymbolicMatrix, SymbolicMatrix, NumericVector > setup(int n_states, int n_controls, double t0, double tf, const BirkhoffPseudospectralOptions &opts={})
Set up the Birkhoff problem with fixed final time.
Definition BirkhoffPseudospectral.hpp:57
const NumericMatrix & integration_matrix() const
Get the Birkhoff integration matrix.
Definition BirkhoffPseudospectral.hpp:140
const SymbolicMatrix & virtual_vars() const
Get the virtual (derivative) decision variables.
Definition BirkhoffPseudospectral.hpp:146
Input validation failed (e.g., mismatched sizes, invalid parameters).
Definition JanusError.hpp:31
Main optimization environment class.
Definition Opti.hpp:167
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
NumericMatrix birkhoff_integration_matrix(const NumericVector &nodes)
Compute Birkhoff integration matrix B^a for the node set.
Definition OrthogonalPolynomials.hpp:354
JanusMatrix< NumericScalar > NumericMatrix
Eigen::MatrixXd equivalent.
Definition JanusTypes.hpp:66
JanusVector< NumericScalar > NumericVector
Eigen::VectorXd equivalent.
Definition JanusTypes.hpp:67
BirkhoffScheme
Available Birkhoff node distributions.
Definition BirkhoffPseudospectral.hpp:17
@ CGL
Chebyshev-Gauss-Lobatto nodes.
Definition BirkhoffPseudospectral.hpp:19
@ LGL
Legendre-Gauss-Lobatto nodes.
Definition BirkhoffPseudospectral.hpp:18
JanusMatrix< SymbolicScalar > SymbolicMatrix
Eigen matrix of MX elements.
Definition JanusTypes.hpp:71
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 BirkhoffPseudospectral setup.
Definition BirkhoffPseudospectral.hpp:23
BirkhoffScheme scheme
Definition BirkhoffPseudospectral.hpp:24
int n_nodes
Number of collocation nodes (including endpoints).
Definition BirkhoffPseudospectral.hpp:25
casadi::MX SymbolicScalar
CasADi MX symbolic scalar.
Definition JanusTypes.hpp:70