00001 #ifndef MATRICES_H
00002 #define MATRICES_H
00003
00004 #include <vector>
00005
00006 class lower_triangular_matrix {
00007
00008 unsigned n;
00009 std::vector<double> data;
00010
00011 public:
00012
00013 lower_triangular_matrix(unsigned n_ = 0) : n(n_), data(n * (n+1) / 2) {};
00014
00015 void resize(unsigned n_) {
00016 n = n_;
00017 data.resize(n*(n+1)/2);
00018 }
00019
00020 std::vector<double>::iterator operator[](unsigned i) { return data.begin() + i * (i+1) / 2; }
00021 std::vector<double>::const_iterator operator[](unsigned i) const { return data.begin() + i*(i+1)/2; }
00022 };
00023
00024 class square_matrix {
00025 unsigned n;
00026 std::vector<double> data;
00027
00028 public:
00029
00030 square_matrix(unsigned n_ = 0) : n(n_), data(n * n) {};
00031
00032 void resize(unsigned n_) {
00033 n = n_;
00034 data.resize(n*n);
00035 }
00036
00037 std::vector<double>::iterator operator[](unsigned i) { return data.begin() + i * n; }
00038 std::vector<double>::const_iterator operator[](unsigned i) const { return data.begin() + i*n; }
00039 };
00040
00041 #endif
00042