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 5 - (view) (download)

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

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

Powered By FusionForge