Aller au contenu

Mathc complexes/03y

Un livre de Wikilivres.

Application


Installer et compiler ce fichier dans votre répertoire de travail.

c00a.c
/* ------------------------------------ */
/*  Save as :   c00.c                   */
/* ------------------------------------ */
#include "w_a.h"  
/* ------------------------------------ */
#define   RCA RC3
#define   CX  C1
/* ------------------------------------ */
/* ------------------------------------ */
int main(void)
{
double **A  =         eye_mZ( i_mZ(RCA,RCA));
double **b  =           r_mZ( i_mZ(RCA, CX),99);

double **Ab = i_Abr_Ac_bc_mZ(RCA, RCA, CX);
                          // Rab  CA   Cb
                          
double **New_Ab = i_AbR_AbC_AC_mZ( Ab[R_SIZE  ][C0],  // Rab      + R0
                                   Ab[C_SIZE  ][C0],  // 2(CA+Cb) + C0
                                   Ab[C_SIZE_A][C0]); // 2(CA)    + C0
                                                                                                         
  c_A_b_Ab_mZ(A,b,Ab);
  c_A_b_Ab_mZ(A,b,New_Ab);
    
  clrscrn();
  printf(" A :");
  p_mZ(A,  S5,P0, S4,P0, C6);
  printf(" b :");
  p_mZ(b,  S5,P0, S4,P0, C6);
  printf(" Ab : i_Abr_Ac_bc_mZ();");
  p_mZ(Ab, S5,P0, S4,P0, C6);
  printf(" New_Ab : i_AbR_AbC_AC_mZ();");
  p_mZ(New_Ab, S5,P0, S4,P0, C6);
  stop();

  clrscrn();
  printf(" Ab : i_Abr_Ac_bc_mZ();");
  pall_mZ(Ab, S5,P0, S4,P0 );
  printf(" New_Ab : i_AbR_AbC_AC_mZ();");
  pall_mZ(New_Ab, S5,P0, S4,P0 );
  stop();
  
  f_mZ(Ab);
  f_mZ(New_Ab);
  f_mZ(b);
  f_mZ(A);

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


La taille du système est lue en mémoire.

Il faut calculer le nombre de lignes et de colonnes du système Ab avant l'appel de i_mZ(). 
  Ab_r--;
  Ab_c = ((Ab_c-C1)/C2);

  New_Ab = i_mZ(Ab_r,Ab_c);


Par contre le nombre de colonne de A enregistré à l'adresse Ab[C_SIZE_A][C0], est déjà correct en langage c.  
  New_Ab[C_SIZE_A][C0] = A_c;


double **i_AbR_AbC_AC_mZ(
int     Ab_r,     // nombre de lignes   de Ab :         Ab[R_SIZE]  [C0] = (  RAb + R0)  
int     Ab_c,     // nombre de colonnes de Ab :         Ab[C_SIZE]  [C0] = (2*CAb + C0)
int      A_c      // nombre de colonnes de A  :         Ab[C_SIZE_A][C0] = (2*CA  + R0)
)


Exemple de sortie écran :

 A :
   +1  +0i    +0  +0i    +0  +0i 
   +0  +0i    +1  +0i    +0  +0i 
   +0  +0i    +0  +0i    +1  +0i 

 b :
  +29 -73i 
  -24 +56i 
  -70 -42i 

 Ab : i_Abr_Ac_bc_mZ();
   +1  +0i    +0  +0i    +0  +0i   +29 -73i 
   +0  +0i    +1  +0i    +0  +0i   -24 +56i 
   +0  +0i    +0  +0i    +1  +0i   -70 -42i 

 New_Ab : i_AbR_AbC_AC_mZ();
   +1  +0i    +0  +0i    +0  +0i   +29 -73i 
   +0  +0i    +1  +0i    +0  +0i   -24 +56i 
   +0  +0i    +0  +0i    +1  +0i   -70 -42i 

 Press return to continue. 


 Ab : i_Abr_Ac_bc_mZ();
   +4    +1   0     +2   0     +3   0     +4   0  

   +9    +1  +0i    +0  +0i    +0  +0i   +29 -73i 
   +7    +0  +0i    +1  +0i    +0  +0i   -24 +56i 
   +0    +0  +0i    +0  +0i    +1  +0i   -70 -42i 

 New_Ab : i_AbR_AbC_AC_mZ();
   +4    +1   0     +2   0     +3   0     +4   0  

   +9    +1  +0i    +0  +0i    +0  +0i   +29 -73i 
   +7    +0  +0i    +1  +0i    +0  +0i   -24 +56i 
   +0    +0  +0i    +0  +0i    +1  +0i   -70 -42i 

 Press return to continue.