// Author: Douglas Wilhelm Harder // Copyright (c) 2009 by Douglas Wilhelm Harder. All rights reserved. #ifdef CA_UWATERLOO_ALUMNI_DWHARDER_SPARSE_SYSTEMS template class Vector { private: double array[N]; public: // Vector Mechanics Vector( double x = 0.0 ); Vector( Vector const & ); static Vector random(); Vector &operator=( Vector const & ); double &operator()( int ); double operator()( int ) const; // Vector Functions double norm() const; double norm( int ) const; // Vector-Vector Functions Vector &operator+=( Vector const & ); Vector &operator-=( Vector const & ); Vector &operator*=( Vector const & ); Vector &operator/=( Vector const & ); // Vector-Scalar Functions Vector &operator+=( double ); Vector &operator-=( double ); Vector &operator*=( double ); Vector &operator/=( double ); // Vector Streaming/Printing void details() const; void matlab( std::string const & ) const; // Vector Functions template friend Vector transpose( Vector const & ); template friend Vector transpose( Vector const & ); // Matrix-Vector Functions template friend Vector operator*( Vector const &, Matrix const & ); template friend Vector operator*( Matrix const &, Vector const & ); template friend Vector &operator*=( Matrix const &, Vector & ); template friend Vector operator*=( Vector &, Matrix const & ); template friend Vector matrix_vector_product( Matrix const &, Vector const &, Product ); template friend Vector vector_matrix_product( Vector const &, Matrix const &, Product ); // Vector-Vector Functions template friend double operator*( Vector const &, Vector const & ); // Vector-Scalar Functions template friend Vector operator-( double, Vector const & ); template friend Vector operator/( double, Vector const & ); // Matrix Solvers template friend Vector diagonal_solve( Matrix const &, Vector const & ); template friend Vector backward_substitution( Matrix const &, Vector const &, bool = false ); template friend Vector forward_substitution( Matrix const &, Vector const &, bool = false ); template friend Vector jacobi( Matrix const &, Vector const &, int, double ); template friend Vector gauss_seidel( Matrix const &, Vector const &, int, double ); // Vector Streaming template friend std::ostream &operator<<( std::ostream &, Vector const & ); template friend std::ostream &operator<<( std::ostream &, Vector const & ); template friend class Matrix; }; #include "vector_mechanics.cpp" #include "vector_functions.cpp" #include "vector_scalar_operations.cpp" #include "vector_vector_operations.cpp" #include "vector_streaming.cpp" #endif