Exemple de sortie écran :
 A :
 +964 -689 +474 +948 
 +640 -693 -937 +656 
 -981 -337 -287 +420 
 -807 -123 +404 -177 
 b :
 -159 
 +718 
 +812 
 -105 
 Ab :
 +964 -689 +474 +948 -159 
 +640 -693 -937 +656 +718 
 -981 -337 -287 +420 +812 
 -807 -123 +404 -177 -105 
 Copy/Past into the octave window.
 Ab=[
+964,-689,+474,+948,-159;
+640,-693,-937,+656,+718;
-981,-337,-287,+420,+812;
-807,-123,+404,-177,-105]
 rref(Ab.00000000001)
 gj_TP_mR(Ab) :
 +1.00000 +0.00000 +0.00000 +0.00000 -0.39164 
 -0.00000 +1.00000 -0.00000 -0.00000 +0.18464 
 +0.00000 +0.00000 +1.00000 +0.00000 -0.67774 
 +0.00000 +0.00000 +0.00000 +1.00000 +0.70359 
 Press return to continue.

Mathc matrices/e15
Étude du code
Nous allons étudier l'algorithme du Total Pivoting.
Petites études:

Mathc matrices/e1500
Étude du code
Installer et compiler ces fichiers dans votre répertoire de travail.
/* ------------------------------------ */
/* Save as : gj00.c */
void fun(int r)
double **A = i_mR(r,r);
double **b = i_mR(r,C1);
double **Ab = i_Abr_Ac_bc_mR(r,r,C1);
/* i_Abr_Ac_bc_mR(R_Ab,C_A,C_b)); */
 do
 r_mR(A,999.);
 printf(".");
 }while(!det_R(A));
 r_mR(b,999.);
 c_A_b_Ab_mR(A,b,Ab);
 clrscrn();
 printf(" Copy/Past into the octave window.\n\n");
 p_Octave_mR(Ab,"Ab",P0);
 printf("\n rref(Ab.00000000001)\n\n");
 stop();
 clrscrn();
 gj_TP_mR(Ab);
 printf(" gj_TP_mR(Ab) :\n");
 p_mR(Ab,S10,P4,C7);
 f_mR(Ab);
 f_mR(b);
 f_mR(A);
/* ------------------------------------ */
int main(void)
time_t t;
 srand(time(&t));
do
 fun(rp_I(R2)+R2);
} while(stop_w());
 return 0;
/* ------------------------------------ */
Nous allons étudier la résolution d'un système en utilisant l'algorithme de Total Pivoting. Ce fichier est le fichier de base.
 Exemple de sortie écran :
 Copy/Past into the octave window.
 Ab=[
+216,+444,+346,-369,-497;
-137,+36,-925,+896,+350;
-319,+776,+360,+206,+354;
+186,-19,+662,-29,+42]
 rref(Ab.00000000001)
 Press return to continue. 
 gj_TP_mR(Ab) :
 +1.00000 +0.00000 +0.00000 +0.00000 -1.11031 
 -0.00000 +1.00000 +0.00000 +0.00000 -0.35293 
 +0.00000 +0.00000 +1.00000 +0.00000 +0.39336 
 +0.00000 +0.00000 +0.00000 +1.00000 +0.64113 
 Press return to continue
 Press X to stop

Mathc matrices/e1501
Étude du code
Installer et compiler ces fichiers dans votre répertoire de travail.
/* ------------------------------------ */
/* Save as : gj01.c */
/* ------------------------------------ */
double **XX_gj_TP_mR(
double **Ab
 gj1_T_mR(Ab);
 sort_c_mR(Ab);
 sort_r_mR(Ab);
return(Ab);
/* ------------------------------------ */
void fun(int r)
double **A = i_mR(r,r);
double **b = i_mR(r,C1);
double **Ab = i_Abr_Ac_bc_mR(r,r,C1);
/* i_Abr_Ac_bc_mR(R_Ab,C_A,C_b)); */
 do
 r_mR(A,999.);
 printf(".");
 }while(!det_R(A));
 r_mR(b,999.);
 c_A_b_Ab_mR(A,b,Ab);
 clrscrn();
 printf(" Copy/Past into the octave window.\n\n");
 p_Octave_mR(Ab,"Ab",P0);
 printf("\n rref(Ab.00000000001)\n\n");
 stop();
 clrscrn();
 XX_gj_TP_mR(Ab);
 printf(" gj_TP_mR(Ab) :\n");
 p_mR(Ab,S10,P4,C7);
 f_mR(Ab);
 f_mR(b);
 f_mR(A);
/* ------------------------------------ */
int main(void)
time_t t;
 srand(time(&t));
do
 fun(RC5);
} while(stop_w());
 return 0;
/* ------------------------------------ */
Nous avons introduit la fonction gj_TP_mR(); que nous allons étudier. Comme cette fonction est dans la bibliothèque, nous allons l'appeler XX_gj_TP_mR();
Nous pouvons voir que cette fonction appelle gj1_T_mR(); qui applique le Total Pivoting. Puis les deux fonctions qui trient les colonnes (sort_c_mR();) et les lignes (rows), (sort_r_mR();).
 Exemple de sortie écran :
 Copy/Past into the octave window.
 Ab=[
+216,+444,+346,-369,-497;
-137,+36,-925,+896,+350;
-319,+776,+360,+206,+354;
+186,-19,+662,-29,+42]
 rref(Ab.00000000001)
 Press return to continue. 
 gj_TP_mR(Ab) :
 +1.00000 +0.00000 +0.00000 +0.00000 -1.11031 
 -0.00000 +1.00000 +0.00000 +0.00000 -0.35293 
 +0.00000 +0.00000 +1.00000 +0.00000 +0.39336 
 +0.00000 +0.00000 +0.00000 +1.00000 +0.64113 
 Press return to continue
 Press X to stop

