Mathc matrices/Fichiers h : vel piv

Un livre de Wikilivres.


Bibliothèque



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.