//=============================================================================
/*! */
template<long l>
inline drovector_small<l> t(const dcovector_small<l>& A)
{
drovector_small<l> X;
for(long i=0; i<l; i++){
X(i)=A(i);
}
return X;
}
//=============================================================================
/*! */
template<long l>
inline double nrm2(const dcovector_small<l>& A)
{
double v(0);
for(long i=0; i<l; i++){
v+=A(i)*A(i);
}
return sqrt(v);
}
//=============================================================================
template<long l>
inline void idamax(long& K, const dcovector_small<l>& A)
{
double max(-1.);
for(int k=0; k<l; k++){
if( max<fabs(A(k)) ){
K=k;
max =fabs(A(k));
}
}
return;
}
//=============================================================================
template<long l>
inline double damax(const dcovector_small<l>& A)
{
long k(0);
idamax(k,A);
return A(k);
}
//=============================================================================
template<long l>
inline dcovector_small<l> colon(const dcovector_small<l>& A, const dcovector_small<l>& B)
{
dcovector_small<l> C;
for(long i=0; i<l; i++){
C(i) =A(i)*B(i);
}
return C;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//=============================================================================
/*! */
template<long l>
inline dcovector_small<l> operator+=(dcovector_small<l>& A, const dcovector_small<l>& B)
{
for(long i=0; i<l; i++){
A(i)+=B(i);
}
return A;
}
//=============================================================================
/*! */
template<long l>
inline dcovector_small<l> operator-=(dcovector_small<l>& A, const dcovector_small<l>& B)
{
for(long i=0; i<l; i++){
A(i)-=B(i);
}
return A;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//=============================================================================
/*! */
template<long l>
inline dcovector_small<l> operator+(const dcovector_small<l>& A, const dcovector_small<l>& B)
{
dcovector_small<l> X;
for(long i=0; i<l; i++){
X(i)=A(i)+B(i);
}
return X;
}
//=============================================================================
/*! */
template<long l>
inline dcovector_small<l> operator-(const dcovector_small<l>& A, const dcovector_small<l>& B)
{
dcovector_small<l> X;
for(long i=0; i<l; i++){
X(i)=A(i)-B(i);
}
return X;
}
//=============================================================================
/*! */
template<long l>
inline double operator%(const dcovector_small<l>& A, const dcovector_small<l>& B)
{
double v(0.);
for(long i=0; i<l; i++){
v +=A(i)*B(i);
}
return v;
}
//=============================================================================
/*! */
template<long n>
inline dcovector_small<n>& operator*=(dcovector_small<n>& A, const double& v)
{
for(long i=0; i<n; i++){
A(i)*=v;
}
return A;
}
//=============================================================================
/*! */
template<long n>
inline dcovector_small<n>& operator/=(dcovector_small<n>& A, const double& v)
{
for(long i=0; i<n; i++){
A(i)/=v;
}
return A;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//=============================================================================
/*! */
template<long n>
inline dcovector_small<n> operator*(const dcovector_small<n>& A, const double& v)
{
dcovector_small<n> C;
for(long i=0; i<n; i++){
C(i) =A(i)*v;
}
return C;
}
//=============================================================================
/*! */
template<long n>
inline dcovector_small<n> operator/(const dcovector_small<n>& A, const double& v)
{
dcovector_small<n> C;
for(long i=0; i<n; i++){
C(i) =A(i)/v;
}
return C;
}
//=============================================================================
/*! */
template<long l>
inline dgematrix_small<l,l> operator*(const dcovector_small<l>& A, const drovector_small<l>& B)
{
dgematrix_small<l,l> M;
for(long i=0; i<l; i++){
for(long j=0; j<l; j++){
M(i,j) =A(i)*B(j);
}
}
return M;
}
//=============================================================================
template<long l>
inline double& dcovector_small<l>::operator()(const long& k)
{
return array[k];
}
//=============================================================================
template<long l>
inline double dcovector_small<l>::operator()(const long& k) const
{
return array[k];
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//=============================================================================
template<long l>
inline std::ostream& operator<<(std::ostream& s, const dcovector_small<l>& A)
{
s << std::setiosflags(std::ios::showpos);
for(long i=0; i<l; i++){
s << A(i) << std::endl;
}
return s;
}
//=============================================================================
/*! */
template<long l>
inline dcovector_small<l> operator+(const dcovector_small<l>& A)
{
dcovector_small<l> X;
for(long i=0; i<l; i++){
X(i)=+A(i);
}
return X;
}
//=============================================================================
/*! */
template<long l>
inline dcovector_small<l> operator-(const dcovector_small<l>& A)
{
dcovector_small<l> X;
for(long i=0; i<l; i++){
X(i)=-A(i);
}
return X;
}