* Interface to symbolic matrices */
/*
- * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#define __GINAC_MATRIX_H__
#include <vector>
+#include <string>
#include "basic.h"
#include "ex.h"
matrix(unsigned r, unsigned c, const exvector & m2);
matrix(unsigned r, unsigned c, const lst & l);
- // functions overriding virtual functions from bases classes
+ // functions overriding virtual functions from base classes
public:
void print(const print_context & c, unsigned level = 0) const;
unsigned nops() const;
// utility functions
-/** Return the matrix object handled by an ex. Deprecated: use ex_to<matrix>().
- * This is unsafe: you need to check the type first. */
-inline const matrix &ex_to_matrix(const ex &e)
-{
- return static_cast<const matrix &>(*e.bp);
-}
-
/** Specialization of is_exactly_a<matrix>(obj) for matrix objects. */
template<> inline bool is_exactly_a<matrix>(const basic & obj)
{
/** Convert list of diagonal elements to matrix. */
extern ex diag_matrix(const lst & l);
+/** Create an r times c unit matrix. */
+extern ex unit_matrix(unsigned r, unsigned c);
+
+/** Create a x times x unit matrix. */
+inline ex unit_matrix(unsigned x)
+{ return unit_matrix(x, x); }
+
+/** Create an r times c matrix of newly generated symbols consisting of the
+ * given base name plus the numeric row/column position of each element.
+ * The base name for LaTeX output is specified separately. */
+extern ex symbolic_matrix(unsigned r, unsigned c, const std::string & base_name, const std::string & tex_base_name);
+
+/** Create an r times c matrix of newly generated symbols consisting of the
+ * given base name plus the numeric row/column position of each element. */
+inline ex symbolic_matrix(unsigned r, unsigned c, const std::string & base_name)
+{ return symbolic_matrix(r, c, base_name, base_name); }
+
} // namespace GiNaC
#endif // ndef __GINAC_MATRIX_H__