Aller au contenu

Mathc complexes/09k

Un livre de Wikilivres.


Application

Le code de la fonction :

/* ------------------------------------ */
/* ------------------------------------ */
double **c_Ab_b_mZ(
double **Ab,
double **b
)
{
int r;
int c;
int b_c;

  	for    (r=R1;                      r<Ab[R_SIZE][C0]; r++)
 	   for (c=Ab[C_SIZE_A][C0],b_c=C1; c<Ab[C_SIZE][C0]; c++,b_c++)

            b[r][b_c] = Ab[r][c];

return(b);
}
/* ------------------------------------ */
/* ------------------------------------ */
Copier b de Ab dans b. Le coefficient Ab[C_SIZE_A][C0] dans Ab donne le nombre de colonne de A. Il est mémorisé dans dans la deuxième ligne (C_SIZE_A = R2) et la colonne zéro (C0).
   c  = Ab[C_SIZE_A][C0] // De la première colonne de b dans Ab
   b_c= C1               // De la première colonne de b.

   c++    // à la dernière colonne de b dans Ab
   b_c++  // à la dernière colonne de b
 //La matrice Ab doit être initialiser avec la fonction :
 
 double **Ab = i_Abr_Ac_bc_mZ( RAb, CA, Cb); 
 
 // Cette fonction installe la bonne taille pour la matrices Ab.
 
 double **i_Abr_Ac_bc_mZ(
 int     Ab_r,                  // nombre de lignes   de Ab
 int      A_c,                  // nombre de colonnes de A
 int      b_c                   // nombre de colonnes de b
 )

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

c00c.c
/* ------------------------------------ */
/*  Save as :   c00c.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
void fun(int r, int Ac, int bc)
{
double **Ab = r_mZ( i_Abr_Ac_bc_mZ(r,Ac,bc),99.);        
double **b  =       i_mZ(r,bc);

  c_Ab_b_mZ(Ab, b);
                           
  clrscrn();
  printf(" Ab :                            Ab[R%d][C%d]   \n",
                            rsize_Z(Ab), 
                            csize_Z(Ab));
  p_mZ(Ab,S5,P0,S4,P0,C6);

  printf(" b : c_Ab_b_mZ(Ab,b);             b[R%d][C%d]  \n",
                            rsize_Z(Ab), 
                            csize_Z(Ab)-csize_A_Z(Ab));
  p_mZ(b,S5,P0,S4,P0,C6);
        
  f_mZ(Ab);
  f_mZ(b);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
do
{
  fun(rp_I(R3)+R1, rp_I(C2)+C1, rp_I(C2)+C1);

} while(stop_w());

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

Exemple de sortie écran :

 Ab :                            Ab[R4][C6]   

  +84 -22i   -33 +95i   +90 -78i   +96 -94i   +51 +40i   +19 +65i 
  -92 -58i    -2 +81i   +16 +81i   +80 -69i   +98 +81i   -32 -61i 
  +50 +17i   +31 -24i   +81  +6i   +98 -63i   -86 -58i   +18 -32i 
  +73  +6i   -84 -82i   -64  -1i   +76 -13i    -4 +38i    -4 -12i 

 b : c_Ab_b_mZ(Ab,b);             b[R4][C3]  

  +96 -94i   +51 +40i   +19 +65i 
  +80 -69i   +98 +81i   -32 -61i 
  +98 -63i   -86 -58i   +18 -32i 
  +76 -13i    -4 +38i    -4 -12i 


 Press   return to continue
 Press X return to stop