equation.h
Go to the documentation of this file.
1 #ifndef EQUATIONH
2 #define EQUATIONH
3 
4 #include "boolean.h"
5 #include "interval.h"
6 #include "variables.h"
7 #include "variable_set.h"
8 #include "monomial.h"
9 #include "linear_constraint.h"
10 #include "csmapping.h"
11 
12 #include <stdlib.h>
13 
14 
31 #define MAX_TERMS_SIMP 1
32 
33 /************************************************************************************/
40 #define INIT_NUM_MONOMIALS 100
41 /************************************************************************************/
42 
43 /************************************************************************************/
44 
45 
53 #define EMPTY_EQUATION NO_UINT
54 
62 #define LINEAR_EQUATION 0
63 
71 #define BILINEAR_EQUATION 1
72 
80 #define CIRCLE_EQUATION 2
81 
89 #define SADDLE_EQUATION 3
90 
98 #define BILINEAL_MONOMIAL_EQUATION 4
99 
107 #define PARABOLA_EQUATION 5
108 
116 #define SPHERE_EQUATION 6
117 
126 #define GENERAL_EQUATION 7
127 
135 #define UNKNOWN_EQ_TYPE 8
136 
137 /************************************************************************************/
138 /************************************************************************************/
146 #define SYSTEM_EQ 0
147 
155 #define COORD_EQ 1
156 
164 #define DUMMY_EQ 2
165 
174 #define DERIVED_EQ 3
175 
182 #define NOTYPE_EQ 4
183 /************************************************************************************/
184 /************************************************************************************/
189 #define GEQ 0
190 
195 #define LEQ 1
196 
201 #define EQU 2
202 
207 #define NOCMP 3
208 
209 /************************************************************************************/
210 
236 typedef struct {
237  unsigned int type;
239  boolean polynomial;
241  unsigned int cmp;
242  unsigned int order;
243  double value;
245  unsigned int maxMonomials;
246  unsigned int nMonomials;
250 } Tequation;
251 
259 void InitEquation(Tequation *eq);
260 
270 void ResetEquation(Tequation *eq);
271 
272 
285 
298 
307 void CopyEquation(Tequation *eq_dst,Tequation *eq_orig);
308 
325 void RewriteEquation2Simp(double epsilon,Tmapping *map,Tequation *eqOut,Tequation *eq);
326 
327 
342 void RewriteEquation2Orig(Tmapping *map,Tequation *eqOut,Tequation *eq);
343 
353 void AccumulateEquations(Tequation *eqn,double ct,Tequation *eq);
354 
355 
367 void VarAccumulateEquations(Tequation *eqn,unsigned int v,Tequation *eq);
368 
378 void ProductEquations(Tequation *eq1,Tequation *eq2,Tequation *eqOut);
379 
392 unsigned int FixVariableInEquation(double epsilon,unsigned int nv,double b,Tequation *eq);
393 
408 unsigned int ReplaceVariableInEquation(double epsilon,unsigned int nv,
409  TLinearConstraint *lc,Tequation *eq);
410 
422 void CtScaleEquation(double ct,Tequation *eq);
423 
424 
435 void VarScaleEquation(unsigned int v,Tequation *eq);
436 
449 void NormalizeEquation(Tequation *eq);
450 
468 boolean CleanInfEquation(Tequation *eq_in,Tinterval *varValues,boolean *changed,Tequation *eq_out);
469 
504 boolean IsSimplificable(unsigned int simpLevel,unsigned int nTerms,boolean *systemVars,Tbox *cb,
505  unsigned int *v,TLinearConstraint *lc,
506  Tequation *eq);
507 
516 void SetEquationCmp(unsigned int cmp,Tequation *eq);
517 
526 void SetEquationType(unsigned int type,Tequation *eq);
527 
528 
537 void SetEquationValue(double v,Tequation *eq);
538 
550 boolean EmptyEquation(Tequation *eq);
551 
561 boolean LinearEquation(Tequation *eq);
562 
572 boolean BilinearEquation(Tequation *eq);
573 
585 boolean CircleEquation(Tequation *eq);
586 
598 boolean SphereEquation(Tequation *eq);
599 
610 boolean SaddleEquation(Tequation *eq);
611 
633 
644 boolean ParabolaEquation(Tequation *eq);
645 
656 boolean PolynomialEquation(Tequation *eq);
657 
667 unsigned int GetEquationCmp(Tequation *eq);
668 
678 unsigned int GetEquationType(Tequation *eq);
679 
689 double GetEquationValue(Tequation *eq);
690 
701 void GetEquationBounds(Tinterval *bounds,Tequation *eq);
702 
712 unsigned int GetEquationOrder(Tequation *eq);
713 
726 
736 unsigned int GetEquationNumVariables(Tequation *eq);
737 
754 unsigned int CmpEquations(Tequation *eq1,Tequation *eq2);
755 
770 void AddScaledMonomial(double sc,Tmonomial* f,Tequation *eq);
771 
784 void AddMonomial(Tmonomial*f,Tequation *eq);
785 
795 void GenerateParabolaEquation(unsigned int vx,unsigned int vy,Tequation *eq);
796 
807 void GenerateScaledParabolaEquation(double s,unsigned int vx,unsigned int vy,Tequation *eq);
808 
821 void GenerateSaddleEquation(unsigned int vx,unsigned int vy,unsigned int vz,
822  Tequation *eq);
823 
824 
838 void GenerateScaledSaddleEquation(double s,
839  unsigned int vx,unsigned int vy,unsigned int vz,
840  Tequation *eq);
841 
855 void GenerateGeneralNormEquation(unsigned int nv,unsigned int *v,double n,Tequation *eq);
868 void GenerateNormEquation(unsigned int vx,unsigned int vy,unsigned int vz,
869  double n,
870  Tequation *eq);
901 void GenerateCrossProductEquations(unsigned int v1x,unsigned int v1y,unsigned int v1z,
902  unsigned int v2x,unsigned int v2y,unsigned int v2z,
903  unsigned int v3x,unsigned int v3y,unsigned int v3z,
904  unsigned int vs,
905  double s,
906  Tequation *eq);
907 
934 void GenerateDotProductEquation(unsigned int v1x,unsigned int v1y,unsigned int v1z,
935  unsigned int v2x,unsigned int v2y,unsigned int v2z,
936  unsigned int vc,
937  double c,
938  Tequation *eq);
939 
953 unsigned int FindMonomial(Tmonomial *f,Tequation *eq);
954 
966 Tmonomial *GetMonomial(unsigned int i,Tequation *eq);
967 
977 unsigned int GetNumMonomials(Tequation *eq);
978 
996 
1013 double EvaluateWholeEquation(double *varValues,Tequation *eq);
1014 
1030 double EvaluateEquation(double *varValues,Tequation *eq);
1031 
1044 void EvaluateEquationInt(Tinterval *varValues,Tinterval *i_out,Tequation *eq);
1045 
1055 void DeriveEquation(unsigned int nv,Tequation *d,Tequation *eq);
1056 
1075 void PrintMonomials(FILE *f,char **varNames,Tequation *eq);
1076 
1091 void PrintEquation(FILE *f,char **varNames,Tequation *eq);
1092 
1100 void DeleteEquation(Tequation *eq);
1101 
1102 #endif
Definition of the boolean type.
unsigned int GetEquationOrder(Tequation *eq)
Gets the equation order.
Definition: equation.c:1173
double EvaluateEquation(double *varValues, Tequation *eq)
Evaluates an equation in a given point.
Definition: equation.c:1633
void AccumulateEquations(Tequation *eqn, double ct, Tequation *eq)
Adds a scaled equation to another equation.
Definition: equation.c:366
void CopyEquation(Tequation *eq_dst, Tequation *eq_orig)
Copy constructor.
Definition: equation.c:216
Definition of the Tvariable_set type and the associated functions.
void GenerateCrossProductEquations(unsigned int v1x, unsigned int v1y, unsigned int v1z, unsigned int v2x, unsigned int v2y, unsigned int v2z, unsigned int v3x, unsigned int v3y, unsigned int v3z, unsigned int vs, double s, Tequation *eq)
Construtor. Generates the three equations of the cross product of two unitary vectors.
Definition: equation.c:1464
void GenerateScaledParabolaEquation(double s, unsigned int vx, unsigned int vy, Tequation *eq)
Construtor. Generates a scaled parabola equation.
Definition: equation.c:1366
unsigned int GetEquationCmp(Tequation *eq)
Gets the type of relational operator of the equation.
Definition: equation.c:1139
void GenerateGeneralNormEquation(unsigned int nv, unsigned int *v, double n, Tequation *eq)
Construtor. Generates an equation that is the norm of a vector.
Definition: equation.c:1443
void GenerateSaddleEquation(unsigned int vx, unsigned int vy, unsigned int vz, Tequation *eq)
Construtor. Generates a saddle equation.
Definition: equation.c:1392
Definition of the Tvariables type and the associated functions.
A linear constraint with an associated error.
void ResetEquation(Tequation *eq)
Reset equation information.
Definition: equation.c:442
void GenerateScaledSaddleEquation(double s, unsigned int vx, unsigned int vy, unsigned int vz, Tequation *eq)
Construtor. Generates a scaled saddle equation.
Definition: equation.c:1398
void VarAccumulateEquations(Tequation *eqn, unsigned int v, Tequation *eq)
Adds an equation scaled with a variable to another equation.
Definition: equation.c:377
boolean CleanInfEquation(Tequation *eq_in, Tinterval *varValues, boolean *changed, Tequation *eq_out)
Removes the monomials that evaluate to inf.
Definition: equation.c:752
boolean ParabolaEquation(Tequation *eq)
Identify scaled parabola equations.
Definition: equation.c:1121
void SetEquationValue(double v, Tequation *eq)
Changes the right-hand value of the equation.
Definition: equation.c:1026
unsigned int maxMonomials
Definition: equation.h:245
boolean BilinealMonomialEquation(Tequation *eq)
Identify single bilineal monomial equations.
Definition: equation.c:1109
Mapping between the sets of variables in two different cuiksystems.
Definition: csmapping.h:53
unsigned int nMonomials
Definition: equation.h:246
Tmonomial ** monomials
Definition: equation.h:247
void LinearEquation2LinearConstraint(TLinearConstraint *lc, Tequation *eq)
Converts a linear equation into a linear constraint.
Definition: equation.c:1597
void GetEquationBounds(Tinterval *bounds, Tequation *eq)
Returns the right-hand side of the equation in the form of an interval.
Definition: equation.c:1154
void ProductEquations(Tequation *eq1, Tequation *eq2, Tequation *eqOut)
Product of two equations.
Definition: equation.c:398
Tvariable_set vars
Definition: equation.h:249
unsigned int cmp
Definition: equation.h:241
Tmonomial * GetMonomial(unsigned int i, Tequation *eq)
Gets a monomial from an equation.
Definition: equation.c:1584
boolean CircleEquation(Tequation *eq)
Identify circle equations.
Definition: equation.c:1068
void GenerateParabolaEquation(unsigned int vx, unsigned int vy, Tequation *eq)
Construtor. Generates a parabola equation.
Definition: equation.c:1361
void EquationFromLinearConstraint(TLinearConstraint *lc, Tequation *eq)
Defines a new equation from a linear constraint.
Definition: equation.c:106
boolean polynomial
Definition: equation.h:239
void RewriteEquation2Orig(Tmapping *map, Tequation *eqOut, Tequation *eq)
Applies the un-simplification mapping to an equation.
Definition: equation.c:321
void NormalizeEquation(Tequation *eq)
Normalizes an equation.
Definition: equation.c:703
void EvaluateEquationInt(Tinterval *varValues, Tinterval *i_out, Tequation *eq)
Interval evaluation of an equation.
Definition: equation.c:1649
Tvariable_set * GetEquationVariables(Tequation *eq)
Gets the set of variables equation used in the equation.
Definition: equation.c:1178
void SetEquationCmp(unsigned int cmp, Tequation *eq)
Changes the relational operator (LEQ, GEQ, EQU) of the equation.
Definition: equation.c:1018
void GenerateDotProductEquation(unsigned int v1x, unsigned int v1y, unsigned int v1z, unsigned int v2x, unsigned int v2y, unsigned int v2z, unsigned int vc, double c, Tequation *eq)
Construtor. Generates the equation of the dot product of two unitary vectors.
Definition: equation.c:1526
unsigned int order
Definition: equation.h:242
An equation.
Definition: equation.h:236
boolean SaddleEquation(Tequation *eq)
Identify scaled saddle equations.
Definition: equation.c:1096
void VarScaleEquation(unsigned int v, Tequation *eq)
Scales an equation with a variable factor.
Definition: equation.c:669
void RewriteEquation2Simp(double epsilon, Tmapping *map, Tequation *eqOut, Tequation *eq)
Applies the simplification mapping to an equation.
Definition: equation.c:237
boolean PolynomialEquation(Tequation *eq)
Idetify polynomial equations.
Definition: equation.c:1134
A set of variable indexes with powers.
Definition: variable_set.h:131
A scaled product of powers of variables.
Definition: monomial.h:32
unsigned int FindMonomial(Tmonomial *f, Tequation *eq)
Searches for a given monomial in the equation.
Definition: equation.c:1561
unsigned int CmpEquations(Tequation *eq1, Tequation *eq2)
Equation comparison.
Definition: equation.c:1188
boolean BilinearEquation(Tequation *eq)
Identify bilinear equations.
Definition: equation.c:1049
A box.
Definition: box.h:83
boolean LinearEquation(Tequation *eq)
Identify linear equations.
Definition: equation.c:1036
void AddScaledMonomial(double sc, Tmonomial *f, Tequation *eq)
Adds a new scaled monomial to the equation.
Definition: equation.c:1263
void AddMonomial(Tmonomial *f, Tequation *eq)
Adds a new monomial to the equation.
Definition: equation.c:1356
void PrintMonomials(FILE *f, char **varNames, Tequation *eq)
Prints an equation as a set if monomials.
Definition: equation.c:1692
unsigned int type
Definition: equation.h:237
double EvaluateWholeEquation(double *varValues, Tequation *eq)
Evaluates an equation in a given point.
Definition: equation.c:1615
boolean IsSimplificable(unsigned int simpLevel, unsigned int nTerms, boolean *systemVars, Tbox *cb, unsigned int *v, TLinearConstraint *lc, Tequation *eq)
Identify equations than can trigger variable simplifications.
Definition: equation.c:840
boolean SphereEquation(Tequation *eq)
Identify sphere equations.
Definition: equation.c:1082
void InitEquation(Tequation *eq)
Constructor.
Definition: equation.c:86
double GetEquationValue(Tequation *eq)
Gets the right-hand value of the equation.
Definition: equation.c:1149
unsigned int GetNumMonomials(Tequation *eq)
Number of monomials in an equation.
Definition: equation.c:1592
void SetEquationType(unsigned int type, Tequation *eq)
Changes the type of the equation (SYSTEM_EQ, CARTESIAN_EQ, DUMMY_EQ, DERIVED_EQ). ...
Definition: equation.c:1013
void GenerateNormEquation(unsigned int vx, unsigned int vy, unsigned int vz, double n, Tequation *eq)
Construtor. Generates an equation that is the norm of a 3d vector.
Definition: equation.c:1431
void DeleteEquation(Tequation *eq)
Destructor.
Definition: equation.c:1748
boolean EmptyEquation(Tequation *eq)
Identify empty equations.
Definition: equation.c:1031
Definition of the Tmapping type and the associated functions.
Definition of the Tmonomial type and the associated functions.
unsigned int GetEquationNumVariables(Tequation *eq)
Gets the number of variables equation used in the equation.
Definition: equation.c:1183
void CtScaleEquation(double ct, Tequation *eq)
Scales an equation by a constant factor.
Definition: equation.c:652
Defines a interval.
Definition: interval.h:33
Definition of the TLinearConstraint type and the associated functions.
void PrintEquation(FILE *f, char **varNames, Tequation *eq)
Prints an equation.
Definition: equation.c:1714
void EquationFromLinearConstraintProduct(TLinearConstraint *lc1, TLinearConstraint *lc2, Tequation *eq)
Defines a new equation from the product of two linear constraints.
Definition: equation.c:156
void DeriveEquation(unsigned int nv, Tequation *d, Tequation *eq)
Derives an equation.
Definition: equation.c:1665
double value
Definition: equation.h:243
unsigned int ReplaceVariableInEquation(double epsilon, unsigned int nv, TLinearConstraint *lc, Tequation *eq)
Replaces a variable.
Definition: equation.c:481
unsigned int FixVariableInEquation(double epsilon, unsigned int nv, double b, Tequation *eq)
Turns a variable into a constant.
Definition: equation.c:461
unsigned int GetEquationType(Tequation *eq)
Gets the equation type.
Definition: equation.c:1144
Definition of the Tinterval type and the associated functions.