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 5 - (download) (annotate)
Sun May 10 12:04:01 2015 UTC (9 years, 1 month 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;
}

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

Powered By FusionForge