修订版 | 27 (tree) |
---|---|
时间 | 2010-10-28 14:43:48 |
作者 | (del#42041) |
Added manipulate functions for partcles
@@ -1,6 +1,6 @@ | ||
1 | 1 | CC=@CC@ |
2 | 2 | CXX=@CXX@ |
3 | -SRCS=particle.cc particles.cc filter.cc edit.cc | |
3 | +SRCS=particle.cc particles.cc filter.cc | |
4 | 4 | OBJS=$(SRCS:.cc=.o) |
5 | 5 | HEADS=$(SRCS:.cc=.h) |
6 | 6 | TARGETS=libparticle.a |
@@ -1,3 +1,6 @@ | ||
1 | +/** | |
2 | + this class repsesents one particle. | |
3 | +*/ | |
1 | 4 | #include <particle.h> |
2 | 5 | |
3 | 6 |
@@ -12,6 +15,8 @@ | ||
12 | 15 | template<class C> Particle<C>::~Particle() |
13 | 16 | { |
14 | 17 | } |
18 | + | |
19 | +// Copy constructor | |
15 | 20 | template<class C> Particle<C>::Particle(const Particle &f) |
16 | 21 | { |
17 | 22 | p = f.p; |
@@ -35,6 +40,19 @@ | ||
35 | 40 | p = f; |
36 | 41 | return(*this); |
37 | 42 | } |
43 | +template<class C> Particle<C> &Particle<C>::operator+=(Particle<C> a) | |
44 | +{ | |
45 | + for(int i=0;i<size();++i) | |
46 | + { | |
47 | + p[i] += a[i]; | |
48 | + } | |
49 | + return(*this); | |
50 | +} | |
51 | +template<class C> Particle<C> Particle<C>::operator+(Particle<C> &a) | |
52 | +{ | |
53 | + Particle<C> c = *this; | |
54 | + return(c+=a); | |
55 | +} | |
38 | 56 | template<class C> C &Particle<C>::operator[](unsigned int i) |
39 | 57 | { |
40 | 58 | return(p[i]); |
@@ -53,7 +71,7 @@ | ||
53 | 71 | { |
54 | 72 | return(dimension); |
55 | 73 | } |
56 | -template<class C> vector<C> Particle<C>::get_particle() | |
74 | +template<class C> vector<C> Particle<C>::toVector() | |
57 | 75 | { |
58 | 76 | return(p); |
59 | 77 | } |
@@ -44,6 +44,15 @@ | ||
44 | 44 | v.resize(number, dimension); |
45 | 45 | return(true); |
46 | 46 | } |
47 | +bool Filter::createInitialParticles(double d) | |
48 | +{ | |
49 | + if(number<0||dimension<0) return(false); | |
50 | +// x = new Particles(number, dimension); | |
51 | +// v = new Particles(number, dimension); | |
52 | + x.resize(number, dimension); | |
53 | + v.resize(number, dimension); | |
54 | + return(true); | |
55 | +} | |
47 | 56 | bool Filter::create_system_noise() |
48 | 57 | { |
49 | 58 | for(int i=0;i<v.size();++i) |
@@ -51,7 +60,6 @@ | ||
51 | 60 | for(int j=0;j<v[i].size();++j) |
52 | 61 | { |
53 | 62 | v[i][j] = mtrand.randNorm(0.0, 1.2); // ToDO: functionize |
54 | -//cout<<"noise="<<v[i][j]<<endl; | |
55 | 63 | } |
56 | 64 | } |
57 | 65 | return(true); |
@@ -66,13 +74,13 @@ | ||
66 | 74 | v.dump_particles(); |
67 | 75 | return(0); |
68 | 76 | } |
69 | -string Filter::predict_particles_toString() | |
77 | +Particles<double> Filter::get_predict_particles() | |
70 | 78 | { |
71 | - return(x.toString()); | |
79 | + return(x); | |
72 | 80 | } |
73 | -string Filter::system_noise_toString() | |
81 | +Particles<double> Filter::get_system_noise() | |
74 | 82 | { |
75 | - return(v.toString()); | |
83 | + return(v); | |
76 | 84 | } |
77 | 85 | bool Filter::set_state_func(Particles<double> (*func)(Particles<double> &p, Particles<double> &v)) |
78 | 86 | { |
@@ -19,10 +19,12 @@ | ||
19 | 19 | Particle& operator=(const Particle &f); |
20 | 20 | int resize(int n); |
21 | 21 | int size(); |
22 | - vector<C> get_particle(); | |
22 | + vector<C> toVector(); | |
23 | 23 | string toString(); |
24 | 24 | int dump(); |
25 | 25 | Particle& operator=(vector<C> &f); |
26 | + Particle<C> &operator+=(Particle<C> a); | |
27 | + Particle<C> operator+(Particle<C> &a); | |
26 | 28 | C &operator[](unsigned int i); |
27 | 29 | C operator[](unsigned int i) const; |
28 | 30 | }; |
@@ -12,6 +12,44 @@ | ||
12 | 12 | { |
13 | 13 | resize(number, dimension); |
14 | 14 | } |
15 | +// Copy constructor | |
16 | +template<class C> Particles<C>::Particles(const Particles &f) | |
17 | +{ | |
18 | + number = f.number; | |
19 | + p.resize(number); | |
20 | + for(unsigned int i=0;i<p.size();++i) | |
21 | + { | |
22 | + p[i] = f[i]; | |
23 | + } | |
24 | +} | |
25 | +// Copy substitution | |
26 | +template<class C> Particles<C>& Particles<C>::operator=(const Particles &f) | |
27 | +{ | |
28 | + if(this != &f) | |
29 | + { | |
30 | + number = f.number; | |
31 | + p.resize(number); | |
32 | + for(unsigned int i=0;i<p.size();++i) | |
33 | + { | |
34 | + p[i] = f[i]; | |
35 | + } | |
36 | + } | |
37 | + return(*this); | |
38 | +} | |
39 | +template<class C> Particles<C> &Particles<C>::operator+=(Particles<C> a) | |
40 | +{ | |
41 | + for(int i=0;i<size();++i) | |
42 | + { | |
43 | + p[i] += a[i]; | |
44 | + } | |
45 | + return(*this); | |
46 | +} | |
47 | +template<class C> Particles<C> Particles<C>::operator+(Particles<C> &a) | |
48 | +{ | |
49 | + Particles<C> c = *this; | |
50 | + return(c+=a); | |
51 | +} | |
52 | + | |
15 | 53 | template<class C> Particles<C>::~Particles() |
16 | 54 | { |
17 | 55 | } |
@@ -41,7 +79,7 @@ | ||
41 | 79 | { |
42 | 80 | return(p.at(i)); |
43 | 81 | } |
44 | -template<class C> vector<Particle<C> > Particles<C>::get_particles() | |
82 | +template<class C> vector<Particle<C> > Particles<C>::toVector() | |
45 | 83 | { |
46 | 84 | return(p); |
47 | 85 | } |
@@ -29,10 +29,11 @@ | ||
29 | 29 | bool setDimension(int d); |
30 | 30 | bool createInitialParticles(); |
31 | 31 | bool create_system_noise(); |
32 | + bool createInitialParticles(double d); | |
32 | 33 | int dump_predict_particles(); |
33 | 34 | Particles<double> get_particles(); |
34 | - string predict_particles_toString(); | |
35 | - string system_noise_toString(); | |
35 | + Particles<double> get_predict_particles(); | |
36 | + Particles<double> get_system_noise(); | |
36 | 37 | bool set_state_func(Particles<double> (*func)(Particles<double> &p, Particles<double> &v)); |
37 | 38 | bool set_robserve_func(double (*func)(Particles<double> &p, Particle<double> &q)); |
38 | 39 | bool set_robserve_jacobian_func(double (*func)(Particles<double> &p, Particle<double> &q)); |
@@ -13,12 +13,16 @@ | ||
13 | 13 | Particles(); |
14 | 14 | Particles(int number); |
15 | 15 | Particles(int number, int dimension); |
16 | + Particles(const Particles &f); | |
17 | + Particles<C>&operator=(const Particles &f); | |
18 | + Particles<C> &operator+=(Particles<C> a); | |
19 | + Particles<C> operator+(Particles<C> &a); | |
16 | 20 | ~Particles(); |
17 | 21 | bool resize(int number, int dimension); |
18 | 22 | int size(); |
19 | 23 | Particle<C> &operator[](unsigned int i); |
20 | 24 | Particle<C> operator[](unsigned int i) const; |
21 | - vector<Particle<C> > get_particles(); | |
25 | + vector<Particle<C> > toVector(); | |
22 | 26 | int dump_particles(); |
23 | 27 | string toString(); |
24 | 28 | }; |
@@ -1,6 +1,6 @@ | ||
1 | 1 | CC=gcc |
2 | 2 | CXX=g++ |
3 | -SRCS=particle.cc particles.cc filter.cc edit.cc | |
3 | +SRCS=particle.cc particles.cc filter.cc | |
4 | 4 | OBJS=$(SRCS:.cc=.o) |
5 | 5 | HEADS=$(SRCS:.cc=.h) |
6 | 6 | TARGETS=libparticle.a |