Aller au contenu

Mathc complexes/02f

Un livre de Wikilivres.


Application

Le code de la fonction :

/* ------------------------------------ */ 
/* ------------------------------------ */
double **rdefpos_diag_mZ(
double **D,
double **A,
int      n
)
{
int r = rsize_Z(A);

double **Q  =        r_Q_mZ(     i_mZ(r,r),n);
double **QT = ctranspose_mZ(Q,   i_mZ(r,r));
double **QD =        mul_mZ(Q,D, i_mZ(r,r));

         mul_mZ(QD,QT,A);

  f_mZ(Q);
  f_mZ(QT);
  f_mZ(QD);
  
 return(A);
}
/* ------------------------------------ */      
/* ------------------------------------ */
Vous commencez par choisir vos valeurs propres (le tableau d). La fonction va créer une matrice qui possédera ces valeurs propres. 
La fonction r_Q_mZ(); créé la matrice aléatoire Q avec les vecteurs propres (orthogonaux). 
Puis l'algorithme A = Q EValue Q_cT nous donne la matrice  A. 

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

c00a.c
/* ------------------------------------ */
/*  Save as :   c00a.c                  */
/* ------------------------------------ */
#include "w_a.h"
/* ------------------------------------ */
#define FACTOR_E    +1.E-2         
#define RCA          RC3  
/* ------------------------------------ */ 
void fun(void)
{  
double d[RCA*(RCA*C2)] ={   
   5,5, 0,0,  0,0,
   0,0, 4,4,  0,0,
   0,0, 0,0,  3,3};
                           
double **D          =         ca_A_mZ(d, i_mZ(RCA,RCA));                            
double **A          = rdefpos_diag_mZ(D, i_mZ(RCA,RCA),9);
double **EigsValue  =         eigs_mZ(A, i_mZ(RCA,C1));  

  clrscrn(); 
  printf(" Choose your eigenvalues (d),     \n"
         " and copy A into the next C file\n\n"
         " A:");
  P_mZ(A, S10,P10, S10,P10, C4);     
    
  printf(" D = EValue :");
  p_mZ(D, S3,P0, S2,P0, C4);
  
  f_mZ(D);  
  f_mZ(A); 
  f_mZ(EigsValue);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));

do
{
    fun();
    
} while(stop_w());

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

Exemple de sortie écran :

 Choose your eigenvalues (d),     
 and copy A into the next C file

 A:
+3.6655231228,+3.6655231228, -0.3965810096,+0.4282557046, +0.8670026157,-0.0384689329, 
+0.4282557046,-0.3965810096, +4.6023160144,+4.6023160144, +0.5686805385,-0.1906631555, 
-0.0384689329,+0.8670026157, -0.1906631555,+0.5686805385, +3.7321608628,+3.7321608628  

 D = EValue :
 +5+5i  +0+0i  +0+0i 
 +0+0i  +4+4i  +0+0i 
 +0+0i  +0+0i  +3+3i 


 Press   return to continue
 Press X return to stop