- matrix &m = *new matrix(dim, dim);
- m.setflag(status_flags::dynallocated);
- for (unsigned i=0; i<dim; i++)
- m(i, i) = l.op(i);
+ return M;
+}
+
+ex unit_matrix(unsigned r, unsigned c)
+{
+ matrix &Id = *new matrix(r, c);
+ Id.setflag(status_flags::dynallocated);
+ for (unsigned i=0; i<r && i<c; i++)
+ Id(i,i) = _ex1;
+
+ return Id;
+}
+
+ex symbolic_matrix(unsigned r, unsigned c, const std::string & base_name, const std::string & tex_base_name)
+{
+ matrix &M = *new matrix(r, c);
+ M.setflag(status_flags::dynallocated | status_flags::evaluated);
+
+ bool long_format = (r > 10 || c > 10);
+ bool single_row = (r == 1 || c == 1);
+
+ for (unsigned i=0; i<r; i++) {
+ for (unsigned j=0; j<c; j++) {
+ std::ostringstream s1, s2;
+ s1 << base_name;
+ s2 << tex_base_name << "_{";
+ if (single_row) {
+ if (c == 1) {
+ s1 << i;
+ s2 << i << '}';
+ } else {
+ s1 << j;
+ s2 << j << '}';
+ }
+ } else {
+ if (long_format) {
+ s1 << '_' << i << '_' << j;
+ s2 << i << ';' << j << "}";
+ } else {
+ s1 << i << j;
+ s2 << i << j << '}';
+ }
+ }
+ M(i, j) = symbol(s1.str(), s2.str());
+ }
+ }