Aller au contenu

Mathc complexes/035

Un livre de Wikilivres.


Application


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-3         
#define RCA          RC5 
#define EVALUE       RC1       
/* ------------------------------------ */
void fun(void)
{                          
double a[RCA*(RCA*C2)] ={   
+33.519963947,-0.000000000, -13.693912818,+6.712740170, +6.614415988,-2.591607122, -14.832764827,-15.560900752, +5.931313432,+7.201798592, 
-13.693912818,-6.712740170, +39.585869431,+0.000000000, -12.477192990,+16.370664567, +8.957620096,-4.146641673, -20.695195874,-8.986119738, 
+6.614415988,+2.591607122, -12.477192990,-16.370664567, +40.575180719,+0.000000000, -10.968623618,-19.349596696, -6.548231731,+8.901841379, 
-14.832764827,+15.560900752, +8.957620096,+4.146641673, -10.968623618,+19.349596696, +41.873262178,-0.000000000, +4.207151243,-10.065003488, 
+5.931313432,-7.201798592, -20.695195874,+8.986119738, -6.548231731,-8.901841379, +4.207151243,+10.065003488, +28.445723725,-0.000000000
};
                       
double **A        = ca_A_mZ(a,           i_mZ(RCA,RCA));
double **sA       = smul_mZ(FACTOR_E, A, i_mZ(RCA,RCA));
double **EValue   = eigs_mZ(         sA, i_mZ(RCA,RCA));
double **V        =                      i_mZ(RCA,RCA);

double **Ide      =  eye_mZ(             i_mZ(RCA,RCA));
double **zIde     =                      i_mZ(RCA,RCA);
double **sAmnszIde =                     i_mZ(RCA,RCA);

double **Ab       =            i_Abr_Ac_bc_mZ(RCA,RCA,C1);
double **b        =                      i_mZ(    RCA,C1);
double **Ab_free  =            i_Abr_Ac_bc_mZ(RCA,RCA,C2);
double  **b_free  =                      i_mZ(    RCA,C2);

  clrscrn(); 
  printf(" A :");
  p_mZ(A, S13,P9, S13,P9, C2);  
  
         zmul_mZ(i_Z(EValue[EVALUE][C1],EValue[EVALUE][C2]),Ide,zIde);  
          sub_mZ(sA,zIde,sAmnszIde);
      
     c_A_b_Ab_mZ(sAmnszIde,b,Ab); 

  GJ_PP_FreeV_mZ(Ab,Ab_free,b_free);
    
          c_c_mZ(b_free,C2,V,EVALUE); 

    Normalize_mZ(V);
  stop();

  clrscrn();     
  printf(" V%d :",EVALUE);
  P_mZ(V, S6,P9, S8,P9, C4); 
  printf("\n");  
  stop();
              
  f_mZ(A);
  f_mZ(V);  
  f_mZ(EValue);
  
  f_mZ(Ide);
  f_mZ(zIde);
  f_mZ(sAmnszIde);
  
  f_mZ(sA);
  
  f_mZ(Ab);
  f_mZ(b);
  
  f_mZ(Ab_free);
  f_mZ(b_free);    
}
/* ------------------------------------ */
int main(void)
{
    fun();
    
  return 0;
}
/* ------------------------------------ */
/* ------------------------------------ */


Calculer un vecteur propre.


Exemple de sortie écran :
 A :
+33.519963947 -0.000000000i -13.693912818 +6.712740170i 
-13.693912818 -6.712740170i +39.585869431 +0.000000000i 
 +6.614415988 +2.591607122i -12.477192990-16.370664567i 
-14.832764827+15.560900752i  +8.957620096 +4.146641673i 
 +5.931313432 -7.201798592i -20.695195874 +8.986119738i 

 +6.614415988 -2.591607122i -14.832764827-15.560900752i 
-12.477192990+16.370664567i  +8.957620096 -4.146641673i 
+40.575180719 +0.000000000i -10.968623618-19.349596696i 
-10.968623618+19.349596696i +41.873262178 -0.000000000i 
 -6.548231731 -8.901841379i  +4.207151243+10.065003488i 

 +5.931313432 +7.201798592i 
-20.695195874 -8.986119738i 
 -6.548231731 +8.901841379i 
 +4.207151243-10.065003488i 
+28.445723725 -0.000000000i 

 Press return to continue. 


V1 :
+0.118330494,+0.336141,   -nan,    -nan,   -nan,    -nan,   -nan,    -nan, 
-0.312524604,-0.379916,   -nan,    -nan,   -nan,    -nan,   -nan,    -nan, 
-0.179576129,+0.492444,   -nan,    -nan,   -nan,    -nan,   -nan,    -nan, 
-0.286321908,-0.401151,   -nan,    -nan,   -nan,    -nan,   -nan,    -nan, 
+0.336672172,+0.000000,   -nan,    -nan,   -nan,    -nan,   -nan,    -nan  

  -nan,    -nan, 
  -nan,    -nan, 
  -nan,    -nan, 
  -nan,    -nan, 
  -nan,    -nan  


 Press return to continue.