Étude du code


Installer et compiler ces fichiers dans votre répertoire de travail.


inv01.c
/* ------------------------------------ */
/*  Save as :   inv01.c                 */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
double **XX_invgj_mR(
double **A,
double **invA
)
{
double **ID = i_RC_mR(A[R_SIZE][C0],A[C_SIZE][C0]);
double **AID;

int r = A[R_SIZE][C0];

  r--;

  AID = i_Abr_Ac_bc_mR(r,r,r);

       eye_mR(ID);
  c_A_b_Ab_mR(A,ID,AID);
   invgj_pivot_mR(AID);
    sort_c_mR(AID);
    sort_r_mR(AID);
   c_Inv_A_mR(AID,invA);

  f_mR(AID);
  f_mR(ID);

return(invA);
}
/* ------------------------------------ */
/* ------------------------------------ */
void fun(int r)
{
double **A   = r_mR( i_mR(r,r), 99.);
double **Inv =       i_mR(r,r);
double **AInv =      i_mR(r,r);

  clrscrn();

  printf(" Copy/Past into the octave window.\n\n");
  printf("format short e\n");
  p_Octave_mR(A,"A",P0);
  
  printf(" inv(A)");
  XX_invgj_mR(A,Inv);
  pE_mR(Inv,S12,P4,C6);

  printf(" A * inv(A)");
  mul_mR(A,Inv,AInv);
  p_mR(AInv,S12,P4,C6);
  
  f_mR(AInv);    
  f_mR(Inv);
  f_mR(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
  
do
{
   fun(rp_I(C2)+C2);

} while(stop_w());

  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


Nous avons introduit la fonction invgj_mR(); que nous allons étudier. Comme cette fonction est dans la bibliothèque, nous allons l'appeler XX_invgj_mR();

Éssayer de lire le contenu de la fonction :


  • Créer la matrice Ab (AID) avec r lignes, Ac colonnes (A) et bc colonnes (ID).
  • Construire la matrice identité (ID).
  • Copier la matrice A (A) et b (ID) dans Ab (AID).
  • Inverser la matrice avec la méthode de gaussjordan.
  • Trier les colonnes.
  • Trier les lignes.
  • Copier la matrice inverse dans la matrice invA.


Exemple de sortie écran :
 ------------------------------------ 
 Copy/Past into the octave window.

format short e
 A=[
-59,+78,+44,-49;
+18,+32,-73,-69;
-65,+62,-73,-11;
-89,+94,-47,-27]

 inv(A)
 -1.1886e-01  +2.2621e-02  -2.6560e-01  +2.6611e-01 
 -1.3967e-01  +2.1247e-02  -3.1675e-01  +3.2822e-01 
 +1.9604e-03  -2.7208e-03  -1.6243e-02  +1.0013e-02 
 -9.7855e-02  +4.1405e-03  -1.9900e-01  +2.1104e-01 

 A * inv(A)
     +1.0000      -0.0000      +0.0000      +0.0000 
     -0.0000      +1.0000      -0.0000      +0.0000 
     -0.0000      +0.0000      +1.0000      +0.0000 
     +0.0000      -0.0000      +0.0000      +1.0000 


 Press return to continue
 Press X      to stop