tensor-0.1.0
 All Data Structures Namespaces Functions Variables Typedefs Enumerations Enumerator Groups Pages
matrix_norminf_z.cc
1 /*
2  Copyright (c) 2010 Juan Jose Garcia Ripoll
3 
4  Tensor is free software; you can redistribute it and/or modify it
5  under the terms of the GNU Library General Public License as published
6  by the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU Library General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License along
15  with this program; if not, write to the Free Software Foundation, Inc.,
16  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 */
18 
19 #include <tensor/tensor.h>
20 
21 namespace tensor {
22 
23  double matrix_norminf(const CTensor &m)
24  {
25  assert(m.rank() == 2);
26 
27  size_t r = m.rows();
28  size_t c = m.columns();
29 
30  // aux[i] = sum_j abs(A(i,j))
31 
32  double *aux = new double[r];
33  CTensor::const_iterator p = m.begin_const();
34  for (size_t i = 0; i < r; i++, p++) {
35  aux[i] = abs(*p);
36  }
37  for (size_t j = 1; j < c; j++) {
38  for (size_t i = 0; i < r; i++, p++) {
39  aux[i] += abs(*p);
40  }
41  }
42 
43  // output = max_i aux[i]
44 
45  double output = 0.0;
46  for (size_t i = 0; i < r; i++) {
47  if (output < aux[i])
48  output = aux[i];
49  }
50  delete[] aux;
51 
52  return output;
53  }
54 
55 } // namespace tensor