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] Annotation of /trunk/gadget/matrix.cc
[mareframe] / trunk / gadget / matrix.cc Repository:
ViewVC logotype

Annotation of /trunk/gadget/matrix.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11 - (view) (download)

1 : ulcessvp 2 #include "matrix.h"
2 :     #include "mathfunc.h"
3 :     #include "gadget.h"
4 :    
5 : ulcessvp 11 //TODO doc
6 : ulcessvp 2 //TODO usar mallock
7 :     Matrix::Matrix(int nr, int nc, double value) {
8 :    
9 :     m = new double[nr * nc];
10 :     nrow = nr;
11 :     ncol = nc;
12 :     int i, j;
13 :     for (i = 0; i < nr; i++) {
14 :     for (j = 0; j < nc; j++)
15 :     m[i*ncol+j] = value;
16 :     }
17 :     }
18 :    
19 :     //Matrix::Matrix(const DoubleMatrix& initial) : nrow(initial.nrow) {
20 :     // int i;
21 :     // if (nrow >= 0) {
22 :     //// v = new DoubleVector*[nrow];
23 :     //// for (i = 0; i < nrow; i++)
24 :     //// v[i] = new DoubleVector(initial[i]);
25 :     // v = new double[nrow][initial.Ncol(0)];
26 :     // int i,j;
27 :     //
28 :     // for (i = 0; i < nrow; i++)
29 :     // for (j = 0; j < initial.Ncol(0); j++)
30 :     // v[i][j] = initial[i][j];
31 :     // } else {
32 :     // v = 0;
33 :     // nrow = 0;
34 :     // }
35 :     //}
36 :    
37 :     Matrix::~Matrix() {
38 :     int i;
39 :     if (m != 0) {
40 :     delete[] m;
41 :     m = 0;
42 :     ncol = nrow = 0;
43 :     }
44 :     }
45 :    
46 :     void Matrix::AddRows(int add, int length, double value) {
47 :     if (add <= 0)
48 :     return;
49 :    
50 :     int i, j;
51 :     if (m == 0) {
52 :     nrow = add;
53 :     ncol = length;
54 :     m = new double[nrow*ncol];
55 :     for (i = 0; i < nrow; i++) {
56 :     for (j = 0; j < length; j++)
57 :     m[i*ncol+j] = value;
58 :     }
59 :    
60 :     } else {
61 :     int aux = nrow + add;
62 :     double* vnew = new double[aux*length];
63 :     for (i = 0; i < nrow; i++)
64 :     for (j = 0; j < length; j++)
65 :     vnew[i*ncol+j] = m[i*ncol+j];
66 :    
67 :     for (i = nrow; i < nrow + add; i++) {
68 :     for (j = 0; j < length; j++)
69 :     vnew[i*ncol+j] = value;
70 :     }
71 :     delete[] m;
72 :     m = vnew;
73 :     nrow = aux;
74 :     }
75 :     }
76 :    
77 :     //void Matrix::Delete(int pos) {
78 :     // delete v[pos];
79 :     // int i;
80 :     // if (nrow > 1) {
81 :     // DoubleVector** vnew = new DoubleVector*[nrow - 1];
82 :     // for (i = 0; i < pos; i++)
83 :     // vnew[i] = v[i];
84 :     // for (i = pos; i < nrow - 1; i++)
85 :     // vnew[i] = v[i + 1];
86 :     // delete[] v;
87 :     // v = vnew;
88 :     // nrow--;
89 :     // } else {
90 :     // delete[] v;
91 :     // v = 0;
92 :     // nrow = 0;
93 :     // }
94 :     //}
95 :    
96 : ulcessvp 5 //Matrix &Matrix::operator = (const Matrix& d) {
97 :     // int i,j;
98 :     //// if (v != 0) {
99 :     //// for (i = 0; i < nrow; i++)
100 :     //// delete v[i];
101 :     //// delete[] v;
102 :     //// }
103 :     // if (m != 0)
104 :     // delete[] m;
105 : ulcessvp 2 //
106 :     // nrow = d.nrow;
107 : ulcessvp 5 // ncol = d.ncol;
108 :     //
109 :     // double* aux;
110 : ulcessvp 2 // if (nrow > 0) {
111 : ulcessvp 5 // m = d.m;
112 :     ////// v = new double*[nrow];
113 :     //// m = new double[nrow * ncol];
114 :     ////// for (i = 0; i < nrow; i++)
115 :     ////// v[i] = new double(*d[i]);
116 :     //// cout << "0000000?????????:" << d[20] << endl;
117 :     //// for (i = 0; i < nrow; i++) {
118 :     //// for (j = 0; j < ncol; j++){
119 :     ////// cout << "j:" << j << endl;
120 :     //// cout << "????????????????????0" << endl;
121 :     //// aux = (double*) d[i*ncol+j];
122 :     //// cout << "????????????????????1" << endl;
123 :     //// m[i*ncol+j] = 0;
124 :     ////// cout << "????????????????????2" << endl;
125 :     //// }
126 :     //// }
127 : ulcessvp 2 // } else
128 : ulcessvp 5 // m = 0;
129 : ulcessvp 2 //
130 :     // return *this;
131 :     //}
132 :    
133 :     void Matrix::Reset() {
134 :     if (nrow > 0) {
135 :     int i;
136 :     delete[] m;
137 :     m = 0;
138 :     nrow = 0;
139 :     ncol = 0;
140 :     }
141 :     }
142 :    
143 : ulcessvp 5 void Matrix::Initialize(int nr, int nc, double initial) {
144 :     if (m != 0)
145 :     delete[] m;
146 :    
147 :     m = new double[nr * nc];
148 :     nrow = nr;
149 :     ncol = nc;
150 :     int i, j;
151 :     for (i = 0; i < nr; i++) {
152 :     for (j = 0; j < nc; j++)
153 :     m[i*ncol+j] = initial;
154 :     }
155 :     }
156 :    
157 : ulcessvp 2 void Matrix::Print(ofstream& outfile) const {
158 :     int i, j;
159 :     for (i = 0; i < nrow; i++) {
160 :     outfile << TAB;
161 :     for (j = 0; j < ncol; j++)
162 :     outfile << setw(smallwidth) << setprecision(smallprecision)
163 :     << m[i*ncol+j] << sep;
164 :     outfile << endl;
165 :     }
166 :     }
167 :    
168 :     void Matrix::setToZero() {
169 :     int i, j;
170 :     for (i = 0; i < nrow; i++)
171 :     for (j = 0; j < ncol; j++)
172 : ulcessvp 5 m[i*ncol+j] = 0.0;
173 : ulcessvp 2 }

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

Powered By FusionForge