Mathc matrices/c23r

Un livre de Wikilivres.


Application


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


c00a.c
/* ------------------------------------ */
/*  Save as :   c00a.c                  */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
#define C_FREE1     C3
#define C_FREE2     C4
/* ------------------------------------ */
int main(void)
{
double ab[R4*C7]={
    +1,      3,     -2,      0,    +2,    +0,    0,
    +2,      6,     -5,     -2,    +4,    -3,    0,
     0,      0,     +5,     10,     0,    15,    0, 
     2,      6,      0,      8,     4,    18,    0,  
};

double **Ab = ca_A_mR(ab,i_Abr_Ac_bc_mR(R4,C6,C1));
double **A  = c_Ab_A_mR(Ab,i_mR(R4,C6));
double **b  = c_Ab_b_mR(Ab,i_mR(R4,C1));

double **Ab_free = i_Abr_Ac_bc_mR(csize_A_R(Ab),csize_A_R(Ab),C1+C3);

double **b_free  = i_mR(rsize_R(Ab_free),csize_b_R(Ab_free)); 


double **cFree1        = i_mR(R6,C1);
double **cFree2        = i_mR(R6,C1);
double **cFree1plscFree2   = i_mR(R6,C1);
double **A_cFree1plscFree2 = i_mR(rsize_R(A),csize_R(cFree1plscFree2)) ;


int r;

  clrscrn();
  printf(" Verify if the sum of two columns of b_free\n"
         " is orthogonal to A :\n\n");
  printf(" A :");
  p_mR(A,S6,P1,C10);
  printf(" b :");
  p_mR(b,S6,P1,C10);
  printf(" Ab :");
  p_mR(Ab,S6,P1,C10);
  stop();

  gj_PP_mR(Ab,NO);  
  
  put_zeroR_mR(Ab,Ab_free);   
  put_freeV_mR(Ab_free);
  
  r = rsize_R(Ab_free);
  while(r>R1)    
        zero_below_pivot_gj1Ab_mR(Ab_free,r--);
        

  clrscrn();
  c_Ab_b_mR(Ab_free,b_free);
  printf(" b_free :"); 
  p_mR(b_free,S10,P3,C7);
  c_c_mR(b_free,C_FREE1,cFree1,C1);
  c_c_mR(b_free,C_FREE2,cFree2,C1);
  printf(" C%d + C%d :",C_FREE1,C_FREE2);  
  p_mR(add_mR(cFree1,cFree2,cFree1plscFree2),S10,P3,C7);
  printf(" A * (C%d+C%d) :",C_FREE1,C_FREE2);   
  p_mR(mul_mR(A,cFree1plscFree2,A_cFree1plscFree2),S10,P3,C7);
  stop();	
  
  f_mR(Ab);
  f_mR(Ab_free);
  f_mR(b_free);
  f_mR(b);
  f_mR(A);

  f_mR(cFree1); 
  f_mR(cFree2);
  f_mR(cFree1plscFree2);
  f_mR(A_cFree1plscFree2);
  
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


J'ai éliminé tous les affichages intermédiaire. On peut sélectionner les colonnes de travail dans le code ci-dessous.

#define C_FREE1     C3
#define C_FREE2     C4


Exemple de sortie écran :
 ------------------------------------ 
 Verify if the sum of two columns of b_free
 is orthogonal to A :

 A :
  +1.0   +3.0   -2.0   +0.0   +2.0   +0.0 
  +2.0   +6.0   -5.0   -2.0   +4.0   -3.0 
  +0.0   +0.0   +5.0  +10.0   +0.0  +15.0 
  +2.0   +6.0   +0.0   +8.0   +4.0  +18.0 

 b :
  +0.0 
  +0.0 
  +0.0 
  +0.0 

 Ab :
  +1.0   +3.0   -2.0   +0.0   +2.0   +0.0   +0.0 
  +2.0   +6.0   -5.0   -2.0   +4.0   -3.0   +0.0 
  +0.0   +0.0   +5.0  +10.0   +0.0  +15.0   +0.0 
  +2.0   +6.0   +0.0   +8.0   +4.0  +18.0   +0.0 

 Press return to continue. 


 ------------------------------------ 
 b_free :
    +0.000     -3.000     -4.000     -2.000 
    +0.000     +1.000     +0.000     +0.000 
    +0.000     +0.000     -2.000     +0.000 
    +0.000     +0.000     +1.000     +0.000 
    +0.000     +0.000     +0.000     +1.000 
    +0.000     +0.000     +0.000     +0.000 

 C3 + C4 :
    -6.000 
    +0.000 
    -2.000 
    +1.000 
    +1.000 
    +0.000 

 A * (C3+C4) :
    +0.000 
    +0.000 
    +0.000 
    +0.000 

 Press return to continue.