Revision 1 -
(download)
(annotate)
Mon Feb 10 17:09:07 2014 UTC
(10 years, 5 months ago)
by agomez File size: 2450 byte(s)
Initial version based on Gadget 2.2.00
#include "doublematrix.h"
#include "mathfunc.h"
#include "gadget.h"
DoubleMatrix::DoubleMatrix(int nr, int nc, double value) {
nrow = nr;
v = new DoubleVector*[nr];
int i, j;
for (i = 0; i < nr; i++)
v[i] = new DoubleVector(nc);
for (i = 0; i < nr; i++) {
for (j = 0; j < nc; j++)
(*v[i])[j] = value;
}
}
DoubleMatrix::DoubleMatrix(const DoubleMatrix& initial) : nrow(initial.nrow) {
int i;
if (nrow >= 0) {
v = new DoubleVector*[nrow];
for (i = 0; i < nrow; i++)
v[i] = new DoubleVector(initial[i]);
} else {
v = 0;
nrow = 0;
}
}
DoubleMatrix::~DoubleMatrix() {
int i;
if (v != 0) {
for (i = 0; i < nrow; i++)
delete v[i];
delete[] v;
v = 0;
}
}
void DoubleMatrix::AddRows(int add, int length, double value) {
if (add <= 0)
return;
int i;
if (v == 0) {
nrow = add;
v = new DoubleVector*[nrow];
for (i = 0; i < nrow; i++)
v[i] = new DoubleVector(length, value);
} else {
DoubleVector** vnew = new DoubleVector*[nrow + add];
for (i = 0; i < nrow; i++)
vnew[i] = v[i];
for (i = nrow; i < nrow + add; i++)
vnew[i] = new DoubleVector(length, value);
delete[] v;
v = vnew;
nrow += add;
}
}
void DoubleMatrix::Delete(int pos) {
delete v[pos];
int i;
if (nrow > 1) {
DoubleVector** vnew = new DoubleVector*[nrow - 1];
for (i = 0; i < pos; i++)
vnew[i] = v[i];
for (i = pos; i < nrow - 1; i++)
vnew[i] = v[i + 1];
delete[] v;
v = vnew;
nrow--;
} else {
delete[] v;
v = 0;
nrow = 0;
}
}
DoubleMatrix& DoubleMatrix::operator = (const DoubleMatrix& d) {
int i;
if (v != 0) {
for (i = 0; i < nrow; i++)
delete v[i];
delete[] v;
}
nrow = d.nrow;
if (nrow > 0) {
v = new DoubleVector*[nrow];
for (i = 0; i < nrow; i++)
v[i] = new DoubleVector(d[i]);
} else
v = 0;
return *this;
}
void DoubleMatrix::Reset() {
if (nrow > 0) {
int i;
for (i = 0; i < nrow; i++)
delete v[i];
delete[] v;
v = 0;
nrow = 0;
}
}
void DoubleMatrix::Print(ofstream& outfile) const {
int i, j;
for (i = 0; i < nrow; i++) {
outfile << TAB;
for (j = 0; j < v[i]->Size(); j++)
outfile << setw(smallwidth) << setprecision(smallprecision) << (*v[i])[j] << sep;
outfile << endl;
}
}
void DoubleMatrix::setToZero() {
int i;
for (i = 0; i < nrow; i++)
(*v[i]).setToZero();
}