00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _MV_BLAS1_TPL_H_
00026 #define _MV_BLAS1_TPL_H_
00027
00028
00029
00030 template <class TYPE>
00031 MV_Vector<TYPE>& operator*=(MV_Vector<TYPE> &x, const TYPE &a)
00032 {
00033 int N = x.size();
00034 for (int i=0;i<N;i++)
00035 x(i) *= a;
00036 return x;
00037 }
00038
00039 template <class TYPE>
00040 MV_Vector<TYPE> operator*(const TYPE &a, const MV_Vector<TYPE> &x)
00041 {
00042 int N = x.size();
00043 MV_Vector<TYPE> result(N);
00044 for (int i=0;i<N;i++)
00045 result(i) = x(i)*a;
00046 return result;
00047 }
00048
00049 template <class TYPE>
00050 MV_Vector<TYPE> operator*(const MV_Vector<TYPE> &x, const TYPE &a)
00051 {
00052
00053
00054
00055
00056
00057
00058
00059
00060 int N = x.size();
00061 MV_Vector<TYPE> result(N);
00062 for (int i=0;i<N;i++)
00063 result(i) = x(i)*a;
00064 return result;
00065
00066 }
00067
00068 template <class TYPE>
00069 MV_Vector<TYPE> operator+(const MV_Vector<TYPE> &x, const MV_Vector<TYPE> &y)
00070 {
00071 int N = x.size();
00072 if (N != y.size())
00073 {
00074 cout << "Incompatible vector lengths in +." << endl;
00075 exit(1);
00076 }
00077
00078 MV_Vector<TYPE> result(N);
00079 for (int i=0;i<N; i++)
00080 result(i) = x(i) + y(i);
00081 return result;
00082 }
00083
00084 template <class TYPE>
00085 MV_Vector<TYPE> operator-(const MV_Vector<TYPE> &x, const MV_Vector<TYPE> &y)
00086 {
00087 int N = x.size();
00088 if (N != y.size())
00089 {
00090 cout << "Incompatible vector lengths in -." << endl;
00091 exit(1);
00092 }
00093
00094 MV_Vector<TYPE> result(N);
00095 for (int i=0;i<N; i++)
00096 result(i) = x(i) - y(i);
00097 return result;
00098 }
00099
00100
00101 template <class TYPE>
00102 MV_Vector<TYPE>& operator+=(MV_Vector<TYPE> &x, const MV_Vector<TYPE> &y)
00103 {
00104 int N = x.size();
00105 if (N != y.size())
00106 {
00107 cout << "Incompatible vector lengths in -." << endl;
00108 exit(1);
00109 }
00110
00111 for (int i=0;i<N; i++)
00112 x(i) += y(i);
00113 return x;
00114 }
00115
00116
00117 template <class TYPE>
00118 MV_Vector<TYPE>& operator-=(MV_Vector<TYPE> &x, const MV_Vector<TYPE> &y)
00119 {
00120 int N = x.size();
00121 if (N != y.size())
00122 {
00123 cout << "Incompatible vector lengths in -." << endl;
00124 exit(1);
00125 }
00126
00127 for (int i=0;i<N; i++)
00128 x(i) -= y(i);
00129 return x;
00130 }
00131
00132
00133
00134
00135
00136
00137 template <class TYPE>
00138 TYPE dot(const MV_Vector<TYPE> &x, const MV_Vector<TYPE> &y)
00139 {
00140
00141
00142 if (x.size() != y.size())
00143 {
00144 cout << "Incompatible dimensions in dot(). " << endl;
00145 exit(1);
00146 }
00147
00148 TYPE temp=0.0;
00149 for (int i=0; i<x.size();i++)
00150 temp += x(i)*y(i);
00151 return temp;
00152 }
00153
00154 template <class TYPE>
00155 TYPE norm(const MV_Vector<TYPE> &x)
00156 {
00157 TYPE temp = dot(x,x);
00158 return sqrt(temp);
00159 }
00160
00161 #endif
00162