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 /************************************************************************************/
185 /************************************************************************************/
190 #define GEQ 0
191 
196 #define LEQ 1
197 
202 #define EQU 2
203 
208 #define NOCMP 3
209 
210 /************************************************************************************/
211 
237 typedef struct {
238  unsigned int type;
240  boolean polynomial;
242  unsigned int cmp;
243  unsigned int order;
244  double value;
246  unsigned int maxMonomials;
247  unsigned int nMonomials;
251 } Tequation;
252 
260 void InitEquation(Tequation *eq);
261 
271 void ResetEquation(Tequation *eq);
272 
273 
286 
299 
308 void CopyEquation(Tequation *eq_dst,Tequation *eq_orig);
309 
326 void RewriteEquation2Simp(double epsilon,Tmapping *map,Tequation *eqOut,Tequation *eq);
327 
328 
343 void RewriteEquation2Orig(Tmapping *map,Tequation *eqOut,Tequation *eq);
344 
354 void AccumulateEquations(Tequation *eqn,double ct,Tequation *eq);
355 
356 
368 void VarAccumulateEquations(Tequation *eqn,unsigned int v,Tequation *eq);
369 
379 void ProductEquations(Tequation *eq1,Tequation *eq2,Tequation *eqOut);
380 
393 unsigned int FixVariableInEquation(double epsilon,unsigned int nv,double b,Tequation *eq);
394 
409 unsigned int ReplaceVariableInEquation(double epsilon,unsigned int nv,
410  TLinearConstraint *lc,Tequation *eq);
411 
423 void CtScaleEquation(double ct,Tequation *eq);
424 
425 
436 void VarScaleEquation(unsigned int v,Tequation *eq);
437 
450 void NormalizeEquation(Tequation *eq);
451 
469 boolean CleanInfEquation(Tequation *eq_in,Tinterval *varValues,boolean *changed,Tequation *eq_out);
470 
507 boolean IsSimplificable(unsigned int simpLevel,unsigned int nTerms,boolean polynomial,
508  boolean *systemVars,Tbox *cb,
509  unsigned int *v,TLinearConstraint *lc,
510  Tequation *eq);
511 
520 void SetEquationCmp(unsigned int cmp,Tequation *eq);
521 
530 void SetEquationType(unsigned int type,Tequation *eq);
531 
532 
541 void SetEquationValue(double v,Tequation *eq);
542 
554 boolean EmptyEquation(Tequation *eq);
555 
565 boolean LinearEquation(Tequation *eq);
566 
576 boolean BilinearEquation(Tequation *eq);
577 
589 boolean CircleEquation(Tequation *eq);
590 
602 boolean SphereEquation(Tequation *eq);
603 
614 boolean SaddleEquation(Tequation *eq);
615 
637 
648 boolean ParabolaEquation(Tequation *eq);
649 
660 boolean PolynomialEquation(Tequation *eq);
661 
671 unsigned int GetEquationCmp(Tequation *eq);
672 
682 unsigned int GetEquationType(Tequation *eq);
683 
693 double GetEquationValue(Tequation *eq);
694 
705 void GetEquationBounds(Tinterval *bounds,Tequation *eq);
706 
716 unsigned int GetEquationOrder(Tequation *eq);
717 
730 
740 unsigned int GetEquationNumVariables(Tequation *eq);
741 
758 unsigned int CmpEquations(Tequation *eq1,Tequation *eq2);
759 
774 void AddScaledMonomial(double sc,Tmonomial* f,Tequation *eq);
775 
788 void AddMonomial(Tmonomial*f,Tequation *eq);
789 
799 void GenerateParabolaEquation(unsigned int vx,unsigned int vy,Tequation *eq);
800 
811 void GenerateScaledParabolaEquation(double s,unsigned int vx,unsigned int vy,Tequation *eq);
812 
825 void GenerateSaddleEquation(unsigned int vx,unsigned int vy,unsigned int vz,
826  Tequation *eq);
827 
828 
842 void GenerateScaledSaddleEquation(double s,
843  unsigned int vx,unsigned int vy,unsigned int vz,
844  Tequation *eq);
845 
859 void GenerateGeneralNormEquation(unsigned int nv,unsigned int *v,double n,Tequation *eq);
874 void GenerateNormEquation(unsigned int vx,unsigned int vy,unsigned int vz,
875  double n,
876  Tequation *eq);
907 void GenerateCrossProductEquations(unsigned int v1x,unsigned int v1y,unsigned int v1z,
908  unsigned int v2x,unsigned int v2y,unsigned int v2z,
909  unsigned int v3x,unsigned int v3y,unsigned int v3z,
910  unsigned int vs,
911  double s,
912  Tequation *eq);
913 
940 void GenerateDotProductEquation(unsigned int v1x,unsigned int v1y,unsigned int v1z,
941  unsigned int v2x,unsigned int v2y,unsigned int v2z,
942  unsigned int vc,
943  double c,
944  Tequation *eq);
945 
946 
966 void GenerateDistanceEquation(unsigned int v1x,unsigned int v1y,unsigned int v1z,
967  unsigned int v2x,unsigned int v2y,unsigned int v2z,
968  unsigned int vc,
969  double c,
970  Tequation *eq);
971 
985 unsigned int FindMonomial(Tmonomial *f,Tequation *eq);
986 
998 Tmonomial *GetMonomial(unsigned int i,Tequation *eq);
999 
1009 unsigned int GetNumMonomials(Tequation *eq);
1010 
1028 
1045 double EvaluateWholeEquation(double *varValues,Tequation *eq);
1046 
1062 double EvaluateEquation(double *varValues,Tequation *eq);
1063 
1076 void EvaluateEquationInt(Tinterval *varValues,Tinterval *i_out,Tequation *eq);
1077 
1087 void DeriveEquation(unsigned int nv,Tequation *d,Tequation *eq);
1088 
1107 void PrintMonomials(FILE *f,char **varNames,Tequation *eq);
1108 
1123 void PrintEquation(FILE *f,char **varNames,Tequation *eq);
1124 
1132 void DeleteEquation(Tequation *eq);
1133 
1134 #endif
Definition of the boolean type.
unsigned int GetEquationOrder(Tequation *eq)
Gets the equation order.
Definition: equation.c:1236
boolean IsSimplificable(unsigned int simpLevel, unsigned int nTerms, boolean polynomial, boolean *systemVars, Tbox *cb, unsigned int *v, TLinearConstraint *lc, Tequation *eq)
Identify equations than can trigger variable simplifications.
Definition: equation.c:851
double EvaluateEquation(double *varValues, Tequation *eq)
Evaluates an equation in a given point.
Definition: equation.c:1744
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:1527
void GenerateScaledParabolaEquation(double s, unsigned int vx, unsigned int vy, Tequation *eq)
Construtor. Generates a scaled parabola equation.
Definition: equation.c:1429
unsigned int GetEquationCmp(Tequation *eq)
Gets the type of relational operator of the equation.
Definition: equation.c:1202
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:1506
void GenerateSaddleEquation(unsigned int vx, unsigned int vy, unsigned int vz, Tequation *eq)
Construtor. Generates a saddle equation.
Definition: equation.c:1455
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:1461
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:763
boolean ParabolaEquation(Tequation *eq)
Identify scaled parabola equations.
Definition: equation.c:1184
void SetEquationValue(double v, Tequation *eq)
Changes the right-hand value of the equation.
Definition: equation.c:1089
unsigned int maxMonomials
Definition: equation.h:246
boolean BilinealMonomialEquation(Tequation *eq)
Identify single bilineal monomial equations.
Definition: equation.c:1172
Mapping between the sets of variables in two different cuiksystems.
Definition: csmapping.h:53
unsigned int nMonomials
Definition: equation.h:247
Tmonomial ** monomials
Definition: equation.h:248
void LinearEquation2LinearConstraint(TLinearConstraint *lc, Tequation *eq)
Converts a linear equation into a linear constraint.
Definition: equation.c:1708
void GetEquationBounds(Tinterval *bounds, Tequation *eq)
Returns the right-hand side of the equation in the form of an interval.
Definition: equation.c:1217
void ProductEquations(Tequation *eq1, Tequation *eq2, Tequation *eqOut)
Product of two equations.
Definition: equation.c:398
Tvariable_set vars
Definition: equation.h:250
unsigned int cmp
Definition: equation.h:242
Tmonomial * GetMonomial(unsigned int i, Tequation *eq)
Gets a monomial from an equation.
Definition: equation.c:1695
boolean CircleEquation(Tequation *eq)
Identify circle equations.
Definition: equation.c:1131
void GenerateDistanceEquation(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 distance between two points.
Definition: equation.c:1623
void GenerateParabolaEquation(unsigned int vx, unsigned int vy, Tequation *eq)
Construtor. Generates a parabola equation.
Definition: equation.c:1424
void EquationFromLinearConstraint(TLinearConstraint *lc, Tequation *eq)
Defines a new equation from a linear constraint.
Definition: equation.c:106
boolean polynomial
Definition: equation.h:240
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:714
void EvaluateEquationInt(Tinterval *varValues, Tinterval *i_out, Tequation *eq)
Interval evaluation of an equation.
Definition: equation.c:1760
Tvariable_set * GetEquationVariables(Tequation *eq)
Gets the set of variables equation used in the equation.
Definition: equation.c:1241
void SetEquationCmp(unsigned int cmp, Tequation *eq)
Changes the relational operator (LEQ, GEQ, EQU) of the equation.
Definition: equation.c:1081
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:1588
unsigned int order
Definition: equation.h:243
An equation.
Definition: equation.h:237
boolean SaddleEquation(Tequation *eq)
Identify scaled saddle equations.
Definition: equation.c:1159
void VarScaleEquation(unsigned int v, Tequation *eq)
Scales an equation with a variable factor.
Definition: equation.c:680
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:1197
A set of variable indexes with powers.
Definition: variable_set.h:139
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:1672
unsigned int CmpEquations(Tequation *eq1, Tequation *eq2)
Equation comparison.
Definition: equation.c:1251
boolean BilinearEquation(Tequation *eq)
Identify bilinear equations.
Definition: equation.c:1112
A box.
Definition: box.h:83
boolean LinearEquation(Tequation *eq)
Identify linear equations.
Definition: equation.c:1099
void AddScaledMonomial(double sc, Tmonomial *f, Tequation *eq)
Adds a new scaled monomial to the equation.
Definition: equation.c:1326
void AddMonomial(Tmonomial *f, Tequation *eq)
Adds a new monomial to the equation.
Definition: equation.c:1419
void PrintMonomials(FILE *f, char **varNames, Tequation *eq)
Prints an equation as a set if monomials.
Definition: equation.c:1803
unsigned int type
Definition: equation.h:238
double EvaluateWholeEquation(double *varValues, Tequation *eq)
Evaluates an equation in a given point.
Definition: equation.c:1726
boolean SphereEquation(Tequation *eq)
Identify sphere equations.
Definition: equation.c:1145
void InitEquation(Tequation *eq)
Constructor.
Definition: equation.c:86
double GetEquationValue(Tequation *eq)
Gets the right-hand value of the equation.
Definition: equation.c:1212
unsigned int GetNumMonomials(Tequation *eq)
Number of monomials in an equation.
Definition: equation.c:1703
void SetEquationType(unsigned int type, Tequation *eq)
Changes the type of the equation (SYSTEM_EQ, CARTESIAN_EQ, DUMMY_EQ, DERIVED_EQ). ...
Definition: equation.c:1076
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:1494
void DeleteEquation(Tequation *eq)
Destructor.
Definition: equation.c:1859
boolean EmptyEquation(Tequation *eq)
Identify empty equations.
Definition: equation.c:1094
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:1246
void CtScaleEquation(double ct, Tequation *eq)
Scales an equation by a constant factor.
Definition: equation.c:663
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:1825
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:1776
double value
Definition: equation.h:244
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:1207
Definition of the Tinterval type and the associated functions.