Mathc matrices/a257

Un livre de Wikilivres.


Gauss-Jordan


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


gj_r_a2.c
/* ------------------------------------ */
/*  Save as :   gj_r_a2.c                 */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
/* ------------------------------------ */
#define   RA R4
#define   CA C6
#define   Cb C1
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double ab[RA*(CA+Cb)]={
    +1,     -3,     +4,     -2,    +5,    +4,  0,
    +2,     -6,     +9,     -1,    +8,    +2,  0,
    +2,     -6,     +9,     -1,    +9,    +7,  0, 
    -1,      3,     -4,      2,    -5,    -4,  0,  
};

double **Ab = ca_A_mR(ab,i_Abr_Ac_bc_mR(RA,CA,Cb));
double **A  = c_Ab_A_mR(Ab,i_mR(RA,CA));
double **b  = c_Ab_b_mR(Ab,i_mR(RA,Cb));

  clrscrn();
  printf(" A :");
  p_mR(A,S8,P0,C7);
  printf(" b :");
  p_mR(b,S8,P0,C7);
  printf(" Ab :");
  p_mR(Ab,S8,P0,C7);
  getchar();

  clrscrn();
  printf(" Copy/Past into the octave window.\n\n");
  p_Octave_mR(Ab,"Ab",P0);
  printf("\n rref(Ab,.00000000001)\n\n");
  printf("  gj_PP_mR(Ab,YES) :");
  gj_PP_mR(Ab,YES);
  p_mR(Ab,S10,P4,C7);
  stop();

  f_mR(Ab);
  f_mR(b);
  f_mR(A);
  
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


Si A est une matrice singulière le Total pivoting ne fonctionne pas. C'est pourquoi j'ai introduit un nouvel algorithme. Par exemple, le Total pivoting ne permettrait pas d'obtenir le résultat ci-dessous.


Exemple de sortie écran :
 A :
      +1       -3       +4       -2       +5       +4 
      +2       -6       +9       -1       +8       +2 
      +2       -6       +9       -1       +9       +7 
      -1       +3       -4       +2       -5       -4 

 b :
      +0 
      +0 
      +0 
      +0 

 Ab :
      +1       -3       +4       -2       +5       +4       +0 
      +2       -6       +9       -1       +8       +2       +0 
      +2       -6       +9       -1       +9       +7       +0 
      -1       +3       -4       +2       -5       -4       +0 


 Copy/Past into the octave window.

 Ab=[
+1,-3,+4,-2,+5,+4,+0;
+2,-6,+9,-1,+8,+2,+0;
+2,-6,+9,-1,+9,+7,+0;
-1,+3,-4,+2,-5,-4,+0]


 rref(Ab,.00000000001)

  gj_PP_mR(Ab,YES) :
   +1.0000    -3.0000    +4.5000    -0.5000    +4.0000    +1.0000    +0.0000 
   -0.0000    -0.0000    +1.0000    +3.0000    -2.0000    -6.0000    -0.0000 
   +0.0000    +0.0000    +0.0000    +0.0000    +1.0000    +5.0000    +0.0000 
   +0.0000    +0.0000    +0.0000    +0.0000    +0.0000    +0.0000    +0.0000 

 Press return to continue.