PIPS
plpivoter.c File Reference
#include <stdio.h>
#include "boolean.h"
#include "arithmetique.h"
#include "vecteur.h"
#include "contrainte.h"
#include "sc.h"
#include "sommet.h"
#include "matrix.h"
#include "plint.h"
+ Include dependency graph for plpivoter.c:

Go to the source code of this file.

Macros

#define MALLOC(s, t, f)   malloc(s)
 
#define TRACE
 

Functions

char * malloc ()
 
void pivoter_pas (Psommet eq, Psommet ligne, Variable var)
 
void pivoter (Psommet sys, Psommet ligne, Variable var, Psommet fonct)
 

Macro Definition Documentation

◆ MALLOC

#define MALLOC (   s,
  t,
  f 
)    malloc(s)

Definition at line 40 of file plpivoter.c.

◆ TRACE

#define TRACE

Definition at line 43 of file plpivoter.c.

Function Documentation

◆ malloc()

char* malloc ( )

◆ pivoter()

void pivoter ( Psommet  sys,
Psommet  ligne,
Variable  var,
Psommet  fonct 
)

mise a jour du denominateur

Definition at line 131 of file plpivoter.c.

137 {
138 
139  Psommet sys1 = fonct;
140  Psommet ps1 = NULL;
141  int sgn_den = 1;
142  Value den,tmp;
143 #ifdef TRACE
144  printf(" *** on effectue le pivot \n");
145 #endif
146  if (ligne) {
147 
148  den = vect_coeff(var,ligne->vecteur);
149  if (value_neg_p(den))
150  {
151  sgn_den = -1;
152  value_oppose(den);
153  }
154  if (fonct != NULL)
155  fonct->succ = sys;
156  else sys1 = sys;
157 
158  /* mise a jour du denominateur */
159  tmp = ligne->denominateur;
160  if (sgn_den==-1) value_oppose(tmp);
161  (void) vect_multiply(ligne->vecteur,tmp);
162  value_product(ligne->denominateur,den);
163  den = ligne->denominateur;
164  for (ps1 = sys1; ps1!= NULL; ps1=ps1->succ)
165  pivoter_pas(ps1,ligne,var);
166  sommets_normalize(sys1);
167 
168  }
169  if (fonct)
170  fonct->succ = NULL;
171 
172 }
#define value_oppose(ref)
int Value
#define value_product(v, w)
#define value_neg_p(val)
void pivoter_pas(Psommet eq, Psommet ligne, Variable var)
Definition: plpivoter.c:61
int printf()
Pvecteur vect_multiply(Pvecteur v, Value x)
Pvecteur vect_multiply(Pvecteur v, Value x): multiplication du vecteur v par le scalaire x,...
Definition: scalaires.c:123
void sommets_normalize(Psommet)
void sommets_normalize(som) Normalisation des elements d'une liste de sommets i.e.
Definition: sommets.c:108
structure de donnees Sommet
Definition: sommet-local.h:64
struct typ_som * succ
Definition: sommet-local.h:68
Pvecteur vecteur
Definition: sommet-local.h:66
Value denominateur
Definition: sommet-local.h:67
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228

References typ_som::denominateur, pivoter_pas(), printf(), sommets_normalize(), typ_som::succ, value_neg_p, value_oppose, value_product, vect_coeff(), vect_multiply(), and typ_som::vecteur.

Referenced by dual_pivot_pas(), plint_degen(), primal_pivot(), and sc_min().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pivoter_pas()

void pivoter_pas ( Psommet  eq,
Psommet  ligne,
Variable  var 
)

Definition at line 61 of file plpivoter.c.

65 {
66 
67 
68  Pvecteur pvec = NULL;
69  Pvecteur ligne2;
70 
71  Value c1 = VALUE_ZERO;
72  Value den;
73  bool cst = false;
74 #ifdef TRACE
75  printf(" --- pas - pivoter \n");
76 #endif
77  if (ligne && eq) {
78  Pvecteur pv3 = vect_dup(eq->vecteur);
79 
80  den = ligne->denominateur;
81  cst = false;
82  if ((eq != ligne) && value_notzero_p(c1 = vect_coeff(var,pv3))) {
83 
84  ligne2 = vect_dup(ligne->vecteur);
85  value_product(eq->denominateur,den);
86  for (pvec =pv3;pvec!= NULL; pvec=pvec->succ) {
87  Value tmp;
88  if (pvec->var == NULL) cst = true;
89 
90  value_product(pvec->val,den);
91  tmp = vect_coeff(pvec->var,ligne->vecteur);
92  value_product(tmp,c1);
93  value_substract(pvec->val,tmp);
94 
95  vect_chg_coeff(&ligne2,pvec->var,VALUE_ZERO);
96  }
97 
98  for (pvec=ligne2;pvec!= NULL;pvec = pvec->succ)
99  if (pvec->var != TCST)
100  {
101  Value tmp = vect_coeff(pvec->var,ligne2);
102  value_product(tmp,c1);
103  vect_add_elem(&pv3,pvec->var,value_uminus(tmp));
104  }
105  if (!cst)
106  {
107  Value tmp = vect_coeff(TCST,ligne->vecteur);
108  value_product(tmp,c1);
109  vect_add_elem(&pv3,TCST,value_uminus(tmp));
110  }
111  }
112  eq->vecteur = pv3;
113  }
114 }
#define VALUE_ZERO
#define value_notzero_p(val)
#define value_uminus(val)
unary operators on values
#define value_substract(ref, val)
Pcontrainte eq
element du vecteur colonne du systeme donne par l'analyse
Definition: sc_gram.c:108
Pvecteur vecteur
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
Value val
Definition: vecteur-local.h:91
Variable var
Definition: vecteur-local.h:90
struct Svecteur * succ
Definition: vecteur-local.h:92
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
Pvecteur vect_dup(Pvecteur v_in)
Pvecteur vect_dup(Pvecteur v_in): duplication du vecteur v_in; allocation de et copie dans v_out;.
Definition: alloc.c:51
void vect_add_elem(Pvecteur *pvect, Variable var, Value val)
void vect_add_elem(Pvecteur * pvect, Variable var, Value val): addition d'un vecteur colineaire au ve...
Definition: unaires.c:72
void vect_chg_coeff(Pvecteur *ppv, Variable var, Value val)
void vect_chg_coeff(Pvecteur *ppv, Variable var, Value val): mise de la coordonnee var du vecteur *pp...
Definition: unaires.c:143

References typ_som::denominateur, eq, printf(), Svecteur::succ, TCST, Svecteur::val, value_notzero_p, value_product, value_substract, value_uminus, VALUE_ZERO, Svecteur::var, vect_add_elem(), vect_chg_coeff(), vect_coeff(), vect_dup(), Scontrainte::vecteur, and typ_som::vecteur.

Referenced by pivoter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: