mx.hpp
1 /*
2  * This file is part of CasADi.
3  *
4  * CasADi -- A symbolic framework for dynamic optimization.
5  * Copyright (C) 2010-2023 Joel Andersson, Joris Gillis, Moritz Diehl,
6  * KU Leuven. All rights reserved.
7  * Copyright (C) 2011-2014 Greg Horn
8  *
9  * CasADi is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 3 of the License, or (at your option) any later version.
13  *
14  * CasADi is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with CasADi; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  *
23  */
24 
25 
26 #ifndef CASADI_MX_HPP
27 #define CASADI_MX_HPP
28 #include "shared_object.hpp"
29 #include "matrix_fwd.hpp"
30 #include "sx_fwd.hpp"
31 #include "dm.hpp"
32 #include "generic_matrix.hpp"
33 #include "generic_expression.hpp"
34 #include "generic_type.hpp"
35 #include "printable.hpp"
36 #include <vector>
37 namespace casadi {
38 
42  class MXNode;
43  class Function;
44  class SerializingStream;
45  class DeserializingStream;
46 
47 #ifndef SWIG
48  struct ConvexifyData {
49  std::vector<casadi_int> scc_offset, scc_mapping;
50  Sparsity scc_sp;
51  Sparsity Hrsp;
52  Sparsity Hsp;
54  casadi_int sz_iw;
55  casadi_int sz_w;
56  casadi_int *iw;
57  double* w;
58  };
59 #endif
60 
80  class CASADI_EXPORT MX :
81  public SWIG_IF_ELSE(GenericExpressionCommon, GenericExpression<MX>),
82  public SWIG_IF_ELSE(PrintableCommon, Printable<MX>),
83  public GenericMatrix<MX>,
84  public SharedObject {
85  public:
89  static std::string type_name() {return "MX";}
90 
94  MX();
95 
99  MX(casadi_int nrow, casadi_int ncol);
100 
101 #ifndef SWIG
105  explicit MX(const std::pair<casadi_int, casadi_int>& rc);
106 #endif // SWIG
107 
113  explicit MX(const Sparsity& sp);
114 
118  MX(const Sparsity& sp, const MX& val);
119 
123  MX(const Sparsity& sp, const std::string& fname);
124 
128  MX(double x);
129 
130 #ifndef SWIG
134  MX(const std::vector<double> &x);
135 #endif
136 
140  MX(const Matrix<double> &x);
141 
143 
146  ~MX();
148 
149 #ifndef SWIG
151 
154  static MX create(MXNode* node);
155 
159  static std::vector<MX> createMultipleOutput(MXNode* node);
161 
165  const Sparsity& sparsity() const;
166 
169  typedef MX ScalarType;
171 
173  typedef GenericMatrix<MX> B;
174 
176  using B::horzsplit;
177  using B::diagsplit;
178  using B::vertsplit;
179  using B::mtimes;
180  using B::repmat;
181 #endif // SWIG
182 
184  bool __nonzero__() const;
185 
189  Sparsity get_sparsity() const { return sparsity();}
190 
196  void erase(const std::vector<casadi_int>& rr, const std::vector<casadi_int>& cc,
197  bool ind1=false);
198 
204  void erase(const std::vector<casadi_int>& rr, bool ind1=false);
205 
211  void enlarge(casadi_int nrow, casadi_int ncol,
212  const std::vector<casadi_int>& rr, const std::vector<casadi_int>& cc,
213  bool ind1=false);
214 
215  MX operator-() const;
216 
217 #ifndef SWIG
220 
223  MXNode* operator->();
224 
228  const MXNode* operator->() const;
231 #endif // SWIG
232 
236  MX dep(casadi_int ch=0) const;
237 
241  casadi_int n_out() const;
242 
246  MX get_output(casadi_int oind) const;
247 
251  casadi_int n_dep() const;
252 
254  std::string name() const;
255 
257  explicit operator double() const;
258 
260  explicit operator Matrix<double>() const;
261 
263  bool is_symbolic() const;
264 
266  bool is_constant() const;
267 
269  bool is_call() const;
270 
273 
275  bool is_output() const;
276 
280  bool has_output() const;
281 
283  casadi_int which_output() const;
284 
286  bool is_op(casadi_int op) const;
287 
289  bool is_multiplication() const;
290 
292  bool is_commutative() const;
293 
295  bool is_norm() const;
296 
302  bool is_valid_input() const;
303 
307  casadi_int n_primitives() const;
308 
312  std::vector<MX> primitives() const;
313 
315 
318  std::vector<MX> split_primitives(const MX& x) const;
319  std::vector<SX> split_primitives(const SX& x) const;
320  std::vector<DM> split_primitives(const DM& x) const;
322 
324 
327  MX join_primitives(const std::vector<MX>& v) const;
328  SX join_primitives(const std::vector<SX>& v) const;
329  DM join_primitives(const std::vector<DM>& v) const;
331 
333 
341  bool has_duplicates() const;
342 
346  void reset_input() const;
348 
352  bool is_eye() const;
353 
357  bool is_zero() const;
358 
362  bool is_one() const;
363 
367  bool is_minus_one() const;
368 
372  bool is_transpose() const;
373 
375  bool is_regular() const;
376 
378  bool is_binary() const;
379 
381  bool is_unary() const;
382 
384  casadi_int op() const;
385 
387  Dict info() const;
388 
392  void serialize(SerializingStream& s) const;
393 
398 
401  casadi_int get_temp() const;
402 
404  void set_temp(casadi_int t) const;
406 
408 
411  static MX binary(casadi_int op, const MX &x, const MX &y);
412  static MX unary(casadi_int op, const MX &x);
414 
416 
419  static MX inf(const Sparsity& sp);
420  static MX inf(casadi_int nrow=1, casadi_int ncol=1);
421  static MX inf(const std::pair<casadi_int, casadi_int>& rc);
423 
425 
428  static MX nan(const Sparsity& sp);
429  static MX nan(casadi_int nrow=1, casadi_int ncol=1);
430  static MX nan(const std::pair<casadi_int, casadi_int>& rc);
432 
436  static MX eye(casadi_int n);
437 
438 #ifndef SWIG
440  MXNode* get() const;
441 #endif // SWIG
442 
445  void get(MX& SWIG_OUTPUT(m), bool ind1, const Slice& rr) const;
446  void get(MX& SWIG_OUTPUT(m), bool ind1, const Matrix<casadi_int>& rr) const;
447  void get(MX& SWIG_OUTPUT(m), bool ind1, const Sparsity& sp) const;
448  void get(MX& SWIG_OUTPUT(m), bool ind1, const MX& rr) const;
449  void get(MX& SWIG_OUTPUT(m), bool ind1, const casadi_int rr) const {
450  get(m, ind1, Matrix<casadi_int>(rr));
451  }
453 
456  void get(MX& SWIG_OUTPUT(m), bool ind1, const Slice& rr, const Slice& cc) const;
457  void get(MX& SWIG_OUTPUT(m), bool ind1, const Slice& rr, const Matrix<casadi_int>& cc) const;
458  void get(MX& SWIG_OUTPUT(m), bool ind1, const Slice& rr, casadi_int cc) const {
459  get(m, ind1, rr, Matrix<casadi_int>(cc));
460  }
461  void get(MX& SWIG_OUTPUT(m), bool ind1, const Matrix<casadi_int>& rr, const Slice& cc) const;
462  void get(MX& SWIG_OUTPUT(m), bool ind1, casadi_int rr, const Slice& cc) const {
463  get(m, ind1, Matrix<casadi_int>(rr), cc);
464  }
465  void get(MX& SWIG_OUTPUT(m), bool ind1, const Matrix<casadi_int>& rr,
466  const Matrix<casadi_int>& cc) const;
467  void get(MX& SWIG_OUTPUT(m), bool ind1, casadi_int rr,
468  casadi_int cc) const {
469  get(m, ind1, Matrix<casadi_int>(rr), Matrix<casadi_int>(cc));
470  }
471  void get(MX& SWIG_OUTPUT(m), bool ind1, const MX& rr, const Slice& cc) const;
472  void get(MX& SWIG_OUTPUT(m), bool ind1, const Slice& rr, const MX& cc) const;
473  void get(MX& SWIG_OUTPUT(m), bool ind1, const MX& rr, const MX& cc) const;
475 
478  void set(const MX& m, bool ind1, const Slice& rr);
479  void set(const MX& m, bool ind1, const Matrix<casadi_int>& rr);
480  void set(const MX& m, bool ind1, const Sparsity& sp);
482 
485  void set(const MX& m, bool ind1, const Slice& rr, const Slice& cc);
486  void set(const MX& m, bool ind1, const Slice& rr, const Matrix<casadi_int>& cc);
487  void set(const MX& m, bool ind1, const Matrix<casadi_int>& rr, const Slice& cc);
488  void set(const MX& m, bool ind1, const Matrix<casadi_int>& rr, const Matrix<casadi_int>& cc);
490 
493  void get_nz(MX& SWIG_OUTPUT(m), bool ind1, const Slice& kk) const;
494  void get_nz(MX& SWIG_OUTPUT(m), bool ind1, const Matrix<casadi_int>& kk) const;
495  void get_nz(MX& SWIG_OUTPUT(m), bool ind1, const MX& kk) const;
496  void get_nz(MX& SWIG_OUTPUT(m), bool ind1, casadi_int kk) const {
497  get_nz(m, ind1, Matrix<casadi_int>(kk));
498  }
499  void get_nz(MX& SWIG_OUTPUT(m), bool ind1, const MX& inner, const Slice& outer) const;
500  void get_nz(MX& SWIG_OUTPUT(m), bool ind1, const Slice& inner, const MX& outer) const;
501  void get_nz(MX& SWIG_OUTPUT(m), bool ind1, const MX& inner, const MX& outer) const;
503 
506  void set_nz(const MX& m, bool ind1, const Slice& kk);
507  void set_nz(const MX& m, bool ind1, const Matrix<casadi_int>& kk);
508  void set_nz(const MX& m, bool ind1, const MX& kk);
509  void set_nz(const MX& m, bool ind1, casadi_int kk) { set_nz(m, ind1, Matrix<casadi_int>(kk)); }
511 
513 
527  static MX einstein(const MX& A, const MX& B, const MX& C,
528  const std::vector<casadi_int>& dim_a, const std::vector<casadi_int>& dim_b,
529  const std::vector<casadi_int>& dim_c,
530  const std::vector<casadi_int>& a, const std::vector<casadi_int>& b,
531  const std::vector<casadi_int>& c);
532 
533  static MX einstein(const MX& A, const MX& B,
534  const std::vector<casadi_int>& dim_a, const std::vector<casadi_int>& dim_b,
535  const std::vector<casadi_int>& dim_c,
536  const std::vector<casadi_int>& a, const std::vector<casadi_int>& b,
537  const std::vector<casadi_int>& c);
539 
540 #ifndef SWIG
544  static bool is_equal(const MX& x, const MX& y, casadi_int depth=0);
545  static MX mmin(const MX &x);
546  static MX mmax(const MX &x);
548 
551  static MX horzcat(const std::vector<MX>& x);
552  static MX diagcat(const std::vector<MX>& x);
553  static MX vertcat(const std::vector<MX>& x);
554  static std::vector<MX> horzsplit(const MX& x, const std::vector<casadi_int>& offset);
555  static std::vector<MX> diagsplit(const MX& x, const std::vector<casadi_int>& offset1,
556  const std::vector<casadi_int>& offset2);
557  static std::vector<MX> vertsplit(const MX& x, const std::vector<casadi_int>& offset);
558  static MX blockcat(const std::vector< std::vector<MX > > &v);
559  static MX mtimes(const MX& x, const MX& y);
560  static MX mac(const MX& x, const MX& y, const MX& z);
561  static MX reshape(const MX& x, casadi_int nrow, casadi_int ncol);
562  static MX reshape(const MX& x, const Sparsity& sp);
563  static MX sparsity_cast(const MX& x, const Sparsity& sp);
564  static MX kron(const MX& x, const MX& b);
565  static MX repmat(const MX& x, casadi_int n, casadi_int m=1);
567 
570  static MX jacobian(const MX& f, const MX& x, const Dict& opts = Dict());
571  static MX hessian(const MX& f, const MX& x, const Dict& opts = Dict());
572  static MX hessian(const MX& f, const MX& x, MX& g, const Dict& opts = Dict());
573  static std::vector<std::vector<MX> >
574  forward(const std::vector<MX> &ex,
575  const std::vector<MX> &arg,
576  const std::vector<std::vector<MX> > &v,
577  const Dict& opts = Dict());
578  static std::vector<std::vector<MX> >
579  reverse(const std::vector<MX> &ex,
580  const std::vector<MX> &arg,
581  const std::vector<std::vector<MX> > &v,
582  const Dict& opts = Dict());
583  static std::vector<bool> which_depends(const MX &expr, const MX &var,
584  casadi_int order=1, bool tr=false);
585  static Sparsity jacobian_sparsity(const MX& f, const MX& x);
586  static MX substitute(const MX& ex, const MX& v, const MX& vdef);
587  static std::vector<MX> substitute(const std::vector<MX> &ex,
588  const std::vector<MX> &v,
589  const std::vector<MX> &vdef);
590  static void substitute_inplace(const std::vector<MX>& v,
591  std::vector<MX>& vdef,
592  std::vector<MX>& ex, bool reverse);
593  static MX solve(const MX& a, const MX& b);
594  static MX solve(const MX& a, const MX& b, const std::string& lsolver,
595  const Dict& dict = Dict());
596  static MX inv_minor(const MX& A);
597  static MX inv_node(const MX& A);
598  static MX inv(const MX& A, const std::string& lsolver="qr", const Dict& dict = Dict());
599  static MX pinv(const MX& A, const std::string& lsolver="qr",
600  const Dict& dict = Dict());
601  static MX expm_const(const MX& A, const MX& t);
602  static MX expm(const MX& A);
603  static casadi_int n_nodes(const MX& x);
604  static std::string print_operator(const MX& x, const std::vector<std::string>& args);
605  static void extract(std::vector<MX>& ex, std::vector<MX>& v,
606  std::vector<MX>& vdef, const Dict& opts = Dict());
607  static void shared(std::vector<MX>& ex, std::vector<MX>& v,
608  std::vector<MX>& vdef, const std::string& v_prefix, const std::string& v_suffix);
609  static MX if_else(const MX& cond, const MX& if_true,
610  const MX& if_false, bool short_circuit=false);
611  static MX conditional(const MX& ind, const std::vector<MX> &x, const MX& x_default,
612  bool short_circuit=false);
613  static bool depends_on(const MX& x, const MX& arg);
614  static MX simplify(const MX& x);
615  static MX dot(const MX& x, const MX& y);
616  static MX mrdivide(const MX& a, const MX& b);
617  static MX mldivide(const MX& a, const MX& b);
618  static MX norm_2(const MX& x);
619  static MX norm_fro(const MX& x);
620  static MX norm_1(const MX& x);
621  static MX norm_inf(const MX& x);
622  static MX unite(const MX& A, const MX& B);
623  static MX trace(const MX& x);
624  static MX diag(const MX& x);
625  static MX sum2(const MX& x);
626  static MX sum1(const MX& x);
627  static MX polyval(const MX& p, const MX& x);
628  static MX det(const MX& x);
629  static std::vector<MX> symvar(const MX& x);
630  static MX nullspace(const MX& A);
631  static MX repsum(const MX& x, casadi_int n, casadi_int m=1);
632  static MX densify(const MX& x, const MX& val=0);
633  static MX _bilin(const MX& A, const MX& x, const MX& y);
634  static MX _rank1(const MX& A, const MX& alpha, const MX& x, const MX& y);
635  static MX project(const MX& x, const Sparsity& sp, bool intersect=false);
636  static MX cumsum(const MX &x, casadi_int axis=-1);
637  static MX _logsumexp(const MX& x);
638  static std::vector<MX> cse(const std::vector<MX>& e);
640 
643  static MX find(const MX& x);
644  static MX low(const MX& v, const MX& p, const Dict& options = Dict());
645  static MX graph_substitute(const MX& x, const std::vector<MX> &v,
646  const std::vector<MX> &vdef);
647  static std::vector<MX> graph_substitute(const std::vector<MX> &ex,
648  const std::vector<MX> &expr,
649  const std::vector<MX> &exprs);
650  static MX matrix_expand(const MX& e, const std::vector<MX> &boundary,
651  const Dict& options);
652  static std::vector<MX> matrix_expand(const std::vector<MX>& e,
653  const std::vector<MX>& boundary,
654  const Dict& options);
655  static MX lift(const MX& x, const MX& x_guess);
656  static DM evalf(const MX& m);
657  static MX bspline(const MX& x,
658  const DM& coeffs,
659  const std::vector< std::vector<double> >& knots,
660  const std::vector<casadi_int>& degree,
661  casadi_int m,
662  const Dict& opts = Dict());
663  static MX bspline(const MX& x, const MX& coeffs,
664  const std::vector< std::vector<double> >& knots,
665  const std::vector<casadi_int>& degree,
666  casadi_int m,
667  const Dict& opts = Dict());
668  static MX convexify(const MX& H, const Dict& opts = Dict());
669  static MX stop_diff(const MX& expr, casadi_int order);
670  static MX stop_diff(const MX& expr, const MX& var, casadi_int order);
671  static std::vector<MX> difference(const std::vector<MX>& a, const std::vector<MX>& b);
674 
675 #endif // SWIG
676 
677  static DM bspline_dual(const std::vector<double>& x,
678  const std::vector< std::vector<double> >& knots,
679  const std::vector<casadi_int>& degree,
680  const Dict& opts = Dict());
681 
689  static MX interpn_linear(const std::vector<MX>& x, const MX& v, const std::vector<MX>& xq,
690  const Dict& opts=Dict());
691 
692  MX printme(const MX& b) const;
693 
694 #if !defined(SWIG) || defined(DOXYGEN)
704  inline friend MX find(const MX& x) {
705  return MX::find(x);
706  }
707 
713  inline friend MX low(const MX& v, const MX& p, const Dict& options=Dict()) {
714  return MX::low(v, p, options);
715  }
716 
722  inline friend MX graph_substitute(const MX& ex, const std::vector<MX> &v,
723  const std::vector<MX> &vdef) {
724  return MX::graph_substitute(ex, v, vdef);
725  }
726 
733  inline friend std::vector<MX>
734  graph_substitute(const std::vector<MX> &ex,
735  const std::vector<MX> &v,
736  const std::vector<MX> &vdef) {
737  return MX::graph_substitute(ex, v, vdef);
738  }
739 
746  inline friend MX
747  matrix_expand(const MX& e, const std::vector<MX> &boundary = std::vector<MX>(),
748  const Dict& options = Dict()) {
749  return MX::matrix_expand(e, boundary, options);
750  }
751 
758  inline friend std::vector<MX>
759  matrix_expand(const std::vector<MX>& e,
760  const std::vector<MX> &boundary = std::vector<MX>(),
761  const Dict& options = Dict()) {
762  return MX::matrix_expand(e, boundary, options);
763  }
764 
765 
766  inline friend MX bspline(const MX& x,
767  const DM& coeffs,
768  const std::vector< std::vector<double> >& knots,
769  const std::vector<casadi_int>& degree,
770  casadi_int m,
771  const Dict& opts = Dict()) {
772  return MX::bspline(x, coeffs, knots, degree, m, opts);
773  }
774 
775  inline friend MX bspline(const MX& x, const MX& coeffs,
776  const std::vector< std::vector<double> >& knots,
777  const std::vector<casadi_int>& degree,
778  casadi_int m,
779  const Dict& opts = Dict()) {
780  return MX::bspline(x, coeffs, knots, degree, m, opts);
781  }
782 
783  inline friend DM bspline_dual(const std::vector<double>& x,
784  const std::vector< std::vector<double> >& knots,
785  const std::vector<casadi_int>& degree,
786  const Dict& opts = Dict()) {
787  return MX::bspline_dual(x, knots, degree, opts);
788  }
789 
790  inline friend MX convexify(const MX& H,
791  const Dict& opts = Dict()) {
792  return MX::convexify(H, opts);
793  }
794 
800  inline friend MX lift(const MX& x, const MX& x_guess) {
801  return MX::lift(x, x_guess);
802  }
803 
807  inline friend MX inv_node(const MX& x) {
808  return MX::inv_node(x);
809  }
810 
816  inline friend DM evalf(const MX& expr) {
817  return MX::evalf(expr);
818  }
819 
823  inline friend MX stop_diff(const MX& expr, casadi_int order) {
824  return MX::stop_diff(expr, order);
825  }
826 
832  inline friend MX no_grad(const MX& expr) {
833  return MX::stop_diff(expr, 1);
834  }
835 
841  inline friend MX no_hess(const MX& expr) {
842  return MX::stop_diff(expr, 2);
843  }
844 
845 
849  inline friend MX stop_diff(const MX& expr, const MX& var, casadi_int order) {
850  return MX::stop_diff(expr, var, order);
851  }
852 
854  inline friend std::vector<MX> difference(const std::vector<MX>& a, const std::vector<MX>& b) {
855  return MX::difference(a, b);
856  }
857 
859 #endif // SWIG
860 
866  MX attachAssert(const MX& y, const std::string& fail_message="") const;
867 
873  MX monitor(const std::string& comment) const;
874 
876  MX T() const;
877 
882 
886  static void set_max_depth(casadi_int eq_depth=1);
887 
891  static casadi_int get_max_depth();
892 
894  static bool test_cast(const SharedObjectInternal* ptr);
895 
899  static std::vector<MX> get_input(const Function& f);
900 
904  static std::vector<MX> get_free(const Function& f);
905 
907  typedef std::map<std::string, MX> MXDict;
908 
912  void eval_mx(const std::vector<MX>& arg, std::vector<MX>& SWIG_OUTPUT(res)) const;
913 
914 #ifndef SWIG
916 
919  void ad_forward(const std::vector<std::vector<MX> >& fseed,
920  std::vector<std::vector<MX> >& fsens) const;
921  void ad_reverse(const std::vector<std::vector<MX> >& aseed,
922  std::vector<std::vector<MX> >& asens) const;
924 
926  MX(const Sparsity& sp, double val, bool dummy);
927 
928  // Create matrix symbolic primitive
929  static MX _sym(const std::string& name, const Sparsity& sp);
930 
931  private:
932 
934  MX(MXNode* node, bool dummy1, bool dummy2, bool dummy3, bool dummy4);
935 
936  // Depth when checking equalities
937  static casadi_int eq_depth_;
938 
939 #endif // SWIG
940  };
941 
942 
945  typedef std::vector<MX> MXVector;
946  typedef std::initializer_list<MX> MXIList;
947  typedef std::vector<MXVector> MXVectorVector;
948  typedef std::map<std::string, MX> MXDict;
950 
951 } // namespace casadi
952 
953 #endif // CASADI_MX_HPP
Helper class for Serialization.
Function object.
Definition: function.hpp:60
Matrix base class.
Node class for MX objects.
Definition: mx_node.hpp:50
MX - Matrix expression.
Definition: mx.hpp:84
void get_nz(MX &m, bool ind1, casadi_int kk) const
Definition: mx.hpp:496
void erase(const std::vector< casadi_int > &rr, const std::vector< casadi_int > &cc, bool ind1=false)
Erase a submatrix (leaving structural zeros in its place)
static std::vector< MX > get_free(const Function &f)
Get free variables.
bool is_multiplication() const
Check if multiplication.
bool is_minus_one() const
check if zero (note that false negative answers are possible)
bool is_valid_input() const
Check if matrix can be used to define function inputs.
static bool test_cast(const SharedObjectInternal *ptr)
Check if a particular cast is allowed.
bool is_eye() const
check if identity
void get_nz(MX &m, bool ind1, const Slice &inner, const MX &outer) const
static casadi_int get_max_depth()
Get the depth to which equalities are being checked for simplifications.
static MX nan(const Sparsity &sp)
create a matrix with all nan
std::vector< MX > split_primitives(const MX &x) const
Split up an expression along symbolic primitives.
MX operator-() const
bool is_output() const
Check if evaluation output.
casadi_int n_out() const
Number of outputs.
void get(MX &m, bool ind1, const Sparsity &sp) const
void erase(const std::vector< casadi_int > &rr, bool ind1=false)
Erase a submatrix (leaving structural zeros in its place)
static MX deserialize(DeserializingStream &s)
Deserialize with type disambiguation.
static MX eye(casadi_int n)
Identity matrix.
casadi_int n_dep() const
Get the number of dependencies of a binary SXElem.
void get(MX &m, bool ind1, const MX &rr, const MX &cc) const
casadi_int n_primitives() const
Get the number of primitives for MXFunction inputs/outputs.
void set(const MX &m, bool ind1, const Matrix< casadi_int > &rr)
bool __nonzero__() const
Returns the truth value of an MX expression.
void get(MX &m, bool ind1, const MX &rr) const
static MX inf(casadi_int nrow=1, casadi_int ncol=1)
create a matrix with all inf
bool is_call() const
Check if evaluation.
std::string name() const
Get the name.
bool has_output() const
Check if a multiple output node.
void get(MX &m, bool ind1, const MX &rr, const Slice &cc) const
MX(const Sparsity &sp, const std::string &fname)
Construct matrix with a given sparsity and a file with nonzeros.
void set(const MX &m, bool ind1, const Slice &rr, const Slice &cc)
bool is_constant() const
Check if constant.
Sparsity get_sparsity() const
Get an owning reference to the sparsity pattern.
Definition: mx.hpp:189
static MX nan(const std::pair< casadi_int, casadi_int > &rc)
create a matrix with all nan
bool is_commutative() const
Check if commutative operation.
MX(const Sparsity &sp, const MX &val)
Construct matrix with a given sparsity and nonzeros.
static MX einstein(const MX &A, const MX &B, const MX &C, const std::vector< casadi_int > &dim_a, const std::vector< casadi_int > &dim_b, const std::vector< casadi_int > &dim_c, const std::vector< casadi_int > &a, const std::vector< casadi_int > &b, const std::vector< casadi_int > &c)
Computes an einstein dense tensor contraction.
void set_nz(const MX &m, bool ind1, casadi_int kk)
Definition: mx.hpp:509
void set_nz(const MX &m, bool ind1, const MX &kk)
void get(MX &m, bool ind1, const casadi_int rr) const
Definition: mx.hpp:449
void set(const MX &m, bool ind1, const Sparsity &sp)
void get_nz(MX &m, bool ind1, const MX &inner, const MX &outer) const
void get_nz(MX &m, bool ind1, const MX &kk) const
static void set_max_depth(casadi_int eq_depth=1)
Set or reset the depth to which equalities are being checked for simplifications.
DM join_primitives(const std::vector< DM > &v) const
Join an expression along symbolic primitives.
MX T() const
Transpose the matrix.
void get(MX &m, bool ind1, const Slice &rr, const Matrix< casadi_int > &cc) const
void get(MX &m, bool ind1, const Slice &rr, const MX &cc) const
void get(MX &m, bool ind1, casadi_int rr, casadi_int cc) const
Definition: mx.hpp:467
MX(casadi_int nrow, casadi_int ncol)
Create a sparse matrix with all structural zeros.
void get(MX &m, bool ind1, const Slice &rr, casadi_int cc) const
Definition: mx.hpp:458
Function which_function() const
Get function - only valid when is_call() is true.
void get(MX &m, bool ind1, const Slice &rr, const Slice &cc) const
void get_nz(MX &m, bool ind1, const MX &inner, const Slice &outer) const
static MX inf(const std::pair< casadi_int, casadi_int > &rc)
create a matrix with all inf
void get(MX &m, bool ind1, const Matrix< casadi_int > &rr, const Slice &cc) const
MX(double x)
Create scalar constant (also implicit type conversion)
MX(const Sparsity &sp)
Create a sparse matrix from a sparsity pattern.
static std::string type_name()
Get type name.
Definition: mx.hpp:89
bool is_op(casadi_int op) const
Is it a certain operation.
void get(MX &m, bool ind1, const Matrix< casadi_int > &rr) const
bool is_norm() const
Check if norm.
void set_nz(const MX &m, bool ind1, const Slice &kk)
MX()
Default constructor.
static MX binary(casadi_int op, const MX &x, const MX &y)
Create nodes by their ID.
bool is_regular() const
Checks if expression does not contain NaN or Inf.
casadi_int which_output() const
Get the index of evaluation output - only valid when is_output() is true.
void serialize(SerializingStream &s) const
Serialize an object.
static MX nan(casadi_int nrow=1, casadi_int ncol=1)
create a matrix with all nan
void set(const MX &m, bool ind1, const Slice &rr, const Matrix< casadi_int > &cc)
void eval_mx(const std::vector< MX > &arg, std::vector< MX > &res) const
Evaluate the MX node with new symbolic dependencies.
SX join_primitives(const std::vector< SX > &v) const
Join an expression along symbolic primitives.
MX attachAssert(const MX &y, const std::string &fail_message="") const
returns itself, but with an assertion attached
Dict info() const
std::map< std::string, MX > MXDict
Readability typedef.
Definition: mx.hpp:907
void set(const MX &m, bool ind1, const Slice &rr)
std::vector< MX > primitives() const
Get primitives.
bool is_one() const
check if zero (note that false negative answers are possible)
void get_nz(MX &m, bool ind1, const Matrix< casadi_int > &kk) const
std::vector< DM > split_primitives(const DM &x) const
Split up an expression along symbolic primitives.
void get(MX &m, bool ind1, const Slice &rr) const
void set(const MX &m, bool ind1, const Matrix< casadi_int > &rr, const Matrix< casadi_int > &cc)
MX join_primitives(const std::vector< MX > &v) const
Join an expression along symbolic primitives.
void get(MX &m, bool ind1, const Matrix< casadi_int > &rr, const Matrix< casadi_int > &cc) const
MX(const Matrix< double > &x)
Create sparse matrix constant (also implicit type conversion)
MX dep(casadi_int ch=0) const
Get the nth dependency as MX.
void set(const MX &m, bool ind1, const Matrix< casadi_int > &rr, const Slice &cc)
MX monitor(const std::string &comment) const
Monitor an expression.
Matrix< casadi_int > mapping() const
Get an IM representation of a GetNonzeros or SetNonzeros node.
static MX interpn_linear(const std::vector< MX > &x, const MX &v, const std::vector< MX > &xq, const Dict &opts=Dict())
Low-level access to inlined linear interpolation.
bool is_binary() const
Is binary operation.
void set_nz(const MX &m, bool ind1, const Matrix< casadi_int > &kk)
void get(MX &m, bool ind1, casadi_int rr, const Slice &cc) const
Definition: mx.hpp:462
std::vector< SX > split_primitives(const SX &x) const
Split up an expression along symbolic primitives.
bool is_unary() const
Is unary operation.
static MX einstein(const MX &A, const MX &B, const std::vector< casadi_int > &dim_a, const std::vector< casadi_int > &dim_b, const std::vector< casadi_int > &dim_c, const std::vector< casadi_int > &a, const std::vector< casadi_int > &b, const std::vector< casadi_int > &c)
Computes an einstein dense tensor contraction.
bool is_zero() const
check if zero (note that false negative answers are possible)
bool is_transpose() const
Is the expression a transpose?
void get_nz(MX &m, bool ind1, const Slice &kk) const
static MX unary(casadi_int op, const MX &x)
Create nodes by their ID.
bool is_symbolic() const
Check if symbolic.
void enlarge(casadi_int nrow, casadi_int ncol, const std::vector< casadi_int > &rr, const std::vector< casadi_int > &cc, bool ind1=false)
Enlarge matrix.
MX printme(const MX &b) const
static std::vector< MX > get_input(const Function &f)
Get function inputs.
MX get_output(casadi_int oind) const
Get an output.
casadi_int op() const
Get operation type.
static DM bspline_dual(const std::vector< double > &x, const std::vector< std::vector< double > > &knots, const std::vector< casadi_int > &degree, const Dict &opts=Dict())
static MX inf(const Sparsity &sp)
create a matrix with all inf
Sparse matrix class. SX and DM are specializations.
Definition: matrix_decl.hpp:92
Helper class for Serialization.
SharedObject implements a reference counting framework similar for efficient and.
Class representing a Slice.
Definition: slice.hpp:48
General sparsity class.
Definition: sparsity.hpp:99
friend MX stop_diff(const MX &expr, const MX &var, casadi_int order)
Stop derivatives of an expression wrt to a select set of symbolic variables.
Definition: mx.hpp:849
friend MX no_hess(const MX &expr)
Stop second derivatives of an expression wrt to all its symbolic variables.
Definition: mx.hpp:841
friend MX bspline(const MX &x, const MX &coeffs, const std::vector< std::vector< double > > &knots, const std::vector< casadi_int > &degree, casadi_int m, const Dict &opts=Dict())
Definition: mx.hpp:775
friend MX low(const MX &v, const MX &p, const Dict &options=Dict())
Find first nonzero.
Definition: mx.hpp:713
friend std::vector< MX > matrix_expand(const std::vector< MX > &e, const std::vector< MX > &boundary=std::vector< MX >(), const Dict &options=Dict())
Expand MX graph to SXFunction call.
Definition: mx.hpp:759
friend MX convexify(const MX &H, const Dict &opts=Dict())
Definition: mx.hpp:790
friend MX inv_node(const MX &x)
Inverse node.
Definition: mx.hpp:807
friend std::vector< MX > difference(const std::vector< MX > &a, const std::vector< MX > &b)
Definition: mx.hpp:854
friend MX find(const MX &x)
Find first nonzero, returned as row index.
Definition: mx.hpp:704
friend MX no_grad(const MX &expr)
Stop first derivatives of an expression wrt to all its symbolic variables.
Definition: mx.hpp:832
friend MX bspline(const MX &x, const DM &coeffs, const std::vector< std::vector< double > > &knots, const std::vector< casadi_int > &degree, casadi_int m, const Dict &opts=Dict())
Definition: mx.hpp:766
friend std::vector< MX > graph_substitute(const std::vector< MX > &ex, const std::vector< MX > &v, const std::vector< MX > &vdef)
Substitute multiple expressions in graph.
Definition: mx.hpp:734
friend MX matrix_expand(const MX &e, const std::vector< MX > &boundary=std::vector< MX >(), const Dict &options=Dict())
Expand MX graph to SXFunction call.
Definition: mx.hpp:747
friend MX lift(const MX &x, const MX &x_guess)
Lift the expression.
Definition: mx.hpp:800
friend MX stop_diff(const MX &expr, casadi_int order)
Stop derivatives of an expression wrt to all its symbolic variables.
Definition: mx.hpp:823
friend DM bspline_dual(const std::vector< double > &x, const std::vector< std::vector< double > > &knots, const std::vector< casadi_int > &degree, const Dict &opts=Dict())
Definition: mx.hpp:783
friend DM evalf(const MX &expr)
Evaluates the expression numerically.
Definition: mx.hpp:816
friend MX graph_substitute(const MX &ex, const std::vector< MX > &v, const std::vector< MX > &vdef)
Substitute single expression in graph.
Definition: mx.hpp:722
The casadi namespace.
std::map< std::string, MX > MXDict
Definition: mx.hpp:948
std::vector< MX > MXVector
Definition: mx.hpp:945
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
std::vector< MXVector > MXVectorVector
Definition: mx.hpp:947
std::initializer_list< MX > MXIList
Definition: mx.hpp:946