Introduction
Introduction Statistics Contact Development Disclaimer Help
tvector_arithmetic.h - numeric - C++ library with numerical algorithms
git clone git://src.adamsgaard.dk/numeric
Log
Files
Refs
LICENSE
---
tvector_arithmetic.h (2619B)
---
1 // Make sure header is only included once
2 #ifndef VECTOR_ARITHMETIC_H_
3 #define VECTOR_ARITHMETIC_H_
4
5 #include <vector>
6 #include <cmath> // for sqrt
7 #include "typedefs.h"
8
9 //// Overload vector methods to allow scalar-
10 //// and element-wise arithmetic operations
11
12 // Scalar multiplication (same scalar for real and imaginary parts)
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 // Scalar multiplication
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 // Scalar division
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 // Element-wise addition
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 // Element-wise subtraction
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 // Element-wise multiplication
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 // Normalize vector
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
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.