Log In | Get Help   
Home My Page Projects Code Snippets Project Openings Mareframe
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files
[mareframe] View of /trunk/gadget/matrix.cc
[mareframe] / trunk / gadget / matrix.cc Repository:
ViewVC logotype

View of /trunk/gadget/matrix.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (download) (annotate)
Wed Apr 29 12:55:30 2015 UTC (9 years, 1 month ago) by ulcessvp
File size: 2635 byte(s)
Gadget actualizado con los cambios de pow y matrix. Actualizado tambien a la ultima version de gadget(git)
#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;
//  if (v != 0) {
//    for (i = 0; i < nrow; i++)
//      delete v[i];
//    delete[] v;
//  }
//
//  nrow = d.nrow;
//  if (nrow > 0) {
//    v = new double*[nrow];
//    for (i = 0; i < nrow; i++)
//      v[i] = new double(*d[i]);
//
//  } else
//    v = 0;
//
//  return *this;
//}

void Matrix::Reset() {
	if (nrow > 0) {
		int i;
		delete[] m;
		m = 0;
		nrow = 0;
		ncol = 0;
	}
}

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;
//  **v = {0};
	for (i = 0; i < nrow; i++)
		for (j = 0; j < ncol; j++)
			m[i*ncol+j] = 0;
//    (*v[i]).setToZero();
}

root@forge.cesga.es
ViewVC Help
Powered by ViewVC 1.0.0  

Powered By FusionForge