(Event+Time).Variant Operators  2.3
Operators for Timed Discrete Event Systems in Dioids
seriesEd.h
Go to the documentation of this file.
1 #ifndef SERIESED_H
2 #define SERIESED_H
3 #include "polyEd.h"
4 #include "../wrapperMMGD/seriesWrapper.h"
5 #include "../wrapperMMGD/matrixWrapper.h"
6 #include<iostream>
7 #include "../common/ISterm.h"
8 
9 
15 namespace etvo
16 {
40  class seriesEd:public ISterm
41  {
42  private:
43  bool _droite; // true if right-form
44  polyEd _p; // _p polynomial
45  polyEd _q; // _q polynomial
46  long _gammaR; // exponent of gn in p+q.[gn.dt]*
47  long _gammaL; // exponent of gn in p+[gn.dt]*.q
48  long _delta; // exponent of dt in p+[gn.dt]*.q or in p+q.[gn.dt]*
49 
50  // internal usefull functions to simplify series in right-form
51  void reductionPeriodicR();
52  void toProperFormR();
53  void toProperPeriodicR();
54  void toProperTransientR();
55  void reductionTransientR();
56 
57  // internal usefull functions to simplify series in left-form
58  void reductionPeriodicL();
59  void toProperFormL();
60  void toProperPeriodicL();
61  void toProperTransientL();
62  void reductionTransientL();
63  void rightLeft();
64  void degenerateCase();
65 
66  // internal usefull functions to compute the domination point for sums
67  static long getDominationTimeLH(const seriesEd & slow, const seriesEd & fast);
68  static long getDominationTime(const seriesEd & s1, const seriesEd & s2);
69 
70  static seriesEd star(const etvo::series & s, unsigned nablaM, int gK);
71 
72  public:
74  static seriesEd Epsilon();
76  static seriesEd Top();
78  static seriesEd E();
79 
81  seriesEd();
82 
86  seriesEd(bool TopNotE);
87 
89  seriesEd(const Ed & m);
90 
92  seriesEd(const polyEd & q);
93 
97  seriesEd(const polyEd & p,const polyEd & q, long n, long t, bool right = true);
101  seriesEd(const polyEd & p, const polyEd & q, const gd & r,bool right = 1);
102 
104  bool isRightForm() const;
106  bool isLeftForm() const;
108  bool isPolynomial() const;
110  bool isProper() const;
112  bool isE() const;
114  void canon();
115 
117  void toRight();
118 
120  void toLeft();
122  polyEd getP() const;
124  polyEd getQ() const;
126  gd getR() const;
127 
129  std::vector<series> toImpulseResponse() const;
130 
132  void getLcmGain(unsigned int & mu, unsigned int& beta) const;
134  void getMaxGain(unsigned int& mu, unsigned int& beta) const;
136  std::pair<unsigned int, unsigned int> getMaxGain() const;
137 
140  std::string toString() const;
143  std::string toStringAsMuVar() const;
144 
146  bool operator==(const seriesEd & s) const;
148  bool operator!=(const seriesEd &)const;
150  bool operator<=(const seriesEd &) const;
152  bool operator>=(const seriesEd &) const;
153 
156  seriesEd oplus(const seriesEd & s) const;
159  seriesEd oplus(const polyEd & p) const;
160 
162  seriesEd otimes(const seriesEd & s) const;
164  seriesEd otimes(const Ed & m) const;
166  seriesEd otimes(const polyEd & p) const;
167 
170  static seriesEd oplus(const polyEd & p, const seriesEd & s);
172  static seriesEd otimes(const Ed & m, const seriesEd & s);
174  static seriesEd otimes(const polyEd & m, const seriesEd & s);
175 
178  seriesEd operator+(const seriesEd & s) const;
180  seriesEd operator*(const seriesEd & s) const;
182  seriesEd operator*(const Ed & m) const;
184  seriesEd operator*(const polyEd & p) const;
185 
189  seriesEd star() const;
190 
194  seriesEd starAlternate() const;
195 
198  seriesEd starCD() const;
201  seriesEd starPolyBased() const;
202 
204  seriesEd lfrac(const seriesEd & s) const;
206  seriesEd rfrac(const seriesEd & s) const;
207 
209  seriesEd otimesCD(const seriesEd & s) const;
211  seriesEd oplusCD(const seriesEd & s) const;
213  seriesEd infCD(const seriesEd & s) const;
215  seriesEd inf(const seriesEd & s) const;
217  seriesEd lfracCD(const seriesEd & s) const;
219  seriesEd rfracCD(const seriesEd & s) const;
220 
221  // to do : develop inf as oplus is developped(domination ...)
222  // seriesEd inf(const seriesEd & s) const;
223  // to do : develop lfrac and rfrac by alternative algorithm
224  // seriesEd lfrac(const seriesEd & s) const;
225  // seriesEd rfrac(const seriesEd & s) const;
226 
228  static polyEd getPolyUpTo(int deltaT, const polyEd & p, const polyEd & q, const gd & r, bool droite = true);
230  polyEd getPolyUpTo(int deltaT) const;
231 
233  static seriesEd toCausal(const seriesEd & s);
234 
236  static seriesEd toSeriesEd(const series & s);
238  series toSeries() const;
240  static seriesEd coreToSeriesEd(const matrix<series> & C);
241 
244  etvo::matrix<series> getCore(unsigned ratio=1) const;
247  etvo::matrix<series> getCoreMax(unsigned ratio=1) const;
248  static etvo::matrix<series> getMatN(unsigned size);
249  };
250 
251  std::ostream & operator<<(std::ostream & f, const seriesEd & s);
252 
253  // necessary for matrix<T> computations.
254  seriesEd star(const seriesEd & s);
255  seriesEd oplus(const seriesEd &, const seriesEd &);
256  seriesEd inf(const seriesEd &, const seriesEd &);
257  seriesEd otimes(const seriesEd &, const seriesEd &);
258  seriesEd lfrac(const seriesEd &, const seriesEd &);
259  seriesEd rfrac(const seriesEd &, const seriesEd &);
260 
262  seriesEd eg(int n);
264  seriesEd ed(int t);
266  seriesEd em(unsigned m);
268  seriesEd eb(unsigned b);
270  seriesEd en(unsigned n);
272  seriesEd em(const std::vector<unsigned> & seq);
274  seriesEd eb(const std::vector<unsigned> & seq);
275 
276 } // end namespace etvo
277 
278 #endif // SERIESED_H
seriesEd starCD() const
Definition: seriesEd.cpp:1324
seriesEd rfrac(const seriesEd &s) const
right-product residuation : s1.rfrac(s2) = s1/s2
Definition: seriesEd.cpp:1401
seriesEd inf(const seriesEd &s) const
inf of series
Definition: seriesEd.cpp:1361
Class for polynomials in the semiring E[[d]].
Definition: polyEd.h:31
gd getR() const
getter returning r
Definition: seriesEd.cpp:262
seriesEd eg(int n)
element g^n in E[[d]]
Definition: seriesEd.cpp:15
static seriesEd coreToSeriesEd(const matrix< series > &C)
conversion CORE decomposition -> seriesEd
Definition: seriesEd.cpp:1598
bool operator<=(const seriesEd &) const
check order on series
Definition: seriesEd.cpp:1433
bool operator>=(const seriesEd &) const
check order on series
Definition: seriesEd.cpp:1477
std::string toStringAsMuVar() const
Definition: seriesEd.cpp:61
seriesEd ed(int t)
element d^t in E[[d]]
Definition: seriesEd.cpp:16
void getLcmGain(unsigned int &mu, unsigned int &beta) const
returns the Least Common multiple of gains in the terms of the current series
Definition: seriesEd.cpp:658
static seriesEd toCausal(const seriesEd &s)
returns the projection of s into the set of causal series in E[[d]] (not reliable yet) ...
Definition: seriesEd.cpp:1673
seriesEd()
Default initialization : epsilon (p=eps q=eps r=g1.d0)
Definition: seriesEd.cpp:173
seriesEd en(unsigned n)
element Nabla_n=mu_n.beta_n in E[[d]]
Definition: seriesEd.cpp:19
etvo::matrix< series > getCoreMax(unsigned ratio=1) const
Definition: seriesEd.cpp:1483
seriesEd star() const
Definition: seriesEd.cpp:1231
bool isPolynomial() const
check if it is a polynomial
Definition: seriesEd.cpp:137
std::ostream & operator<<(std::ostream &f, const dDd &m)
Definition: dDd.cpp:313
Definition: matrixWrapper.h:33
Definition: etvoException.cpp:5
seriesEd otimes(const seriesEd &s) const
product of series in E[[d]] : s1.otimes(s2)
Definition: seriesEd.cpp:1162
seriesEd eb(unsigned w)
element beta_b in E[[d]]
Definition: seriesEd.cpp:18
seriesEd rfracCD(const seriesEd &s) const
operations via Core Decomposition : rfrac
Definition: seriesEd.cpp:1381
bool isLeftForm() const
check if the current series in Left form
Definition: seriesEd.cpp:274
Wrapper class to mmgd::serie from MinMaxGD library.
Definition: seriesWrapper.h:37
bool operator==(const seriesEd &s) const
check equality
Definition: seriesEd.cpp:1406
seriesEd oplus(const seriesEd &s) const
Definition: seriesEd.cpp:888
seriesEd otimesCD(const seriesEd &s) const
operations via Core Decomposition : otimes
Definition: seriesEd.cpp:1075
seriesEd starPolyBased() const
Definition: seriesEd.cpp:1711
seriesEd lfracCD(const seriesEd &s) const
operations via Core Decomposition : lfrac
Definition: seriesEd.cpp:1366
void canon()
leads to the canonical left or right form (the simplest proper form)
Definition: seriesEd.cpp:376
seriesEd em(unsigned w)
element mu_m in E[[d]]
Definition: seriesEd.cpp:17
seriesEd operator*(const seriesEd &s) const
product of series in E[[d]] : s1*s2
Definition: seriesEd.cpp:1214
static seriesEd E()
The description of g0.d0 as seriesEd.
Definition: seriesEd.cpp:132
polyEd getP() const
getter returning p
Definition: seriesEd.cpp:252
void toLeft()
to Left form
Definition: seriesEd.cpp:295
static seriesEd Top()
The Top description of seriesEd.
Definition: seriesEd.cpp:127
seriesEd operator+(const seriesEd &s) const
Definition: seriesEd.cpp:866
seriesEd lfrac(const seriesEd &s) const
left-product residuation : s1.lfrac(s2) = s2
Definition: seriesEd.cpp:1396
std::pair< unsigned int, unsigned int > getMaxGain() const
returns the gain as a pair (mu,beta)
Definition: seriesEd.cpp:629
bool isProper() const
check if it is in proper form
Definition: seriesEd.cpp:345
series toSeries() const
projection seriesEd->series (zero slice)
Definition: seriesEd.cpp:1642
seriesEd oplusCD(const seriesEd &s) const
operations via Core Decomposition : oplus
Definition: seriesEd.cpp:1054
Class for ultimately-periodic series in the semiring E[[d]]. In a general way, the series are describ...
Definition: seriesEd.h:40
bool isRightForm() const
check if the current series in Right form
Definition: seriesEd.cpp:269
Class for monomials in the semiring E[[d]].
Definition: Ed.h:24
static seriesEd toSeriesEd(const series &s)
injection series(mmgd)->seriesEd
Definition: seriesEd.cpp:1630
seriesEd starAlternate() const
Definition: seriesEd.cpp:1250
static polyEd getPolyUpTo(int deltaT, const polyEd &p, const polyEd &q, const gd &r, bool droite=true)
static function to develop the first terms of p+q.[r]* or p+[r]*.q up to a given deltaT time value ...
Definition: seriesEd.cpp:755
etvo::matrix< series > getCore(unsigned ratio=1) const
Definition: seriesEd.cpp:1493
Wrapper class to mmgd::gd from MinMaxGD library.
Definition: gdWrapper.h:36
static seriesEd Epsilon()
The epsilon description of seriesEd.
Definition: seriesEd.cpp:122
std::vector< series > toImpulseResponse() const
returns the response to I,g1.I,g2.I ...
Definition: seriesEd.cpp:1658
seriesEd infCD(const seriesEd &s) const
operations via Core Decomposition : inf
Definition: seriesEd.cpp:1341
polyEd getQ() const
getter returning q
Definition: seriesEd.cpp:257
Abstract base class to handle Idempotent Semiring terms.
Definition: ISterm.h:27
std::string toString() const
Definition: seriesEd.cpp:89
bool isE() const
check if it is a neutral seriesEd
Definition: seriesEd.cpp:142
bool operator!=(const seriesEd &) const
check difference
Definition: seriesEd.cpp:1421
void toRight()
to Right form
Definition: seriesEd.cpp:290