1
2 #ifndef VECTOR_ARITHMETIC_H_
3 #define VECTOR_ARITHMETIC_H_
4
5 #include <vector>
6 #include <cmath>
7 #include "typedefs.h"
8
9
10
11
12
13 std::vector<std::complex<Floattype> >
14 operator*(const std::vector<std::complex<Floattype> > vec,
15 const Floattype scalar)
16 {
17 std::vector<std::complex<Floattype> > result(vec.size());
18 for (Inttype i=0; i<vec.size(); ++i) {
19 result[i].real() = real(vec[i])*scalar;
20 result[i].imag() = imag(vec[i])*scalar;
21 }
22 return result;
23 }
24
25
26 std::vector<std::complex<Floattype> >
27 operator*(const std::vector<std::complex<Floattype> > vec,
28 const std::complex<Floattype> scalar)
29 {
30 std::vector<std::complex<Floattype> > result(vec.size());
31 for (Inttype i=0; i<(Inttype)vec.size(); ++i)
32 result[i] = vec[i]*scalar;
33 return result;
34 }
35
36
37 std::vector<std::complex<Floattype> >
38 operator/(const std::vector<std::complex<Floattype> > vec,
39 const std::complex<Floattype> scalar)
40 {
41 std::vector<std::complex<Floattype> > result(vec.size());
42 for (Inttype i=0; i<(Inttype)vec.size(); ++i)
43 result[i] = vec[i]/scalar;
44 return result;
45 }
46
47
48 std::vector<std::complex<Floattype> >
49 operator+(const std::vector<std::complex<Floattype> > vec1,
50 const std::vector<std::complex<Floattype> > vec2)
51 {
52 std::vector<std::complex<Floattype> > result(vec1.size());
53 for (Inttype i=0; i<(Inttype)vec1.size(); ++i)
54 result[i] = vec1[i] + vec2[i];
55 return result;
56 }
57
58
59 std::vector<std::complex<Floattype> >
60 operator-(const std::vector<std::complex<Floattype> > vec1,
61 const std::vector<std::complex<Floattype> > vec2)
62 {
63 std::vector<std::complex<Floattype> > result(vec1.size());
64 for (Inttype i=0; i<(Inttype)vec1.size(); ++i)
65 result[i] = vec1[i] - vec2[i];
66 return result;
67 }
68
69
70 std::vector<std::complex<Floattype> >
71 operator*(const std::vector<std::complex<Floattype> > vec1,
72 const std::vector<std::complex<Floattype> > vec2)
73 {
74 std::vector<std::complex<Floattype> > result(vec1.size());
75 for (Inttype i=0; i<(Inttype)vec1.size(); ++i)
76 result[i] = vec1[i] * vec2[i];
77 return result;
78 }
79
80
81 Floattype cnorm(const std::vector<std::complex<Floattype> > vec)
82 {
83 Floattype res = 0.0f;
84 for (Inttype i=0; i<(Inttype)vec.size(); ++i)
85 res += norm(vec[i])*norm(vec[i]);
86 return sqrt(res);
87 }
88
89 #endif