// Author: Douglas Wilhelm Harder // Copyright (c) 2009 by Douglas Wilhelm Harder. All rights reserved. #include /*************************************************** * The infinity norm of the matrix: * - The maximum absolute entry. * * Run time: O(N) * Memory: O(1) ***************************************************/ template double Vector::norm() const { double value = 0; for ( int i = 0; i < N; ++i ) { value = std::max( std::fabs( array[i] ), value ); } return value; } template double norm( Vector const &v ) { return v.norm(); } /*************************************************** * The 1- and 2-norms of the matrix. * - The sum of the absolute values of the * entries, and * - The square root of the sum of the squares * of the entries. * * Run time: O(N) * Memory: O(1) ***************************************************/ template double Vector::norm( int n ) const { double value = 0; if ( n == 1 ) { for ( int i = 0; i < N; ++i ) { value += std::fabs( array[i] ); } return value; } else if ( n == 2 ) { for ( int i = 0; i < N; ++i ) { value += array[i]*array[i]; } return std::sqrt( value ); } throw invalid_norm( n ); } template double norm( Vector const &v, int n ) { return v.norm( n ); } /*************************************************** * The transpose of a column vector is a row * vector with the same entries. * * Run time: O(N) * Memory: O(N) ***************************************************/ template Vector transpose( Vector const &u ) { Vector v; for ( int i = 0; i < N; ++i ) { v.array[i] = u.array[i]; } return v; } /*************************************************** * The transpose of a row vector is a column * vector with the same entries. * * Run time: O(N) * Memory: O(N) ***************************************************/ template Vector transpose( Vector const &u ) { Vector v; for ( int i = 0; i < N; ++i ) { v.array[i] = u.array[i]; } return v; }