Mathc matrices/Fichiers h : vel piv
Apparence
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.