[mareframe] View of /trunk/gadget/matrix.cc
View of /trunk/gadget/matrix.cc
Parent Directory
| Revision Log
Revision 5 -
( download)
( annotate)
Sun May 10 12:04:01 2015 UTC
(9 years, 2 months ago)
by ulcessvp
File size: 3379 byte(s)
Modificado Makefile y cambio en la clase matrix
#include "matrix.h"
#include "mathfunc.h"
#include "gadget.h"
//TODO usar mallock
Matrix::Matrix(int nr, int nc, double value) {
m = new double[nr * nc];
nrow = nr;
ncol = nc;
int i, j;
for (i = 0; i < nr; i++) {
for (j = 0; j < nc; j++)
m[i*ncol+j] = value;
}
}
//Matrix::Matrix(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]);
// v = new double[nrow][initial.Ncol(0)];
// int i,j;
//
// for (i = 0; i < nrow; i++)
// for (j = 0; j < initial.Ncol(0); j++)
// v[i][j] = initial[i][j];
// } else {
// v = 0;
// nrow = 0;
// }
//}
Matrix::~Matrix() {
int i;
if (m != 0) {
delete[] m;
m = 0;
ncol = nrow = 0;
}
}
void Matrix::AddRows(int add, int length, double value) {
if (add <= 0)
return;
int i, j;
if (m == 0) {
nrow = add;
ncol = length;
m = new double[nrow*ncol];
for (i = 0; i < nrow; i++) {
for (j = 0; j < length; j++)
m[i*ncol+j] = value;
}
} else {
int aux = nrow + add;
double* vnew = new double[aux*length];
for (i = 0; i < nrow; i++)
for (j = 0; j < length; j++)
vnew[i*ncol+j] = m[i*ncol+j];
for (i = nrow; i < nrow + add; i++) {
for (j = 0; j < length; j++)
vnew[i*ncol+j] = value;
}
delete[] m;
m = vnew;
nrow = aux;
}
}
//void Matrix::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;
// }
//}
//Matrix &Matrix::operator = (const Matrix& d) {
// int i,j;
//// if (v != 0) {
//// for (i = 0; i < nrow; i++)
//// delete v[i];
//// delete[] v;
//// }
// if (m != 0)
// delete[] m;
//
// nrow = d.nrow;
// ncol = d.ncol;
//
// double* aux;
// if (nrow > 0) {
// m = d.m;
////// v = new double*[nrow];
//// m = new double[nrow * ncol];
////// for (i = 0; i < nrow; i++)
////// v[i] = new double(*d[i]);
//// cout << "0000000?????????:" << d[20] << endl;
//// for (i = 0; i < nrow; i++) {
//// for (j = 0; j < ncol; j++){
////// cout << "j:" << j << endl;
//// cout << "????????????????????0" << endl;
//// aux = (double*) d[i*ncol+j];
//// cout << "????????????????????1" << endl;
//// m[i*ncol+j] = 0;
////// cout << "????????????????????2" << endl;
//// }
//// }
// } else
// m = 0;
//
// return *this;
//}
void Matrix::Reset() {
if (nrow > 0) {
int i;
delete[] m;
m = 0;
nrow = 0;
ncol = 0;
}
}
void Matrix::Initialize(int nr, int nc, double initial) {
if (m != 0)
delete[] m;
m = new double[nr * nc];
nrow = nr;
ncol = nc;
int i, j;
for (i = 0; i < nr; i++) {
for (j = 0; j < nc; j++)
m[i*ncol+j] = initial;
}
}
void Matrix::Print(ofstream& outfile) const {
int i, j;
for (i = 0; i < nrow; i++) {
outfile << TAB;
for (j = 0; j < ncol; j++)
outfile << setw(smallwidth) << setprecision(smallprecision)
<< m[i*ncol+j] << sep;
outfile << endl;
}
}
void Matrix::setToZero() {
int i, j;
for (i = 0; i < nrow; i++)
for (j = 0; j < ncol; j++)
m[i*ncol+j] = 0.0;
}
|