26 #include "determinant.hpp"
31 casadi_assert(x.
is_square(),
"Dimension mismatch. Matrix must be square, "
32 "but got " + x.
dim() +
" instead.");
38 return "det(" + arg.at(0) +
")";
46 std::vector<std::vector<MX> >& fsens)
const {
48 MX det_X = shared_from_this<MX>();
49 MX trans_inv_X = inv(
X).
T();
50 for (casadi_int d=0; d<fsens.size(); ++d) {
51 fsens[d][0] = det_X *
dot(trans_inv_X, fseed[d][0]);
56 std::vector<std::vector<MX> >& asens)
const {
58 MX det_X = shared_from_this<MX>();
59 MX trans_inv_X = inv(
X).
T();
60 for (casadi_int d=0; d<aseed.size(); ++d) {
61 asens[d][0] += aseed[d][0]*det_X * trans_inv_X;
void eval_mx(const std::vector< MX > &arg, std::vector< MX > &res) const override
Evaluate symbolically (MX)
Determinant(const MX &x)
Constructor.
void ad_reverse(const std::vector< std::vector< MX > > &aseed, std::vector< std::vector< MX > > &asens) const override
Calculate reverse mode directional derivatives.
void ad_forward(const std::vector< std::vector< MX > > &fseed, std::vector< std::vector< MX > > &fsens) const override
Calculate forward mode directional derivatives.
std::string disp(const std::vector< std::string > &arg) const override
Print expression.
std::string dim(bool with_nz=false) const
Get string representation of dimensions.
bool is_square() const
Check if the matrix expression is square.
const MX & dep(casadi_int ind=0) const
dependencies - functions that have to be evaluated before this one
void set_sparsity(const Sparsity &sparsity)
Set the sparsity.
void set_dep(const MX &dep)
Set unary dependency.
MX T() const
Transpose the matrix.
static Sparsity dense(casadi_int nrow, casadi_int ncol=1)
Create a dense rectangular sparsity pattern *.
T dot(const std::vector< T > &a, const std::vector< T > &b)