Mathc complexes/Fichiers c : mul rot

Un livre de Wikilivres.

Application

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

mul_tran.c
/* ------------------------------------ */
/*  Save as :   mul_tran.c              */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
void fun(int r,int rc)
{
double **A    = r_mZ(i_mZ(r,rc),99);
double **A_t  =      i_mZ(rc,r);
double **AA_t =      i_mZ(r, r);

  clrscrn();

  printf(" A[R%d,C%d] : \n",rsize_Z(A),csize_Z(A));
  p_mZ(A, S5,P0, S4,P0, C4);

  printf(" A_t[R%d,C%d] : \n",rsize_Z(A_t),csize_Z(A_t));
  p_mZ(transpose_mZ(A,A_t), S5,P0, S4,P0, C4);

  printf(" AA_t[R%d,C%d] : \n",rsize_Z(AA_t),csize_Z(AA_t));
  p_mZ(mul_mZ(A,A_t,AA_t), S10,P0, S6,P0, C3);
  
  f_mZ(A);
  f_mZ(A_t);
  f_mZ(AA_t);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
  
   do 
         fun(rp_I(R4),rp_I(RC4));
        
    while(stop_w());
        
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


Si nous multiplions une matrice par sa transposé, l'opération est toujours possible et cela donne une matrice symétrique.


Exemple de sortie écran :

 A[R4,C2] : 

  -99 +58i   +80 -29i 
  -79 +96i   +18 +84i 
  +54 +88i   +88 +62i 
   -3 +76i   +22 +52i 

 A_t[R2,C4] : 

  -99 +58i   -79 +96i   +54 +88i    -3 +76i 
  +80 -29i   +18 +84i   +88 +62i   +22 +52i 

 AA_t[R4,C4] : 

    +11996-16124i      +6129 -7888i      -1612 -3172i 
     +6129 -7888i      -9707-12144i     -16338 +6740i 
     -1612 -3172i     -16338 +6740i       -928+20416i 
      -843 -4176i     -11031 -3508i      -8138 +9780i 

      -843 -4176i 
    -11031 -3508i 
     -8138 +9780i 
     -7987 +1832i 


 Press return to continue
 Press X      to stop