* Implementation of symbolic matrices */
/*
- * GiNaC Copyright (C) 1999-2006 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2007 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
if (!(n.find_unsigned("row", row)) || !(n.find_unsigned("col", col)))
throw (std::runtime_error("unknown matrix dimensions in archive"));
m.reserve(row * col);
- for (unsigned int i=0; true; i++) {
+ archive_node::archive_node_cit first = n.find_first("m");
+ archive_node::archive_node_cit last = n.find_last("m");
+ ++last;
+ for (archive_node::archive_node_cit i=first; i<last; ++i) {
ex e;
- if (n.find_ex("m", e, sym_lst, i))
- m.push_back(e);
- else
- break;
+ n.find_ex_by_loc(i, e, sym_lst);
+ m.push_back(e);
}
}
return *this;
}
+ex matrix::real_part() const
+{
+ exvector v;
+ v.reserve(m.size());
+ for (exvector::const_iterator i=m.begin(); i!=m.end(); ++i)
+ v.push_back(i->real_part());
+ return matrix(row, col, v);
+}
+
+ex matrix::imag_part() const
+{
+ exvector v;
+ v.reserve(m.size());
+ for (exvector::const_iterator i=m.begin(); i!=m.end(); ++i)
+ v.push_back(i->imag_part());
+ return matrix(row, col, v);
+}
+
// protected
int matrix::compare_same_type(const basic & other) const
return k;
}
+/** Function to check that all elements of the matrix are zero.
+ */
+bool matrix::is_zero_matrix() const
+{
+ for (exvector::const_iterator i=m.begin(); i!=m.end(); ++i)
+ if(!(i->is_zero()))
+ return false;
+ return true;
+}
+
ex lst_to_matrix(const lst & l)
{
lst::const_iterator itr, itc;