Mathc matrices/e1502
Étude du code
Installer et compiler ces fichiers dans votre répertoire de travail.
/* ------------------------------------ */
/* Save as : gj02.c */
/* ------------------------------------ */
double **xx_sort_c_mR(
double **Ab
double **T = i_RC_mR(Ab[R_SIZE][C0],Ab[C_SIZE][C0]);
int c;
 for(c=C1; c<Ab[C_SIZE][C0]; c++)
 c_c_withR0_mR( Ab, c,
 T, Ab[R0][c]);
 c_withR0_mR(T,Ab);
 f_mR(T);
 return(Ab);
/* ------------------------------------ */
double **XX_gj_TP_mR(
double **Ab
 gj1_T_mR(Ab);
 xx_sort_c_mR(Ab);
 //sort_r_mR(Ab);
return(Ab);
/* ------------------------------------ */
void fun(int r)
double **A = i_mR(r,r);
double **b = i_mR(r,C1);
double **Ab = i_Abr_Ac_bc_mR(r,r,C1);
/* i_Abr_Ac_bc_mR(R_Ab,C_A,C_b)); */
 do
 r_mR(A,999.);
 printf(".");
 }while(!det_R(A));
 r_mR(b,999.);
 c_A_b_Ab_mR(A,b,Ab);
 clrscrn();
 printf(" Copy/Past into the octave window.\n\n");
 p_Octave_mR(Ab,"Ab",P0);
 printf("\n rref(Ab.00000000001)\n\n");
 stop();
 clrscrn();
 XX_gj_TP_mR(Ab);
 printf(" gj_TP_mR(Ab) :\n");
 p_mR(Ab,S10,P4,C7);

f_mR(Ab);
 f_mR(b);
 f_mR(A);
/* ------------------------------------ */
int main(void)
time_t t;
 srand(time(&t));
do
 fun(rp_I(R2)+R2);
} while(stop_w());
 return 0;
/* ------------------------------------ */
Nous avons introduit la fonction sort_c_mR(); que nous allons étudier. Comme cette fonction est dans la bibliothèque, nous allons l'appeler xx_sort_c_mR();
 Exemple de sortie écran :
 Copy/Past into the octave window.
 Ab=[
+216,+444,+346,-369,-497;
-137,+36,-925,+896,+350;
-319,+776,+360,+206,+354;
+186,-19,+662,-29,+42]
 rref(Ab.00000000001)
 Press return to continue. 
 gj_TP_mR(Ab) :
 +1.00000 +0.00000 +0.00000 +0.00000 -1.11031 
 -0.00000 +1.00000 +0.00000 +0.00000 -0.35293 
 +0.00000 +0.00000 +1.00000 +0.00000 +0.39336 
 +0.00000 +0.00000 +0.00000 +1.00000 +0.64113 
 Press return to continue
 Press X to stop

Mathc matrices/e1503
Étude du code
Installer et compiler ces fichiers dans votre répertoire de travail.
/* ------------------------------------ */
/* Save as : gj03.c */
/* ------------------------------------ */
double **xx_sort_c_mR(
double **Ab
double **T = i_RC_mR(Ab[R_SIZE][C0],Ab[C_SIZE][C0]);
int c;
 for(c=C1; c<Ab[C_SIZE][C0]; c++)
clrscrn(); 
printf("/* --------- DEBUG 1 ---------- */\n\n"); 
printf(" Copy C[%d] of Ab into C[%.0f] of T\n",c,Ab[R0][c]);
pall_mR(Ab,S8,P4,C8);
 c_c_withR0_mR( Ab, c,
 T, Ab[R0][c]);
printf(" T[R0][%.0f]\n",Ab[R0][c]);
pall_mR(T,S8,P4,C8);
stop();
clrscrn(); 
/* --------- DEBUG 1 ---------- */
 printf(" Ab : before\n");
 pall_mR(Ab,S8,P4,C8);

c_withR0_mR(T,Ab);
 printf(" Ab : after \n");
 pall_mR(Ab,S8,P4,C8);
 stop();
 clrscrn(); 
 f_mR(T);
 return(Ab);
/* ------------------------------------ */
double **XX_gj_TP_mR(
double **Ab
 gj1_T_mR(Ab);
 xx_sort_c_mR(Ab);
 sort_r_mR(Ab);
return(Ab);
/* ------------------------------------ */
void fun(int r)
double **A = i_mR(r,r);
double **b = i_mR(r,C1);
double **Ab = i_Abr_Ac_bc_mR(r,r,C1);
/* i_Abr_Ac_bc_mR(R_Ab,C_A,C_b)); */
 do
 r_mR(A,999.);
 printf(".");
 }while(!det_R(A));
 r_mR(b,999.);
 c_A_b_Ab_mR(A,b,Ab);
 clrscrn();
 printf(" Copy/Past into the octave window.\n\n");
 p_Octave_mR(Ab,"Ab",P0);
 printf("\n rref(Ab.00000000001)\n\n");
 stop();
 clrscrn();
 XX_gj_TP_mR(Ab);
 printf(" gj_TP_mR(Ab) :\n");
 p_mR(Ab,S10,P4,C7);
 f_mR(Ab);
 f_mR(b);
 f_mR(A);
/* -----------fun(rp_I(R2)+R2);------------------------- */
int main(void)
time_t t;
 srand(time(&t));
do