CPPLapack
 All Classes Files Functions Variables Friends Pages
zrovector_small-functions.hpp
Go to the documentation of this file.
1 //=============================================================================
2 /*! convert zrovector_small to zrovector */
3 template<CPPL_INT l>
5 {CPPL_VERBOSE_REPORT;
6  zrovector vec(l);
7  for(CPPL_INT k=0; k<l; k++){
8  vec(k) =(*this)(k);
9  }
10  return _(vec);
11 }
12 
13 ///////////////////////////////////////////////////////////////////////////////
14 ///////////////////////////////////////////////////////////////////////////////
15 ///////////////////////////////////////////////////////////////////////////////
16 
17 //=============================================================================
18 /*! operator() */
19 template<CPPL_INT l>
20 inline comple& zrovector_small<l>::operator()(const CPPL_INT& k)
21 {CPPL_VERBOSE_REPORT;
22 #ifdef CPPL_DEBUG
23  if( k<0 || l<=k ){
24  ERROR_REPORT;
25  std::cerr << "The required component is out of the vector size." << std::endl
26  << "Your input is (" << k << "), whereas the vector size is " << l << "." << std::endl;
27  exit(1);
28  }
29 #endif//CPPL_DEBUG
30 
31  return array[k];
32 }
33 
34 //=============================================================================
35 /*! operator() for const */
36 template<CPPL_INT l>
37 inline comple zrovector_small<l>::operator()(const CPPL_INT& k) const
38 {CPPL_VERBOSE_REPORT;
39 #ifdef CPPL_DEBUG
40  if( k<0 || l<=k ){
41  ERROR_REPORT;
42  std::cerr << "The required component is out of the vector size." << std::endl
43  << "Your input is (" << k << "), whereas the vector size is " << l << "." << std::endl;
44  exit(1);
45  }
46 #endif//CPPL_DEBUG
47 
48  return array[k];
49 }
50 
51 //=============================================================================
52 /*! set */
53 template<CPPL_INT l>
54 inline zrovector_small<l>& zrovector_small<l>::set(const CPPL_INT& k, const comple& v)
55 {CPPL_VERBOSE_REPORT;
56  (*this)(k) =v;
57  return *this;
58 }
59 
60 //=============================================================================
61 /*! operator<< */
62 template<CPPL_INT l>
63 inline std::ostream& operator<<(std::ostream& s, const zrovector_small<l>& A)
64 {CPPL_VERBOSE_REPORT;
65  s << std::setiosflags(std::ios::showpos);
66  for(CPPL_INT i=0; i<l; i++){
67  s << " " << A(i) << std::flush;
68  }
69  s << std::endl;
70  return s;
71 }
72 
73 //=============================================================================
74 /*! write to file */
75 template<CPPL_INT l>
76 inline void zrovector_small<l>::write(const char* filename) const
77 {CPPL_VERBOSE_REPORT;
78  std::ofstream ofs(filename, std::ios::trunc);
79  ofs.setf(std::cout.flags());
80  ofs.precision(std::cout.precision());
81  ofs.width(std::cout.width());
82  ofs.fill(std::cout.fill());
83 
84  ofs << "#zrovector" << " " << l << std::endl;
85  for(CPPL_INT k=0; k<l; k++){
86  ofs << (*this)(k) << std::endl;
87  }
88  ofs.close();
89 }
90 
91 //=============================================================================
92 /*! read from file */
93 template<CPPL_INT l>
94 inline void zrovector_small<l>::read(const char* filename)
95 {CPPL_VERBOSE_REPORT;
96  std::ifstream s( filename );
97  if(!s){
98  ERROR_REPORT;
99  std::cerr << "The file \"" << filename << "\" can not be opened." << std::endl;
100  exit(1);
101  }
102 
103  std::string id;
104  s >> id;
105  if( id != "zrovector" && id != "#zrovector" ){
106  ERROR_REPORT;
107  std::cerr << "The type name of the file \"" << filename << "\" is not zrovector." << std::endl
108  << "Its type name was " << id << " ." << std::endl;
109  exit(1);
110  }
111 
112  CPPL_INT _l;
113  s >> _l;
114  if(l!=_l){
115  ERROR_REPORT;
116  std::cerr << "Matrix size is invalid." << std::endl;
117  exit(1);
118  }
119  for(CPPL_INT k=0; k<l; k++){
120  s >> (*this)(k);
121  }
122  if(s.eof()){
123  ERROR_REPORT;
124  std::cerr << "There is something is wrong with the file \"" << filename << "\"." << std::endl
125  << "Most likely, there is not enough data components, or a linefeed code or space code is missing at the end of the last line." << std::endl;
126  exit(1);
127  }
128 
129  s >> id;//tmp
130  if(!s.eof()){
131  ERROR_REPORT;
132  std::cerr << "There is something is wrong with the file \"" << filename << "\"." << std::endl
133  << "Most likely, there are extra data components." << std::endl;
134  exit(1);
135  }
136 
137  s.close();
138 }
139 
140 ///////////////////////////////////////////////////////////////////////////////
141 ///////////////////////////////////////////////////////////////////////////////
142 ///////////////////////////////////////////////////////////////////////////////
143 ///////////////////////////////////////////////////////////////////////////////
144 ///////////////////////////////////////////////////////////////////////////////
145 ///////////////////////////////////////////////////////////////////////////////
146 
147 //=============================================================================
148 /*! return transposed zrovector_small */
149 template<CPPL_INT n>
151 {CPPL_VERBOSE_REPORT;
153  for(CPPL_INT i=0; i<n; i++){
154  X(i)=A(i);
155  }
156  return X;
157 }
158 
159 //=============================================================================
160 /*! return its 2-norm */
161 template<CPPL_INT l>
162 inline double nrm2(const zrovector_small<l>& A)
163 {CPPL_VERBOSE_REPORT;
164  double v(0.);
165  for(CPPL_INT i=0; i<l; i++){
166  v+=A(i)*A(i);
167  }
168  return std::sqrt(v);
169 }
170 
171 //=============================================================================
172 /*! find index of the maximum component */
173 template<CPPL_INT l>
174 inline void idamax(CPPL_INT& K, const zrovector_small<l>& A)
175 {CPPL_VERBOSE_REPORT;
176  double max(-1.);
177  for(int k=0; k<l; k++){
178  if( max<fabs(A(k)) ){
179  K=k;
180  max =fabs(A(k));
181  }
182  }
183  return;
184 }
185 
186 //=============================================================================
187 /*! return the maximum component */
188 template<CPPL_INT l>
189 inline comple damax(const zrovector_small<l>& A)
190 {CPPL_VERBOSE_REPORT;
191  CPPL_INT k(0);
192  idamax(k,A);
193  return A(k);
194 }
195 
196 ///////////////////////////////////////////////////////////////////////////////
197 ///////////////////////////////////////////////////////////////////////////////
198 ///////////////////////////////////////////////////////////////////////////////
199 ///////////////////////////////////////////////////////////////////////////////
200 ///////////////////////////////////////////////////////////////////////////////
201 ///////////////////////////////////////////////////////////////////////////////
202 
203 //=============================================================================
204 /*! zero */
205 template<CPPL_INT l>
207 {CPPL_VERBOSE_REPORT;
208  for(CPPL_INT k=0; k<l; k++){
209  array[k] =0.;
210  }
211  return *this;
212 }
213 
214 ///////////////////////////////////////////////////////////////////////////////
215 ///////////////////////////////////////////////////////////////////////////////
216 ///////////////////////////////////////////////////////////////////////////////
217 ///////////////////////////////////////////////////////////////////////////////
218 ///////////////////////////////////////////////////////////////////////////////
219 ///////////////////////////////////////////////////////////////////////////////
220 
221 //=============================================================================
222 /*! zrovector_small+=zrovector_small operator */
223 template<CPPL_INT l>
225 {CPPL_VERBOSE_REPORT;
226  for(CPPL_INT i=0; i<l; i++){
227  A(i) +=B(i);
228  }
229  return A;
230 }
231 
232 //=============================================================================
233 /*! zrovector_small-=zrovector_small operator */
234 template<CPPL_INT l>
236 {CPPL_VERBOSE_REPORT;
237  for(CPPL_INT i=0; i<l; i++){
238  A(i) -=B(i);
239  }
240  return A;
241 }
242 
243 //=============================================================================
244 /*! zrovector_small*=double operator */
245 template<CPPL_INT l>
247 {CPPL_VERBOSE_REPORT;
248  for(CPPL_INT i=0; i<l; i++){
249  A(i) *=v;
250  }
251  return A;
252 }
253 
254 //=============================================================================
255 /*! zrovector_small*=comple operator */
256 template<CPPL_INT l>
258 {CPPL_VERBOSE_REPORT;
259  for(CPPL_INT i=0; i<l; i++){
260  A(i) *=v;
261  }
262  return A;
263 }
264 
265 //=============================================================================
266 /*! zrovector_small/=double operator */
267 template<CPPL_INT l>
269 {CPPL_VERBOSE_REPORT;
270  for(CPPL_INT i=0; i<l; i++){
271  A(i) /=v;
272  }
273  return A;
274 }
275 
276 //=============================================================================
277 /*! zrovector_small/=comple operator */
278 template<CPPL_INT l>
280 {CPPL_VERBOSE_REPORT;
281  for(CPPL_INT i=0; i<l; i++){
282  A(i) /=v;
283  }
284  return A;
285 }
286 
287 ///////////////////////////////////////////////////////////////////////////////
288 ///////////////////////////////////////////////////////////////////////////////
289 ///////////////////////////////////////////////////////////////////////////////
290 
291 //=============================================================================
292 /*! unary + operator */
293 template<CPPL_INT l>
295 {CPPL_VERBOSE_REPORT;
296  return A;
297 }
298 
299 //=============================================================================
300 /*! unary - operator */
301 template<CPPL_INT l>
303 {CPPL_VERBOSE_REPORT;
305  for(CPPL_INT i=0; i<l; i++){
306  X(i) =-A(i);
307  }
308  return X;
309 }
310 
311 ///////////////////////////////////////////////////////////////////////////////
312 ///////////////////////////////////////////////////////////////////////////////
313 ///////////////////////////////////////////////////////////////////////////////
314 
315 //=============================================================================
316 /*! zrovector_small+zrovector_small operator */
317 template<CPPL_INT l>
319 {CPPL_VERBOSE_REPORT;
321  for(CPPL_INT i=0; i<l; i++){
322  X(i) =A(i)+B(i);
323  }
324  return X;
325 }
326 
327 //=============================================================================
328 /*! zrovector_small-zrovector_small operator */
329 template<CPPL_INT l>
331 {CPPL_VERBOSE_REPORT;
333  for(CPPL_INT i=0; i<l; i++){
334  X(i) =A(i)-B(i);
335  }
336  return X;
337 }
338 
339 ///////////////////////////////////////////////////////////////////////////////
340 ///////////////////////////////////////////////////////////////////////////////
341 ///////////////////////////////////////////////////////////////////////////////
342 
343 //=============================================================================
344 /*! zrovector_small*zcovector_small operator */
345 template<CPPL_INT l>
346 inline comple operator*(const zrovector_small<l>& A, const zcovector_small<l>& B)
347 {CPPL_VERBOSE_REPORT;
348  comple x =0.;
349  for(CPPL_INT i=0; i<l; i++){
350  x +=A(i)*B(i);
351  }
352  return x;
353 }
354 
355 //=============================================================================
356 /*! zrovector_small*zgematrix_small operator */
357 template<CPPL_INT m, CPPL_INT n>
359 {CPPL_VERBOSE_REPORT;
361  C.zero();
362  for(CPPL_INT j=0; j<n; j++){
363  for(CPPL_INT i=0; i<m; i++){
364  C(j) +=A(i)*B(i,j);
365  }
366  }
367  return C;
368 }
369 
370 //=============================================================================
371 /*! zrovector_small*zhematrix_small operator */
372 template<CPPL_INT l>
374 {CPPL_VERBOSE_REPORT;
376  C.zero();
377  for(CPPL_INT j=0; j<l; j++){
378  for(CPPL_INT i=0; i<j; i++){
379  C(j) +=A(i)*B(j,i);
380  }
381  for(CPPL_INT i=j; i<l; i++){
382  C(j) +=A(i)*B(i,j);
383  }
384  }
385  return C;
386 }
387 
388 //=============================================================================
389 /*! zrovector_small*double operator */
390 template<CPPL_INT l>
391 inline zrovector_small<l> operator*(const zrovector_small<l>& A, const double& v)
392 {CPPL_VERBOSE_REPORT;
394  for(CPPL_INT i=0; i<l; i++){
395  C(i) =A(i)*v;
396  }
397  return C;
398 }
399 
400 //=============================================================================
401 /*! zrovector_small*comple operator */
402 template<CPPL_INT l>
403 inline zrovector_small<l> operator*(const zrovector_small<l>& A, const comple& v)
404 {CPPL_VERBOSE_REPORT;
406  for(CPPL_INT i=0; i<l; i++){
407  C(i) =A(i)*v;
408  }
409  return C;
410 }
411 
412 ///////////////////////////////////////////////////////////////////////////////
413 ///////////////////////////////////////////////////////////////////////////////
414 ///////////////////////////////////////////////////////////////////////////////
415 
416 //=============================================================================
417 /*! zrovector_small/double operator */
418 template<CPPL_INT l>
419 inline zrovector_small<l> operator/(const zrovector_small<l>& A, const double& v)
420 {CPPL_VERBOSE_REPORT;
422  for(CPPL_INT i=0; i<l; i++){
423  C(i) =A(i)/v;
424  }
425  return C;
426 }
427 
428 //=============================================================================
429 /*! zrovector_small/comple operator */
430 template<CPPL_INT l>
431 inline zrovector_small<l> operator/(const zrovector_small<l>& A, const comple& v)
432 {CPPL_VERBOSE_REPORT;
434  for(CPPL_INT i=0; i<l; i++){
435  C(i) =A(i)/v;
436  }
437  return C;
438 }
439 
440 ///////////////////////////////////////////////////////////////////////////////
441 ///////////////////////////////////////////////////////////////////////////////
442 ///////////////////////////////////////////////////////////////////////////////
443 
444 //=============================================================================
445 /*! Hadamard product */
446 template<CPPL_INT l>
448 {CPPL_VERBOSE_REPORT;
450  for(CPPL_INT i=0; i<l; i++){
451  C(i) =A(i)*B(i);
452  }
453  return C;
454 }
zrovector_small< l > & operator-=(zrovector_small< l > &A, const zrovector_small< l > &B)
zrovector_small< l > hadamard(const zrovector_small< l > &A, const zrovector_small< l > &B)
zrovector_small< l > operator-(const zrovector_small< l > &A)
void read(const char *filename)
zrovector_small< l > & operator*=(zrovector_small< l > &A, const double &v)
comple damax(const zrovector_small< l > &A)
zrovector_small< l > & zero()
_dgematrix i(const _dgbmatrix &mat)
void write(const char *filename) const
comple operator*(const zrovector_small< l > &A, const zcovector_small< l > &B)
Samll Complex Double-precision Column Vector Class.
zrovector_small< l > & operator+=(zrovector_small< l > &A, const zrovector_small< l > &B)
Samll Complex Double-precision Row Vector Class.
double nrm2(const zrovector_small< l > &A)
_zrovector to_zrovector() const
zcovector_small< n > t(const zrovector_small< n > &A)
Complex Double-precision Row Vector Class.
Definition: zrovector.hpp:3
(DO NOT USE) Smart-temporary Complex Double-precision Row Vector Class
Definition: _zrovector.hpp:3
zrovector_small< l > & operator/=(zrovector_small< l > &A, const double &v)
zrovector_small< l > & set(const CPPL_INT &, const comple &)
zrovector_small< l > operator/(const zrovector_small< l > &A, const double &v)
_dcovector _(dcovector &vec)
void idamax(CPPL_INT &K, const zrovector_small< l > &A)
Samll Complex Double-precision General Dence Matrix Class.
const zrovector_small< l > & operator+(const zrovector_small< l > &A)
Samll Complex Double-precision Symmetric Matrix Class.
comple & operator()(const CPPL_INT &)