Sommaire



Installer ce fichier dans votre répertoire de travail.

vepivot.h
'
/* ------------------------------------ */
/*  Save as : vepivot.h                   */
/* ------------------------------------ */
double pivotbest_mR(
double **A,
int pv
)
{
int r;
int c;
int     best_r = pv;
int     best_c = pv;

double    sign = 1.;

double pv_best = fabs(A[pv][pv]);           

  for   ( r=pv; r<A[R_SIZE][C0]; r++)
    for ( c=pv; c<A[C_SIZE][C0]; c++)

           if(fabs(A[r][c])>pv_best )           
             {
              pv_best = fabs(A[r][c]);          
               best_r = r;
               best_c = c;
             }

 if(best_r!=pv){ sign*=-1; swapR_mR(A,pv,best_r); }
 if(best_c!=pv){ sign*=-1; swapC_mR(A,pv,best_c); }

 return(sign);
}
/* ------------------------------------ */
double zero_under_pivot_mR(
double **A,
int pv
)
{
int r;
double pivot = A[pv][pv];

  if(fabs(pivot)>ERROR_E)
    {            
     mulR_mR( A,(1./pivot),pv); 

     for( r=(pv+R1); r<A[R_SIZE][C0]; r++) 

         addR_mR( A,(-A[r][pv]),pv,r);
    }
   else pivot= 0.0;

 return(pivot);
}
/* ------------------------------------ */
/* ------------------------------------ */


L'algorithme utilisé est le total pivoting. Le coéfficient de la matrice avec la plus grande valeur absolue et mis dans la position du pivot. 


Cette fonction va travailler sur le déterminant, le pivot sera donc sur la diagonale, c'est pour cela que sa position correspond à un seul nombre. Si il y a eu un changement de ligne ou de colonne, il faudra multiplier par -1, c'est une propriétée du determinant.
 


Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.