Aller au contenu

Mathc complexes/a82

Un livre de Wikilivres.


Application

Le code de la fonction :

/* ------------------------------------ */
/* ------------------------------------ */
double **rcsymmetric_mZ(
double **A,
int      n
)
{
int r = rsize_Z(A);
int c = csize_Z(A);	
	
double **B   = r_mZ(i_mZ(r,c),n);
double **B_T = ctranspose_mZ(B,i_mZ(c,r));

         mul_mZ(B,B_T, A);
         
   f_mZ(B);
   f_mZ(B_T);

 return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
J'utilise ici une propriété de l'algèbre linéaire qui dit que si on multiplie une matrice par sa conjugué transposée le résultat est une matrice symétrique conjugué.

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

c00a.c
/* ------------------------------------ */
/*  Save as :   c00a.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
void fun(int rc)
{
double **A   = rcsymmetric_mZ(i_mZ(rc,rc),9);

  clrscrn();

  printf(" rcsymmetric_mZ() :  \n\n" 
         " A[R%d,C%d] :           ", rsize_Z(A), csize_Z(A));
  p_mZ(A, S5,P0, S5,P0, C8);
   
  f_mZ(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
  
  do
        fun(rp_I(RC6));

  while(stop_w());       

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

Exemple de sortie écran :

 -------------------------------
 rcsymmetric_mZ() :  

 A[R5,C5] :           
 +277   +0i  +112 +160i    +1  -79i   +12  -27i   -52 -147i 
 +112 -160i  +461   +0i   -65  +12i   -30 +129i  -196  +17i 
   +1  +79i   -65  -12i  +315   +0i   -53  +33i  +131  -30i 
  +12  +27i   -30 -129i   -53  -33i  +208   +0i   -30  +85i 
  -52 +147i  -196  -17i  +131  +30i   -30  -85i  +213   +0i 


 Press return to continue
 Press X      to stop