eqvector.c
Go to the documentation of this file.
1 #include "eqvector.h"
2 
3 #include "htransform.h"
4 
16 {
17  unsigned int i;
18 
19  for(i=0;i<DIM_SP;i++)
20  InitEquation(&((*ev)[i]));
21 }
22 
23 void CopyEqVector(TEqVector *ev_dst,TEqVector *ev_src)
24 {
25  unsigned int i;
26 
27  for(i=0;i<DIM_SP;i++)
28  CopyEquation(&((*ev_dst)[i]),&((*ev_src)[i]));
29 }
30 
31 void EqVectorFromVector(double *v,TEqVector *ev)
32 {
33  unsigned int i;
34 
35  InitEqVector(ev);
36 
37  for(i=0;i<DIM_SP;i++)
38  SetEquationValue(-v[i],&((*ev)[i]));
39 }
40 
42 {
43  if (i<DIM_SP)
44  return(&((*ev)[i]));
45  else
46  {
47  Error("Index out of range in GetEqVectorElement");
48  return(NULL);
49  }
50 }
51 
52 void ScaleEqVector(double ct,TEqVector *ev)
53 {
54  unsigned int i;
55 
56  for(i=0;i<DIM_SP;i++)
57  CtScaleEquation(ct,&((*ev)[i]));
58 }
59 
60 void VarScaleEqVector(unsigned int v,TEqVector *ev)
61 {
62  unsigned int i;
63 
64  for(i=0;i<DIM_SP;i++)
65  VarScaleEquation(v,&((*ev)[i]));
66 }
67 
68 void AccumulateEqVectors(TEqVector *ev,double ct,TEqVector *evOut)
69 {
70  unsigned int i;
71 
72  for(i=0;i<DIM_SP;i++)
73  AccumulateEquations(&((*ev)[i]),ct,&((*evOut)[i]));
74 }
75 
76 void VarAccumulateEqVectors(TEqVector *ev,unsigned int v,TEqVector *evOut)
77 {
78  unsigned int i;
79 
80  for(i=0;i<DIM_SP;i++)
81  VarAccumulateEquations(&((*ev)[i]),v,&((*evOut)[i]));
82 }
83 
84 void VarAccumulateVector2EqVector(double *c,unsigned int v,TEqVector *evOut)
85 {
86  unsigned int i;
87  Tmonomial f;
88 
89  InitMonomial(&f);
90  for(i=0;i<DIM_SP;i++)
91  {
92  AddCt2Monomial(c[i],&f);
93  AddVariable2Monomial(NFUN,v,1,&f);
94  AddMonomial(&f,&((*evOut)[i]));
95  ResetMonomial(&f);
96  }
97  DeleteMonomial(&f);
98 }
99 
100 void Var2AccumulateVector2EqVector(double *c,unsigned int v1,
101  unsigned int v2,TEqVector *evOut)
102 {
103  unsigned int i;
104  Tmonomial f;
105 
106  InitMonomial(&f);
107  for(i=0;i<DIM_SP;i++)
108  {
109  AddCt2Monomial(c[i],&f);
110  AddVariable2Monomial(NFUN,v1,1,&f);
111  AddVariable2Monomial(NFUN,v2,1,&f);
112  AddMonomial(&f,&((*evOut)[i]));
113  ResetMonomial(&f);
114  }
115  DeleteMonomial(&f);
116 }
117 
119 {
120  unsigned int i;
121 
122  for(i=0;i<DIM_SP;i++)
123  SetEquationValue(GetEquationValue(&((*ev)[i]))-v[i],&((*ev)[i]));
124 }
125 
127 {
128  Tequation eq;
129  TEqVector ev;
130 
131  ProductEquations(&((*ev1)[1]),&((*ev2)[2]),&(ev[0]));
132  ProductEquations(&((*ev1)[2]),&((*ev2)[1]),&eq);
133  AccumulateEquations(&eq,-1.0,&(ev[0]));
134  DeleteEquation(&eq);
135 
136  ProductEquations(&((*ev1)[2]),&((*ev2)[0]),&(ev[1]));
137  ProductEquations(&((*ev1)[0]),&((*ev2)[2]),&eq);
138  AccumulateEquations(&eq,-1.0,&(ev[1]));
139  DeleteEquation(&eq);
140 
141  ProductEquations(&((*ev1)[0]),&((*ev2)[1]),&(ev[2]));
142  ProductEquations(&((*ev1)[1]),&((*ev2)[0]),&eq);
143  AccumulateEquations(&eq,-1.0,&(ev[2]));
144  DeleteEquation(&eq);
145 
146  if ((evOut==ev1)||(evOut==ev2))
147  DeleteEqVector(evOut);
148  CopyEqVector(evOut,&ev);
149  DeleteEqVector(&ev);
150 }
151 
153 {
154  TEqVector evAux;
155 
156  CopyEquation(&(evAux[0]),&((*ev)[2]));
157  CtScaleEquation(v[1],&(evAux[0]));
158  AccumulateEquations(&((*ev)[1]),-v[2],&(evAux[0]));
159 
160  CopyEquation(&(evAux[1]),&((*ev)[0]));
161  CtScaleEquation(v[2],&(evAux[1]));
162  AccumulateEquations(&((*ev)[2]),-v[0],&(evAux[1]));
163 
164  CopyEquation(&(evAux[2]),&((*ev)[1]));
165  CtScaleEquation(v[0],&(evAux[2]));
166  AccumulateEquations(&((*ev)[0]),-v[1],&(evAux[2]));
167 
168  if (evOut==ev)
169  DeleteEqVector(evOut);
170  CopyEqVector(evOut,&evAux);
171  DeleteEqVector(&evAux);
172 }
173 
174 
176 {
177  unsigned int i;
178  Tequation eq;
179 
180  InitEquation(eqOut);
181 
182  for(i=0;i<DIM_SP;i++)
183  {
184  ProductEquations(&((*ev1)[i]),&((*ev2)[i]),&eq);
185  AccumulateEquations(&eq,1.0,eqOut);
186  DeleteEquation(&eq);
187  }
188 }
189 
190 void DotProductVectorEqVector(double *v,TEqVector *ev,Tequation *eqOut)
191 {
192  CopyEquation(eqOut,&((*ev)[0]));
193  CtScaleEquation(v[0],eqOut);
194  AccumulateEquations(&((*ev)[1]),v[1],eqOut);
195  AccumulateEquations(&((*ev)[2]),v[2],eqOut);
196 }
197 
198 void EvaluateEqVector(double *v,double *o,TEqVector *ev)
199 {
200  unsigned int i;
201 
202  for(i=0;i<DIM_SP;i++)
203  o[i]=EvaluateWholeEquation(v,&((*ev)[i]));
204 }
205 
207 {
208  double ct;
209  unsigned int i;
210 
211  for(i=0;i<DIM_SP;i++)
212  {
213  ct=GetEquationValue(&((*ev)[i]));
214  EvaluateEquationInt(v,&(o[i]),&((*ev)[i]));
215  IntervalOffset(&(o[i]),-ct,&(o[i]));
216  }
217 }
218 
220 {
221  unsigned int i;
222 
223  for(i=0;i<DIM_SP;i++)
224  DeleteEquation(&((*ev)[i]));
225 }
226 
void Var2AccumulateVector2EqVector(double *c, unsigned int v1, unsigned int v2, TEqVector *evOut)
Accumulates a constant vector to a equation vector.
Definition: eqvector.c:100
void AccumulateEqVectors(TEqVector *ev, double ct, TEqVector *evOut)
Accumulates two vectors of equations.
Definition: eqvector.c:68
double EvaluateWholeEquation(double *varValues, Tequation *eq)
Evaluates an equation in a given point.
Definition: equation.c:1726
void VarAccumulateVector2EqVector(double *c, unsigned int v, TEqVector *evOut)
Accumulates a constant vector to a equation vector.
Definition: eqvector.c:84
void CrossProductVectorEqVector(double *v, TEqVector *ev, TEqVector *evOut)
Cross product of a constant vector and an equation vector.
Definition: eqvector.c:152
void EvaluateEquationInt(Tinterval *varValues, Tinterval *i_out, Tequation *eq)
Interval evaluation of an equation.
Definition: equation.c:1760
void DeleteEquation(Tequation *eq)
Destructor.
Definition: equation.c:1859
void CopyEquation(Tequation *eq_dst, Tequation *eq_orig)
Copy constructor.
Definition: equation.c:216
void CopyEqVector(TEqVector *ev_dst, TEqVector *ev_src)
Copies a vector of equations.
Definition: eqvector.c:23
Tequation TEqVector[3]
An array with three equations.
Definition: eqvector.h:25
void InitEquation(Tequation *eq)
Constructor.
Definition: equation.c:86
void Error(const char *s)
General error function.
Definition: error.c:80
#define NFUN
No trigonometric function for the variable.
Definition: variable_set.h:36
void DotProductEqVectors(TEqVector *ev1, TEqVector *ev2, Tequation *eqOut)
Dot product of two equation vectors.
Definition: eqvector.c:175
void SetEquationValue(double v, Tequation *eq)
Changes the right-hand value of the equation.
Definition: equation.c:1089
Definition of the TEqVEctor type and the associated functions.
void AddMonomial(Tmonomial *f, Tequation *eq)
Adds a new monomial to the equation.
Definition: equation.c:1419
void AccumulateVector2EqVector(double *v, TEqVector *ev)
Accumulates a constant vector to an equation vector.
Definition: eqvector.c:118
void DotProductVectorEqVector(double *v, TEqVector *ev, Tequation *eqOut)
Dot product of a constant vector and an equation vector.
Definition: eqvector.c:190
void CtScaleEquation(double ct, Tequation *eq)
Scales an equation by a constant factor.
Definition: equation.c:663
Tequation * GetEqVectorElement(unsigned int i, TEqVector *ev)
Gets an alement from a equation vector.
Definition: eqvector.c:41
void ResetMonomial(Tmonomial *f)
Reset the monomial information.
Definition: monomial.c:24
void VarScaleEquation(unsigned int v, Tequation *eq)
Scales an equation with a variable factor.
Definition: equation.c:680
An equation.
Definition: equation.h:237
void EvaluateEqVectorInt(Tinterval *v, Tinterval *o, TEqVector *ev)
Evaluates a vector of equations on intervals.
Definition: eqvector.c:206
A scaled product of powers of variables.
Definition: monomial.h:32
Definition of the THTransform type and the associated functions.
double GetEquationValue(Tequation *eq)
Gets the right-hand value of the equation.
Definition: equation.c:1212
void VarAccumulateEquations(Tequation *eqn, unsigned int v, Tequation *eq)
Adds an equation scaled with a variable to another equation.
Definition: equation.c:377
void EqVectorFromVector(double *v, TEqVector *ev)
Initializes a vector of equations from a constant vector.
Definition: eqvector.c:31
void AddVariable2Monomial(unsigned int fn, unsigned int varid, unsigned int p, Tmonomial *f)
Adds a power variable to the monomial.
Definition: monomial.c:171
void ScaleEqVector(double ct, TEqVector *ev)
Scales a equation vector with a constant.
Definition: eqvector.c:52
void EvaluateEqVector(double *v, double *o, TEqVector *ev)
Evaluates a vector of equations.
Definition: eqvector.c:198
void AddCt2Monomial(double k, Tmonomial *f)
Scales a monomial.
Definition: monomial.c:158
#define DIM_SP
Dimensions of R^3.
Definition: htransform.h:27
void ProductEquations(Tequation *eq1, Tequation *eq2, Tequation *eqOut)
Product of two equations.
Definition: equation.c:398
Defines a interval.
Definition: interval.h:33
void VarScaleEqVector(unsigned int v, TEqVector *ev)
Scales an equation vector by a variable.
Definition: eqvector.c:60
void VarAccumulateEqVectors(TEqVector *ev, unsigned int v, TEqVector *evOut)
Accumulates two vectors of equations.
Definition: eqvector.c:76
void InitMonomial(Tmonomial *f)
Constructor.
Definition: monomial.c:17
void AccumulateEquations(Tequation *eqn, double ct, Tequation *eq)
Adds a scaled equation to another equation.
Definition: equation.c:366
void DeleteMonomial(Tmonomial *f)
Destructor.
Definition: monomial.c:289
void DeleteEqVector(TEqVector *ev)
Deletes an equation vector.
Definition: eqvector.c:219
void CrossProductEqVectors(TEqVector *ev1, TEqVector *ev2, TEqVector *evOut)
Cross product of two equation vectors.
Definition: eqvector.c:126
void InitEqVector(TEqVector *ev)
Initializes a vector of equations.
Definition: eqvector.c:15
void IntervalOffset(Tinterval *i, double offset, Tinterval *i_out)
Interval offset.
Definition: interval.c:627